用鼠标钩子如何判断鼠标是否按下左键(20分)

  • 主题发起人 主题发起人 sy0116
  • 开始时间 开始时间
S

sy0116

Unregistered / Unconfirmed
GUEST, unregistred user!
function mouse(icode,wparam,lparam:Integer):Integer;stdcall;<br>begin<br> &nbsp;Result:=CallNextHookEx(mousehook,icode,wparam,lparam);<br> &nbsp;if wparam=WM_lbuttondown then<br> &nbsp;……<br> &nbsp;我在网上抄的这段代码,发现不行,点击后后面的代码总是出现一些莫名其妙的问题,有的代码会重复执行很多次<br>我的目的是:已经知道了某个程序的PID,然后挂上一个鼠标钩子,在这个程序中一按下鼠标左键就执行我要执行的代码(比如记录按下左键的次数)
 
肯定要重复执行!钩子是用消息处理的啥!
 
问题是只按下一次左键就会重复执行n次,而且n不确定,有时是3,有时又几十
 
有时候 消息循环 没有定义好 <br>比如你自己定义了一些消息处理 <br>系统默认的还有一些消息处理
 
那么请教各位,如何才能实现这个功能:<br>在某一窗口上按下某个按钮就取得这个按钮的Handle,然后用Sendmessage发送WM_GETTEXT消息来取得上面的文字,如果是“退出”就组织弹出一个警告对话框。不用鼠标钩子用其他的也行,最好是用钩子,我正在学<br>============================<br>==========<br>我自己写的一个,问题很多,总是出现莫名其妙的错误:<br>function mouse(icode,wparam,lparam:Integer):Integer;stdcall;<br>var<br> &nbsp;mstruct:^TMouseHookStruct;<br> &nbsp;Title:array [0..255] of char;<br>begin<br> &nbsp;Result:=CallNextHookEx(mousehook,icode,wparam,lparam);<br> &nbsp;if wparam=BM_Click then<br> &nbsp;mstruct:=Pointer(lparam);<br> &nbsp;getwindowtext(mstruct.hwnd,@Title,255);//每次到这一句系统就会出现奇怪的错误,有时是Explore。exe错误,有时是别的,但把mstruct.hwnd换成某个存在的handle就不会出错<br> &nbsp;if title='退出' then ……<br>end;
 
接受答案了.
 
后退
顶部