欢迎来到天天文库
浏览记录
ID:13493660
大小:33.83 KB
页数:4页
时间:2018-07-22
《黑客手册第七课 处理鼠标输入消息》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、黑客手册第七课处理鼠标输入消息本课中我们将学习如何在我们的窗口过程函数中处理鼠标按键消息。示例程序演示了如何等待左键按下消息,我们将在按下的位置显示个字符串。例子理论:和处理键盘输入样,WINDOWS将捕捉鼠标动作并把它们发送到相关窗口。这些活动包括左、右键按下、移动、双击等(译者注:新式鼠标还包括滚轮消息阳阳EEL)0WINDOWS并不像处理键盘输入那样把所有的鼠标消息都导向有输入焦点的窗口,任何鼠标经过的窗口都将接收到鼠标消息,无论有否输入焦点。另外,窗口还会接收到鼠标在非客户区移动的消息(WMNCMOVE),但大多
2、数的情况下我们都会将其忽略掉。对鼠标的每个按钮都有两个消息:阳LBUTTONDOl啊,阳RBUTTONDOl啊。对于三键鼠标还会有阳阳UTTONDOWN和阳阳UTTONUP消息,当鼠标在某窗口客户区移动时,该窗口将接收到阳MOUSEMOVE消息。个窗口若想处理阳LBUTTONDBCLK或阳RBUTTONDBCLK,那么它的窗口类必须有CSDBLCLKS风格,否则它就会接受到堆的按键起落(阳XBUTTONDOWN或阳XBUTTONUP)的消息。对于所有的消息,窗口过程函数传入的参数lParam包含了鼠标的位置,其中底位为x
3、坐标,高位为y坐标,这些坐标值都是相对于窗口客户区的左上角的值,wParam中则包含了鼠标按钮的状态。例子:.386•r【lodelflat,stdcalloptioncasemap:noneWinMainproto:DWORD,:DWORD,:DWORD,:DWORDincludemasm32includewindows.incincludemasm32includeuser32.incincludemasm32includekerne132.incincludemasm32includegdi
4、32.incincludelibmasm32libuser32.libincludelibmasm32libkerne132.1ibincludelibmasm32libgdi32.1ib.dataClassNamedb"SimpleWinClass",OAppNamedb"OurFirstWindow",OMouseClickdb0;0二noclickyet.data?hlnstanceHINSTANCE?CommandLineLPSTR?hitpointPOINT<>.codestart:invok
5、eGetModuleHandle,NULLmovhlnstance,eaxinvokeGetCommandLinemovCommandLine,eaxinvokeWinMain,hlnstance,NULL,CommandLine,SWSHOWDEFAULTinvokeExitProcess,eaxWinMainprochlnst:HINSTANCE,hPrevlnst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORDLOCALwc:WNDCLASSEXLOCALmsg:MSGLOCALhwnd
6、:HWNDmovwc.cbSize,SIZEOFWNDCLASSEXmovwc.style,CSHREDRAWorCSVREDRAWmovwc.lpfnWndProc,OFFSETWndProcmovwc.cbClsExtra,NULLmovwc.cbWndExtra,NULLpushhlnstpopwc.hlnstancemovwc.hbrBackgrounCOLORWINDOW+lmovwc.lpszMenuName,NULLmovwc.lpszClassName,OFFSETClassNameinvokeLoadl
7、con,NULL,IDIAPPLICATIONmovwc.hlcon,eaxmovwc.hlconSm,eaxinvokeLoadCursor,NULL,IDCARROWmovwc.hCursor,eaxinvokeRegisterClassEx,addrwcinvokeCreateWindowEx,NULL,ADDRClassName,ADDRAppName,WSOVERLAPPEDWINDOW,CWUSEDEFAULT,CWUSEDEFAULT,CWUSEDEFAULT,CWUSEDEFAULT,NULL,NUL
8、L,hlnst,NULLmovhwnd,eaxinvokeShowWindow,hwnd,SWSHOWNORMALinvokeUpdateWindow,hwnd.WHILETRUE.ENDWinvokeGetMessage,ADDRm吨,NULL,0,0.BREAK.IF(!eax)invokeDispatchM
此文档下载收益归作者所有