服务程序中加载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的一些特性造成的,但不知从何找资料,帮帮忙吧!!!
...全文
59 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
有人帮忙吗,急啊,困扰我好久了!
回复
相关推荐
发帖
进程/线程/DLL
创建于2007-09-28

1.5w+

社区成员

VC/MFC 进程/线程/DLL
申请成为版主
帖子事件
创建了帖子
2008-03-03 09:23
社区公告
暂无公告