dll钩子中的所有代码如下:
#include <windows.h>static HHOOK hkb = NULL;
HINSTANCE hins; //钩子函数所在模块的句柄
extern "C"__declspec(dllexport) LRESULT CALLBACK KeyboardProc(int nCode,
WPARAM wParam,
LPARAM lParam)
{
if (((DWORD)lParam & 0x40000000) && (HC_ACTION == nCode))
{
switch (wParam)
{
case '1':
MessageBox(NULL, "键1按下", "NOTICE", MB_OK);
break;
case '2':
MessageBox(NULL, "键2按下", "NOTICE", MB_OK);
break;
case 'J':
MessageBox(NULL, "键J按下", "NOTICE", MB_OK);
}
} //LRESULT 其实就是个long型
LRESULT RetVal = CallNextHookEx(hkb, nCode, wParam, lParam); return RetVal;
}extern "C"__declspec(dllexport) BOOL InstallHook()
{
//获取进程的句柄
hins = GetModuleHandle(NULL);
MessageBox(NULL, "执行InstallHook", "NOTICE", MB_OK);
if (NULL == hins)
{
MessageBox(NULL, "hins初始化失败", "WARNING", MB_OK);
} hkb = SetWindowsHookEx(WH_KEYBOARD,
(HOOKPROC)KeyboardProc,
hins,
0); if (NULL == hkb)
{
MessageBox(NULL, "hkb初始化失败", "WARING", MB_OK);
} return TRUE;
}调用dll代码如下
//函数指针
typedef BOOL (CALLBACK *InstallHook)();
//指针实例
InstallHook installhookFunc; //加载dll
if (hinstDLL = LoadLibrary((LPCTSTR)"D:\\VC++6.0开发\\钩子dll\\Debug\\钩子dll.dll"))
{
installhookFunc = (InstallHook)GetProcAddress(hinstDLL, "InstallHook");
installhookFunc();
}
else
{
MessageBox(NULL, "当前目录找不到钩子.dll文件, 程序初始化失败", "WARNING", MB_OK);
}
while (true)
{
//只是进行测试
}
问题是:
dll能成功加载,InstallHook也能成功被调用,可是KeyboardProc好像没有装载成功,按键盘上的1、2等键也没有响应,不知道是不是hins这个参数的问题
PS:调用dll的代码包含在一个控台程序里
哪位大侠能指点一下
#include <windows.h>static HHOOK hkb = NULL;
HINSTANCE hins; //钩子函数所在模块的句柄
extern "C"__declspec(dllexport) LRESULT CALLBACK KeyboardProc(int nCode,
WPARAM wParam,
LPARAM lParam)
{
if (((DWORD)lParam & 0x40000000) && (HC_ACTION == nCode))
{
switch (wParam)
{
case '1':
MessageBox(NULL, "键1按下", "NOTICE", MB_OK);
break;
case '2':
MessageBox(NULL, "键2按下", "NOTICE", MB_OK);
break;
case 'J':
MessageBox(NULL, "键J按下", "NOTICE", MB_OK);
}
} //LRESULT 其实就是个long型
LRESULT RetVal = CallNextHookEx(hkb, nCode, wParam, lParam); return RetVal;
}extern "C"__declspec(dllexport) BOOL InstallHook()
{
//获取进程的句柄
hins = GetModuleHandle(NULL);
MessageBox(NULL, "执行InstallHook", "NOTICE", MB_OK);
if (NULL == hins)
{
MessageBox(NULL, "hins初始化失败", "WARNING", MB_OK);
} hkb = SetWindowsHookEx(WH_KEYBOARD,
(HOOKPROC)KeyboardProc,
hins,
0); if (NULL == hkb)
{
MessageBox(NULL, "hkb初始化失败", "WARING", MB_OK);
} return TRUE;
}调用dll代码如下
//函数指针
typedef BOOL (CALLBACK *InstallHook)();
//指针实例
InstallHook installhookFunc; //加载dll
if (hinstDLL = LoadLibrary((LPCTSTR)"D:\\VC++6.0开发\\钩子dll\\Debug\\钩子dll.dll"))
{
installhookFunc = (InstallHook)GetProcAddress(hinstDLL, "InstallHook");
installhookFunc();
}
else
{
MessageBox(NULL, "当前目录找不到钩子.dll文件, 程序初始化失败", "WARNING", MB_OK);
}
while (true)
{
//只是进行测试
}
问题是:
dll能成功加载,InstallHook也能成功被调用,可是KeyboardProc好像没有装载成功,按键盘上的1、2等键也没有响应,不知道是不是hins这个参数的问题
PS:调用dll的代码包含在一个控台程序里
哪位大侠能指点一下
随便建个dialog,建个按钮事件
void CDddDlg::OnPress()
{
HINSTANCE hinstDLL = LoadLibrary("d:\\keyhook.dll");
typedef BOOL (WINAPI *installhookFunc)();
installhookFunc myf;
myf=(installhookFunc)GetProcAddress(hinstDLL,"InstallHook");
myf();
}
可以KeyboardProc进去的