服务程序TService类,如何实现钩子?(200)

  • 主题发起人 主题发起人 wuym1972
  • 开始时间 开始时间
W

wuym1972

Unregistered / Unconfirmed
GUEST, unregistred user!
我用delphi实现一个服务程序的钩子函数, TXXX = class(TService) procedure ServiceStop(Sender: TService; var Stopped: Boolean); procedure ServiceStart(Sender: TService; var Started: Boolean); private { Private declarations } public function GetServiceController: TServiceController; override; { Public declarations } end;procedure TIPMS.ServiceStart(Sender: TService; var Started: Boolean);begin......LogHook := SetWindowsHookEx(WH_JOURNALRECORD, LogProc, HInstance, 0);......end;就这句:LogHook := SetWindowsHookEx(WH_JOURNALRECORD, LogProc, HInstance, 0);在服务程序中钩子函数始终不起作用,但是如果放在form中就起作用。[red]钩子函数相关模块肯定没有问题,只是如果放在服务程序中就不行,为什么?[/red]非常感谢您的解答!
 
要理清几个概念,用户空间,桌面一台电脑可以有多个用户,一个用户可以有多个桌面你这个钩子一般只会在进程所在用户空间的当前桌面生效一般用户都只用一个桌面,那么你需要的就是设置服务以指定用户帐户启动,而不是用system身份启动,因为system帐户有自己的桌面或者,把钩子代码放到线程,并指定线程到当前用户的桌面执行,用SetThreadDesktop具体内容参考windows API中的 Window Station and Desktop Reference
 
非常感谢您的回答。
 
后退
顶部