黑客手册第七课处理鼠标输入消息

黑客手册第七课处理鼠标输入消息本课中我们将学习如何在我们的窗口过程函数中处理鼠标按键消息。示例程序演示了如何等待左键按下消息,我们将在按下的位置显示个字符串。例子理论:和处理键盘输入样,WINDOWS将捕捉鼠标动作并把它们发送到相关窗口。这些活动包括左、右键按下、移动、双击等(译者注:新式鼠标还包括滚轮消息阳阳EEL)0WINDOWS并不像处理键盘输入那样把所有的鼠标消息都导向有输入焦点的窗口,任何鼠标经过的窗口都将接收到鼠标消息,无论有否输入焦点。另外,窗口还会接收到鼠标在非客户区移动的消息(WMNCMOVE),但大多数的情况下我们都会将其忽略掉。对鼠标的每个按钮都有两个消息:阳LBUTTONDOl啊,阳RBUTTONDOl啊。对于三键鼠标还会有阳阳UTTONDOWN和阳阳UTTONUP消息,当鼠标在某窗口客户区移动时,该窗口将接收到阳MOUSEMOVE消息。个窗口若想处理阳LBUTTONDBCLK或阳RBUTTONDBCLK,那么它的窗口类必须有CSDBLCLKS风格,否则它就会接受到堆的按键起落(阳XBUTTONDOWN或阳XBUTTONUP)的消息。对于所有的消息,窗口过程函数传入的参数lParam包含了鼠标的位置,其中底位为x坐标,高位为y坐标,这些坐标值都是相对于窗口客户区的左上角的值,wParam中则包含了鼠标按钮的状态。例子:.386•r【lodelflat,stdcalloptioncasemap:noneWinMainproto:DWORD,:DWORD,:DWORD,:DWORDinclude\masm32\include\windows.incinclude\masm32\include\user32.incinclude\masm32\include\kerne132.incinclude\masm32\include\gdi32.incincludelib\masm32\lib\user32.libincludelib\masm32\lib\kerne132.1ibincludelib\masm32\lib\gdi32.1ib.dataClassNamedb"SimpleWinClass",OAppNamedb"OurFirstWindow",OMouseClickdb0;0二noclickyet.data?hlnstanceHINSTANCE?CommandLineLPSTR?hitpointPOINT<>.codestart:invokeGetModuleHandle,NULLmovhlnstance,eaxinvokeGetCommandLinemovCommandLine,eaxinvokeWinMain,hlnstance,NULL,CommandLine,SWSHOWDEFAULTinvokeExitProcess,eaxWinMainprochlnst:HINSTANCE,hPrevlnst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORDLOCALwc:WNDCLASSEXLOCALmsg:MSGLOCALhwnd:HWNDmovwc.cbSize,SIZEOFWNDCLASSEXmovwc.style,CSHREDRAWorCSVREDRAWmovwc.lpfnWndProc,OFFSETWndProcmovwc.cbClsExtra,NULLmovwc.cbWndExtra,NULLpushhlnstpopwc.hlnstancemovwc.hbrBackgrounCOLORWINDOW+lmovwc.lpszMenuName,NULLmovwc.lpszClassName,OFFSETClassNameinvokeLoadlcon,NULL,IDIAPPLICATIONmovwc.hlcon,eaxmovwc.hlconSm,eaxinvokeLoadCursor,NULL,IDCARROWmovwc.hCursor,eaxinvokeRegisterClassEx,addrwcinvokeCreateWindowEx,NULL,ADDRClassName,ADDRAppName,\WSOVERLAPPEDWINDOW,CWUSEDEFAULT,\CWUSEDEFAULT,CWUSEDEFAULT,CWUSEDEFAULT,NULL,NULL,\hlnst,NULLmovhwnd,eaxinvokeShowWindow,hwnd,SWSHOWNORMALinvokeUpdateWindow,hwnd.WHILETRUE.ENDWinvokeGetMessage,ADDRm吨,NULL,0,0.BREAK.IF(!eax)invokeDispatchMessage,ADDRmsgmoveax,msg.wParamretWin蜘inendpWndProcprochWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAMLOCALhdc:HI充LOCALps:PAINTSTRUCT.IFuMsg二二WMDESTROYinvokePostQuitMessage,NULL.ELSEIFuMsg二二WMLBUTTONDOWNmoveax,lParamandeax,OFFFFhmovhitpoint.x,eaxmoveax,lParamshreax,16movhitpoint.y,eaxmovMouseC1ick,TRUEinvokeInva1idateRect,hWnd,NULL,TRUE.ELSEIFuMsg二二WMPAINTinvokeBeginPaint,hWnd,ADDRpsmovhdc,eax.IFMouseClickinvokelstr1en,ADDRAppNameinvokeTextOut,hdc,hitpoint.x,hitpoint.y,ADDRAppName,eax.四DIFinvokeEndPaint,hWnd,ADDRps.ELSEinvokeDefWindowProc,hWnd,uMsg,wPara1Paramret.ENDIFxoreax,eaxretWndProcendpendstart分析:.ELSEIFuMsg二二WMLBUTTONDOWNmoveax,lParamandeax,OFFFFhmovhitpoint.x,eaxmoveax,lParamshreax,16movhitpoint.y,eaxmovMouseC1ick,TRUEinvokeInva1idateRect,hWnd,NULL,TRUE窗口过程处理了阳LB...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

确认删除?