读书人

使用HOOK改变鼠标消息,该如何解决

发布时间: 2012-01-12 22:11:58 作者: rapoo

使用HOOK改变鼠标消息
最近因为要让一个特定的软件 改变鼠标发送的消息 比如说WM_RBUTTONDOWN => WM_LBUTTONUP
打算用DLL注入的方式
注入DLL到目标程序后 一直无法截获鼠标消息
不知道是否得枚举出所有线程才行啊(win32苦手每次看到那一串API的参数就头疼,咋简单咋整啊)
Findewindow都是返回NULL,在EXE中正常。改用getcurrentthreadid 也无法截获 伪代码贴下 大家帮帮看怎么回事

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
hDll = (HINSTANCE)hModule;
DWORD dw = GetCurrentThreadId();
g_hHook = SetWindowsHookEx(WH_MOUSE,MyKeyboardHook, hDll, dw);
}
LRESULT CALLBACK MyKeyboardHook( int nCode,WPARAM wParam,LPARAM lParam )
{

::MessageBoxA(NULL,"catch",NULL,NULL);
return true;

}


[解决办法]
不用MFC,那个把本来简单的事情弄复杂

这个是用鼠标钩子切换左右键的

C/C++ code
LRESULT CALLBACK MouseHookProc(  __in  int code,  __in  WPARAM wParam,  __in  MSLLHOOKSTRUCT*lParam){    static INPUT Input={INPUT_MOUSE};    if(code<0||lParam->flags&LLMHF_INJECTED)return CallNextHookEx(0,code,wParam,(LPARAM)lParam);    switch(wParam)    {    case WM_LBUTTONDOWN:        Input.mi.dx=lParam->pt.x;        Input.mi.dy=lParam->pt.y;        Input.mi.mouseData=lParam->mouseData;        Input.mi.dwFlags=MOUSEEVENTF_RIGHTDOWN;        Input.mi.time=lParam->time;        Input.mi.dwExtraInfo=lParam->dwExtraInfo;        SendInput(1,&Input,sizeof(INPUT));        return 1;    case WM_LBUTTONUP:        Input.mi.dx=lParam->pt.x;        Input.mi.dy=lParam->pt.y;        Input.mi.mouseData=lParam->mouseData;        Input.mi.dwFlags=MOUSEEVENTF_RIGHTUP;        Input.mi.time=lParam->time;        Input.mi.dwExtraInfo=lParam->dwExtraInfo;        SendInput(1,&Input,sizeof(INPUT));        return 1;    case WM_RBUTTONDOWN:        Input.mi.dx=lParam->pt.x;        Input.mi.dy=lParam->pt.y;        Input.mi.mouseData=lParam->mouseData;        Input.mi.dwFlags=MOUSEEVENTF_LEFTDOWN;        Input.mi.time=lParam->time;        Input.mi.dwExtraInfo=lParam->dwExtraInfo;        SendInput(1,&Input,sizeof(INPUT));        return 1;    case WM_RBUTTONUP:        Input.mi.dx=lParam->pt.x;        Input.mi.dy=lParam->pt.y;        Input.mi.mouseData=lParam->mouseData;        Input.mi.dwFlags=MOUSEEVENTF_LEFTUP;        Input.mi.time=lParam->time;        Input.mi.dwExtraInfo=lParam->dwExtraInfo;        SendInput(1,&Input,sizeof(INPUT));        return 1;    }    return CallNextHookEx(0,code,wParam,(LPARAM)lParam);}int main(){    HHOOK hHook;MSG msg;    hHook=SetWindowsHookExW(WH_MOUSE_LL,(HOOKPROC)MouseHookProc,GetModuleHandleW(0),0);    while(GetMessageW(&msg,0,0,0)!=-1);} 

读书人网 >VC/MFC

热点推荐