首页
社区
课程
招聘
请问为什么在服务中安装的键盘钩子不起作用?
发表于: 2007-3-10 12:33 6165

请问为什么在服务中安装的键盘钩子不起作用?

2007-3-10 12:33
6165
呵呵接触这些概念没有多久。

我按照一般做法作了个键盘钩子DLL,原理是钩WM_CHAR消息。当我用普通应用程序加载它的时候工作正常,但是当我用袭击编写的Windows服务加载,却不能工作。DLL肯定是加载了(加载后就无法删除了)。

后来突然想到服务是以SYSTEM用户的身份加载的,那么键盘钩子DLL也是以SYSTEM用户的身份加载了?是不是这个原因啊?该如何解决呢?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 112
活跃值: (16)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
2
不知道哦!~~
2007-3-10 22:23
0
雪    币: 279
活跃值: (33)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
服务程序一般使用的是LocalSystem帐户,拥有自己的window station,和Default桌面,这个window station是不能于用户交互的,也就是说,你不能在上面显示窗口,它也不接受用户的鼠标、键盘等输入。

我们使用用户帐户登录以后,看到的桌面,是WinSta0(window station)下的Default(desktop).
WinSta0下有3个桌面:
WinLogon :以Logon对话框的形式出现.当用户登录以后,WinLogon.exe切换到Default desktop.
Default :这是Explorer.exe和所有用户程序窗口出现的地方,也就是我们通常使用windows看见的地方.应用程序就运行在这个桌面上
Screen saver :系统空闲的时候,运行屏保的桌面.

当你在“计算机管理”中选择一个服务,修改属性,选择“登录”标签页的“允许服务与桌面交互”,那么该服务就使用的是WinSta0(window station)下的Default(desktop). 你也就可以与你的服务进行交互操作了。这时,你能获取default的桌面位图,因为线程的桌面就是WinSta0下的Default。要想同时获得Winlogon桌面位图,应该先把线程的桌面设置成Winlogon。

具体的,看msdn
2007-3-11 08:13
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢指点,我再看看
2007-3-11 09:57
0
游客
登录 | 注册 方可回帖
返回
//