装配全局钩子
安装全局钩子?
钩子安装成功,但总是进不去回调函数。代码如下:
KeyBdRedll.h文件里:
#include <Windows.h>
#define MYLIB extern "C" _declspec(dllexport)
MYLIB LRESULT CALLBACK ProcessKeyBoardMessage(int nCode,WPARAM wParam,LPARAM lParam);
KeyBdRedll.cpp文件里:
#include "stdafx.h"
#include "KeyBdRedll.h"
LRESULT CALLBACK ProcessKeyBoardMessage(int nCode,WPARAM wParam,LPARAM lParam)
{
MessageBox(NULL,L"收到消息",L"信息",MB_OK);
return 0;
}
上面是动态库的代码,下面是测试代码,采用隐式链接:
#include "stdafx.h"
#include <Windows.h>
#include "..\KeyBdRedll\KeyBdRedll.h"
#pragma comment(lib,"KeyBdRedll.lib")
int _tmain(int argc, _TCHAR* argv[])
{
HHOOK m_hook=SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)ProcessKeyBoardMessage,GetModuleHandle(L"KeyBdRedll.dll"),0);
if (m_hook==NULL)
{
int nCode=GetLastError();
}
while (1)
{
cout<<1<<endl;
}
return 0;
}
显示钩子安装成功,但是回调函数总是不调用,帮帮忙额~,操作系统win7,vs2008,已经用管理员权限运行。
------解决方案--------------------
不知道你从哪里看出来钩子安装成功了?全局钩子要求回调函数在一个DLL中,这个DLL不是本进程中的,而你是指向本进程的。
不用链接钩子函数所在的DLL,用LoadLibrary和GetProcessAddress获取dll句柄和函数地址。
钩子安装成功,但总是进不去回调函数。代码如下:
KeyBdRedll.h文件里:
#include <Windows.h>
#define MYLIB extern "C" _declspec(dllexport)
MYLIB LRESULT CALLBACK ProcessKeyBoardMessage(int nCode,WPARAM wParam,LPARAM lParam);
KeyBdRedll.cpp文件里:
#include "stdafx.h"
#include "KeyBdRedll.h"
LRESULT CALLBACK ProcessKeyBoardMessage(int nCode,WPARAM wParam,LPARAM lParam)
{
MessageBox(NULL,L"收到消息",L"信息",MB_OK);
return 0;
}
上面是动态库的代码,下面是测试代码,采用隐式链接:
#include "stdafx.h"
#include <Windows.h>
#include "..\KeyBdRedll\KeyBdRedll.h"
#pragma comment(lib,"KeyBdRedll.lib")
int _tmain(int argc, _TCHAR* argv[])
{
HHOOK m_hook=SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)ProcessKeyBoardMessage,GetModuleHandle(L"KeyBdRedll.dll"),0);
if (m_hook==NULL)
{
int nCode=GetLastError();
}
while (1)
{
cout<<1<<endl;
}
return 0;
}
显示钩子安装成功,但是回调函数总是不调用,帮帮忙额~,操作系统win7,vs2008,已经用管理员权限运行。
------解决方案--------------------
不知道你从哪里看出来钩子安装成功了?全局钩子要求回调函数在一个DLL中,这个DLL不是本进程中的,而你是指向本进程的。
不用链接钩子函数所在的DLL,用LoadLibrary和GetProcessAddress获取dll句柄和函数地址。