服务程序中加载DLL(DLL中是关于键盘的钩子函数)出现问题!!(欢迎高手指点)
我写了一个服务程序,在服务的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的一些特性造成的,但不知从何找资料,帮帮忙吧!!!
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的一些特性造成的,但不知从何找资料,帮帮忙吧!!!
...全文
相关推荐
键盘钩子DLL
键盘钩子DLL,截获windows键
Windows键盘钩子DLL开发实战
钩子(Hook)是指在Windows系统中,通过调用函数注册的一个回调函数,该函数可以拦截并处理系统中特定类型的消息事件。钩子机制的核心思想是将开发者定义的函数插入到系统的事件处理链中,从而在事件到达目标窗口前进行预处理或修改。钩子的注册需要指定钩子类型(Hook Type),不同的钩子类型对应不同的事件拦截能力。例如::拦截键盘消息。WH_MOUSE:拦截鼠标消息。:拦截发送到窗口的消息。:拦截从消息队列中取出的消息。钩子分为系统级钩子和线程级钩子。
键盘钩子,无需使用DLL
键盘钩子,无需使用DLL。能记录底层的所有键盘信息。直接编译即可。
键盘钩子程序
一个简单的键盘钩子程序记录程序,可以记录电脑中的键盘操作....
MFC&wingdows;屏蔽键盘消息(键盘钩子)
Windows下键盘全局钩子,(鼠标钩子被注释掉了)MFC界面程序和动态链接库。


进程/线程/DLL

