📄 lion-tutorial24.htm
字号:
<b>option casemap:none</b> <br>
<b>include \masm32\include\windows.inc</b> <br>
<b>include \masm32\include\user32.inc</b> <br>
<b>include \masm32\include\kernel32.inc</b> <br>
<b>include mousehook.inc</b> <br>
<b>includelib mousehook.lib</b> <br>
<b>includelib \masm32\lib\user32.lib</b> <br>
<b>includelib \masm32\lib\kernel32.lib</b>
<p><b>wsprintfA proto C :DWORD,:DWORD,:VARARG</b> <br>
<b>wsprintf TEXTEQU <wsprintfA></b>
<p><b>.const</b> <br>
<b>IDD_MAINDLG
equ 101</b> <br>
<b>IDC_CLASSNAME
equ 1000</b> <br>
<b>IDC_HANDLE
equ 1001</b> <br>
<b>IDC_WNDPROC
equ 1002</b> <br>
<b>IDC_HOOK
equ 1004</b> <br>
<b>IDC_EXIT
equ 1005</b> <br>
<b>WM_MOUSEHOOK
equ WM_USER+6</b>
<p><b>DlgFunc PROTO :DWORD,:DWORD,:DWORD,:DWORD</b>
<p><b>.data</b> <br>
<b>HookFlag dd FALSE</b> <br>
<b>HookText db "&Hook",0</b> <br>
<b>UnhookText db "&Unhook",0</b> <br>
<b>template db "%lx",0</b>
<p><b>.data?</b> <br>
<b>hInstance dd ?</b> <br>
<b>hHook dd ?</b> <br>
<b>.code</b> <br>
<b>start:</b> <br>
<b> invoke GetModuleHandle,NULL</b> <br>
<b> mov hInstance,eax</b> <br>
<b> invoke DialogBoxParam,hInstance,IDD_MAINDLG,NULL,addr
DlgFunc,NULL</b> <br>
<b> invoke ExitProcess,NULL</b>
<p><b>DlgFunc proc hDlg:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD</b> <br>
<b> LOCAL hLib:DWORD</b> <br>
<b> LOCAL buffer[128]:byte</b> <br>
<b> LOCAL buffer1[128]:byte</b> <br>
<b> LOCAL rect:RECT</b> <br>
<b> .if uMsg==WM_CLOSE</b> <br>
<b> .if HookFlag==TRUE</b> <br>
<b> invoke
UninstallHook</b> <br>
<b> .endif</b> <br>
<b> invoke EndDialog,hDlg,NULL</b>
<br>
<b> .elseif uMsg==WM_INITDIALOG</b> <br>
<b> invoke GetWindowRect,hDlg,addr
rect</b> <br>
<b> invoke SetWindowPos, hDlg, HWND_TOPMOST,
rect.left, rect.top, rect.right, rect.bottom, SWP_SHOWWINDOW</b> <br>
<b> .elseif uMsg==WM_MOUSEHOOK</b> <br>
<b> invoke GetDlgItemText,hDlg,IDC_HANDLE,addr
buffer1,128</b> <br>
<b> invoke wsprintf,addr buffer,addr
template,wParam</b> <br>
<b> invoke lstrcmpi,addr buffer,addr
buffer1</b> <br>
<b> .if eax!=0</b> <br>
<b> invoke
SetDlgItemText,hDlg,IDC_HANDLE,addr buffer</b> <br>
<b> .endif</b> <br>
<b> invoke GetDlgItemText,hDlg,IDC_CLASSNAME,addr
buffer1,128</b> <br>
<b> invoke GetClassName,wParam,addr
buffer,128</b> <br>
<b> invoke lstrcmpi,addr buffer,addr
buffer1</b> <br>
<b> .if eax!=0</b> <br>
<b> invoke
SetDlgItemText,hDlg,IDC_CLASSNAME,addr buffer</b> <br>
<b> .endif</b> <br>
<b> invoke GetDlgItemText,hDlg,IDC_WNDPROC,addr
buffer1,128</b> <br>
<b> invoke GetClassLong,wParam,GCL_WNDPROC</b>
<br>
<b> invoke wsprintf,addr buffer,addr
template,eax</b> <br>
<b> invoke lstrcmpi,addr buffer,addr
buffer1</b> <br>
<b> .if eax!=0</b> <br>
<b> invoke
SetDlgItemText,hDlg,IDC_WNDPROC,addr buffer</b> <br>
<b> .endif</b> <br>
<b> .elseif uMsg==WM_COMMAND</b> <br>
<b> .if lParam!=0</b> <br>
<b> mov eax,wParam</b>
<br>
<b> mov edx,eax</b>
<br>
<b> shr edx,16</b>
<br>
<b> .if dx==BN_CLICKED</b>
<br>
<b>
.if ax==IDC_EXIT</b> <br>
<b>
invoke SendMessage,hDlg,WM_CLOSE,0,0</b> <br>
<b>
.else</b> <br>
<b>
.if HookFlag==FALSE</b> <br>
<b>
invoke InstallHook,hDlg</b> <br>
<b>
.if eax!=NULL</b> <br>
<b>
mov HookFlag,TRUE</b> <br>
<b>
invoke SetDlgItemText,hDlg,IDC_HOOK,addr UnhookText</b> <br>
<b>
.endif</b> <br>
<b>
.else</b> <br>
<b>
invoke UninstallHook</b> <br>
<b>
invoke SetDlgItemText,hDlg,IDC_HOOK,addr HookText</b> <br>
<b>
mov HookFlag,FALSE</b> <br>
<b>
invoke SetDlgItemText,hDlg,IDC_CLASSNAME,NULL</b> <br>
<b>
invoke SetDlgItemText,hDlg,IDC_HANDLE,NULL</b> <br>
<b>
invoke SetDlgItemText,hDlg,IDC_WNDPROC,NULL</b> <br>
<b>
.endif</b> <br>
<b>
.endif</b> <br>
<b> .endif</b>
<br>
<b> .endif</b> <br>
<b> .else</b> <br>
<b> mov eax,FALSE</b> <br>
<b> ret</b> <br>
<b> .endif</b> <br>
<b> mov eax,TRUE</b> <br>
<b> ret</b> <br>
<b>DlgFunc endp</b>
<p><b>end start</b>
<p>;----------------------------------------------------- This is the source code
of the DLL -------------------------------------- <br>
<b>.386</b> <br>
<b>.model flat,stdcall</b> <br>
<b>option casemap:none</b> <br>
<b>include \masm32\include\windows.inc</b> <br>
<b>include \masm32\include\kernel32.inc</b> <br>
<b>includelib \masm32\lib\kernel32.lib</b> <br>
<b>include \masm32\include\user32.inc</b> <br>
<b>includelib \masm32\lib\user32.lib</b>
<p><b>.const</b> <br>
<b>WM_MOUSEHOOK equ WM_USER+6</b>
<p><b>.data</b> <br>
<b>hInstance dd 0</b>
<p><b>.data?</b> <br>
<b>hHook dd ?</b> <br>
<b>hWnd dd ?</b>
<p><b>.code</b> <br>
<b>DllEntry proc hInst:HINSTANCE, reason:DWORD, reserved1:DWORD</b> <br>
<b> .if reason==DLL_PROCESS_ATTACH</b> <br>
<b> push hInst</b> <br>
<b> pop hInstance</b> <br>
<b> .endif</b> <br>
<b> mov eax,TRUE</b> <br>
<b> ret</b> <br>
<b>DllEntry Endp</b>
<p><b>MouseProc proc nCode:DWORD,wParam:DWORD,lParam:DWORD</b> <br>
<b> invoke CallNextHookEx,hHook,nCode,wParam,lParam</b> <br>
<b> mov edx,lParam</b> <br>
<b> assume edx:PTR MOUSEHOOKSTRUCT</b> <br>
<b> invoke WindowFromPoint,[edx].pt.x,[edx].pt.y</b> <br>
<b> invoke PostMessage,hWnd,WM_MOUSEHOOK,eax,0</b> <br>
<b> assume edx:nothing</b> <br>
<b> xor eax,eax</b> <br>
<b> ret</b> <br>
<b>MouseProc endp</b>
<p><b>InstallHook proc hwnd:DWORD</b> <br>
<b> push hwnd</b> <br>
<b> pop hWnd</b> <br>
<b> invoke SetWindowsHookEx,WH_MOUSE,addr MouseProc,hInstance,NULL</b>
<br>
<b> mov hHook,eax</b> <br>
<b> ret</b> <br>
<b>InstallHook endp</b>
<p><b>UninstallHook proc</b> <br>
<b> invoke UnhookWindowsHookEx,hHook</b> <br>
<b> ret</b> <br>
<b>UninstallHook endp</b>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -