极菜的问题:关于鼠标hook
最近学汇编,书上一例题:利用dll来hook全局鼠标,但我的程序只能hook到鼠标在本程序窗口内移动时的情况,对鼠标在其它程序窗口中的移动根本就没反应,成了局部hook,请大侠指点问题出在哪里?
HOOK DLL 源文件MasmMouseHookDll.asm如下:
;--------------------------------------------------
.386
.model flat, stdcall
option casemap:none
include d:\masm32\include\windows.inc
include d:\masm32\include\kernel32.inc
include d:\masm32\include\user32.inc
includelib d:\masm32\lib\kernel32.lib
includelib d:\masm32\lib\user32.lib
.const
myWM_MOUSEHOOK equ WM_USER + 1006
.data
hInstance dd 0
.data?
hHook dd ?
hWnd dd ?
.code
DllEntry proc hInst:HINSTANCE, reason:DWORD, reserved1:DWORD
push hInst
pop hInstance
mov eax, TRUE
ret
DllEntry endp
MouseProc proc nCode:DWORD, wParam:DWORD, lParam:DWORD
invoke CallNextHookEx, hHook, nCode, wParam, lParam
push eax
mov edx, lParam
assume edx: PTR MOUSEHOOKSTRUCT
.IF nCode==HC_ACTION
invoke PostMessage, hWnd, myWM_MOUSEHOOK, [edx].pt.x, [edx].pt.y
.ENDIF
assume edx: nothing
pop eax
ret
MouseProc endp
InstallHook proc hwnd:DWORD
push hwnd
pop hWnd
invoke SetWindowsHookEx, WH_MOUSE, addr MouseProc, hInstance, NULL
mov hHook, eax
ret
InstallHook endp
UninstallHook proc
invoke UnhookWindowsHookEx, hHook
ret
UninstallHook endp
End DllEntry
;--------------------------------------------------
相应的makefile如下:
NAME=MasmMouseHookDll
$(NAME).dll: $(NAME).obj
Link /subsystem:windows /Dll /section:.bss,S /DEF:$(NAME).def /LIBPATH:d:\masm32\lib $(NAME).obj
$(NAME).obj: $(NAME).asm
ml /c /coff /Cp $(NAME).asm
主窗口程序用VC++6编写,主要有一个“Hook”按钮用来执行DLL中的InstallHook,一个“Unhook”按钮来执行DLL中的UninstallHook,窗口处理消息WM_USER + 1006,在一个编辑框中显示鼠标的位置。但只有当鼠标在本窗口中移动时有效,在其它窗口移动时无效。
请大侠指教一下,问题出在哪里?先谢谢了。