我写了一个服务程序,在服务的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的一些特性造成的,但不知从何找资料,帮帮忙吧!!!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货