- #include <WinAPI.au3>
- #include <WindowsConstants.au3>
- Opt('MustDeclareVars', 1)
- HotKeySet("^{end}",'_exit')
- Global $hHook, $hStub_KeyProc
- Global $hStub_MouProc,$hHook_mouse
- Local $hmod
- $hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
- $hStub_MouProc = DllCallbackRegister("_Mouse_Events_Handler", "int", "int;ptr;ptr")
- $hmod = _WinAPI_GetModuleHandle(0)
- $hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod)
- $hHook_mouse=_WinAPI_SetWindowsHookEx($WH_MOUSE_LL,DllCallbackGetPtr($hStub_MouProc),$hmod)
- While 1
- Sleep(10)
-
- WEnd
- Func _KeyProc($nCode, $wParam, $lParam)
- Local $tKEYHOOKS, $wVKey
- $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
- If $nCode < 0 Then
- Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
- EndIf
- $wVKey = DllStructGetData($tKEYHOOKS, "vkCode")
- If ($wParam = $WM_KEYDOWN) Then
- ToolTip(''&$wVKey&''&" was pressed.")
- Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam) ;不加这一句可以截断按下动作传递
-
- Return 1
- ElseIf ($wParam = $WM_KEYUP) Then
- ToolTip(''&$wVKey&''&" was released.")
- Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam) ;不加这一句可以截断弹起动作传递
- EndIf
-
- EndFunc ;==>_KeyProc
-
- Func _Mouse_Events_Handler($wnCode, $wwParam, $wlParam)
- Switch $wwParam
- Case $WM_LBUTTONUP ;弹起鼠标左键
- ToolTip('L UP.')
-
- Case $WM_LBUTTONDOWN ;按下鼠标左键
- ToolTip('L DOWN.')
-
- Case $WM_RBUTTONUP ;弹起鼠标右键
- ToolTip('R UP.')
-
- Case $WM_RBUTTONDOWN ;按下鼠标右键
- ToolTip('R DOWN.')
- EndSwitch
- ;Return _WinAPI_CallNextHookEx($hHook_mouse, $wnCode, $wwParam, $wlParam) ;与按键相同,不加这一句可以阻断鼠标动作传递,但是实际测试没有效果,都不能阻断
- EndFunc
- Func _exit()
- _WinAPI_UnhookWindowsHookEx($hHook)
- DllCallbackFree($hStub_KeyProc)
- Exit
- EndFunc ;==>_exit
复制代码 用钩子函数,可以实现的 |