服务程序中加载DLL(DLL中是关于键盘的钩子函数)出现问题!!(欢迎高手指点)

xuefang2402 2008-03-03 09:23:23
我写了一个服务程序,在服务的ServiceMain函数当中,我用LoadLibray载入Dll文件,用GetProgress函数获得DLL当中的函数地址,获得的函数实际执行的是安装键盘钩子函数的功能,代码段如下:
dllhinst=LoadLibrary(strDllPath);
if (dllhinst!=NULL)
{
lpfnDllFunc1=(LPFNDLLFUNC1)GetProcAddress(dllhinst, "SetKbHook"); //该函数执行的是安装键盘钩子
if (!lpfnDllFunc1)
{
FreeLibrary(dllhinst);
error=TRUE;
}
else
lpfnDllFunc1(); //该函数执行的是安装键盘钩子
}

while (GetMessage(&msg,0,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
};

在调试的时候,可以正确载入DLL,获得SetKbHook的地址,大概是0x1000100a,调试进入SetKbHook函数,能成功执行SetWindowsHookEx函数,但是之后,我敲击键盘,没有执行我挂钩的函数,即对键盘的消息没有响应。郁闷!!
但是当我不编写程服务程序的话,仅仅从一个普通的应用程序中执行上面的代码,则可以正常响应我的键盘钩子函数,这是什么原因,请高手指点。

个人认为是服务程序的调用DLL的一些特性造成的,但不知从何找资料,帮帮忙吧!!!
...全文
87 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
scq2099yt 2008-03-04
  • 打赏
  • 举报
回复
ding
xuefang2402 2008-03-04
  • 打赏
  • 举报
回复
谢谢各位高手的指点,看来在下以后应该多多努力学习啊
jameshooo 2008-03-03
  • 打赏
  • 举报
回复
不要试图用服务来设置钩子,对桌面进程是无效的,除非桌面进程被显式设置成了允许被其它帐户hook。
cnzdgs 2008-03-03
  • 打赏
  • 举报
回复
SetWindowsHookEx只能Hook同一桌面上的线程,服务程序与应用程序不是同一桌面。
terran_ye 2008-03-03
  • 打赏
  • 举报
回复
我菜,帮你想一下,是不是因为服务的EXE和桌面上的EXE不在同一层产生的问题,

在运行services.msc 然后在你的那个服务右键属性--登录--允许服务和桌面交互 打钩

用代码也可以,sogou一下,很多,
xuefang2402 2008-03-03
  • 打赏
  • 举报
回复
有人帮忙吗,急啊,困扰我好久了!

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧