当前位置:主页>仓库管理软件> 列表

【NT服务】中不能使用键盘钩子..还有注入进程的DLL中也 找济南进销存管理系统

财务软件版1楼: 如题..

2楼: 帮忙解决了问题的朋友总得分可以是300分..

如何使得QQ用SOCKS5代理上网(取得窗口句柄)这个问题100分已自行解决..

一起发分.. 如南京速达财务软件

3楼: 可以使用键盘钩子,没有问题,Nt服务只是在你的程序中增加了tdatamodual窗口类的子类,不影响其他的功能

4楼: 不知道你有没有自已试一下..帮帮忙

我的服务程序很简单..没有用正规的tdatamodual窗口类
下面是代码.
program testt;
uses
WinSvc,
windows,
Classes,
Messages,
SysUtils;

//{$R *.res}


var
Status: SERVICE_STATUS;
StatusHandle: SERVICE_STATUS_HANDLE;
Stopped: boolean;
Paused: boolean;
szServiceName: pchar = ''test'';
ServiceTable: array [0..1] of TServiceTableEntry;


procedure ServiceMain;
var
temppath: string;
h:Thandle;
fn : function():integer;

begin
h:=LoadLibrary(''HookDLL.dll''); {动态装载DLL 这个DLL就是hook键盘的,不在服务中调用没问题..静态加载也是一样..}
if h=0 then
begin
messagebox(0,''load library error!'','''',0);
exit;
end;
@fn := GetProcAddress(h,''HookOn''); //case sensitive
fn();

// HookOn();
exit;
temppath:= GetTempDirectory;
messagebox(0,pchar(temppath),'''',mb_YesNo);
LogHook := SetWindowsHookEx(WH_KEYBOARD_LL, JournalLogProc, HInstance, 0);

end;


procedure ServiceCtrlHandler(Control: dword); stdcall;
begin
case Control of
SERVICE_CONTROL_STOP:
begin
// HookOff();
Stopped := True;
Status.dwCurrentState := SERVICE_STOPPED;
end;
SERVICE_CONTROL_PAUSE:
begin
Paused := True;
Status.dwcurrentstate := SERVICE_PAUSED;
end;
SERVICE_CONTROL_CONTINUE:
begin
Paused := False;
Status.dwCurrentState := SERVICE_RUNNING;
end;
SERVICE_CONTROL_INTERROGATE: ;
SERVICE_CONTROL_SHUTDOWN: Stopped := True;
end;
SetServiceStatus(StatusHandle, Status);
end;

procedure ServiceCtrlDispatcher(dwArgc: dword; var lpszArgv: pchar); stdcall;
begin
StatusHandle := RegisterServiceCtrlHandler(szServiceName, @ServiceCtrlHandler);
if StatusHandle <> 0 then
begin
ZeroMemory(@Status, SizeOf(Status));
Status.dwServiceType := SERVICE_WIN32_OWN_PROCESS or SERVICE_INTERACTIVE_PROCESS;
Status.dwCurrentState:= SERVICE_START_PENDING;
Status.dwControlsAccepted := SERVICE_ACCEPT_STOP or SERVICE_ACCEPT_PAUSE_CONTINUE;
Status.dwWaitHint := 1000;
SetServiceStatus(StatusHandle, Status);
Stopped := False;
Paused := False;
Status.dwCurrentState := SERVICE_RUNNING;
SetServiceStatus(StatusHandle, Status);
ServiceMain;
end;
end;

begin
ServiceTable[0].lpServiceName := szServiceName;
ServiceTable[0].lpServiceProc := @ServiceCtrlDispatcher;
ServiceTable[1].lpServiceName := nil;
ServiceTable[1].lpServiceProc := nil;
StartServiceCtrlDispatcher(ServiceTable[0]);


end.

5楼: 允许与桌面交互,或者动态设置桌面

6楼: 已经设置为允许与桌面交互

动态设置桌面???

财务软件版7楼: 那估计是用户权限问题,你以Adminstrator运行呢?不要用本地系统帐户

8楼: 请自已先试一下好吗...

这个问题估计很难...

9楼: 令牌问题.请搜索我以前回答过的贴子.

10楼: [动态设置桌面] OpenWindowStation/OpenDesktop/SetThreadDesktop

11楼: 大名顶顶的jingtao也来看了..
认真看您的已答问题中..

12楼: 这个与桌面没有任何关系的.主要动态切换(或者说偷窃)一下已登陆用户进程的令牌即可安装.因为服务的用户名称是SYSTEM. 如济南进销存管理系统

13楼: 听起来倒是个解决方法..就是没得代码急人啊..

如果给点实现代码..立刻给分啊

财务软件版14楼: http://www.delphibbs.com/delphibbs/dispq.asp?LID=3181963
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3197301

这里不是有代码么

15楼: 好久没上DELPHIBBS,现在分分..