如下代码,我想为一个指定名字的窗口加上一个钩子钩子代码如下,能够成功调用到DLL中的钩子函数,但却不起作用,如果设为全局就有效,指定了线程ID就无效...#include <windows.h>HHOOK g_hMouse=NULL;LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if(wParam==WM_LBUTTONDOWN)MessageBox(NULL,"YES","",MB_OK);
return 1;
}void SetHook()
{
HWND gameh=::FindWindow(NULL,"testdig");//其中"testdig"为空白的对话框的标题名
//获取窗口进程ID
DWORD processid; processid=::GetWindowThreadProcessId(gameh,NULL); g_hMouse=SetWindowsHookEx(WH_CALLWNDPROC,MouseProc,GetModuleHandle("Hook"),processid);}
{
if(wParam==WM_LBUTTONDOWN)MessageBox(NULL,"YES","",MB_OK);
return 1;
}void SetHook()
{
HWND gameh=::FindWindow(NULL,"testdig");//其中"testdig"为空白的对话框的标题名
//获取窗口进程ID
DWORD processid; processid=::GetWindowThreadProcessId(gameh,NULL); g_hMouse=SetWindowsHookEx(WH_CALLWNDPROC,MouseProc,GetModuleHandle("Hook"),processid);}
An error may occur if the hMod parameter is NULL and the dwThreadId parameter is zero or specifies the identifier of a thread created by another process. 要同一个进程所创建的线程
恩,是的,我用的是DLL那如果是同一进程的,lParam里面的高低位就不会错么?
还有,为什么每次点击时的坐标点都一样的?
{
LONG x,y;
char sz[100];
MOUSEHOOKSTRUCT *msdt=(MOUSEHOOKSTRUCT FAR *)lParam; x=msdt-> pt.x;
y=msdt-> pt.y;
_ltoa(x,sz,16);
MessageBox(NULL,sz, "data: ",MB_OK);
return CallNextHookEx(hhook, code, wParam, lParam);
}
lParam 存放的是一个MOUSEHOOKSTRUCT 结构体,可以查msdn,这个结构体得到坐标
lParam =MAKELONG(x,y);
取出
x=LOWORD (lParam ) ;
y=HIWORD (lParam ) ;