找回密码
 加入
搜索
查看: 3816|回复: 3

[AU3基础] 如何屏蔽鼠标右键,这个代码运行效果不好。不稳定

[复制链接]
发表于 2011-11-9 20:33:42 | 显示全部楼层 |阅读模式
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <StructureConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)
Global $i = 0
Global $hHook, $hStub_KeyProc, $buf = "", $title = "", $title_1 = "", $keycode, $buffer = "", $nMsg
Global $hStub_MouProc,$hHook_mouse,$_whook

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_KeyProc), $hmod)
$_whook=_WinAPI_SetWindowsHookEx($WH_MOUSE_LL,DllCallbackGetPtr($hStub_MouProc),$hmod)
While 1
        Sleep(1)
                If $i> 5 Then ConsoleWrite($i&@CR)
WEnd

Func _Mouse_Events_Handler($wnCode, $wwParam, $wlParam)
                Switch $wwParam
                                Case $WM_LBUTTONUP     ;按下鼠标左键
                                        ;MsgBox(1,1,"按下鼠标左键")
                                        ;Return 1
                                         Return _WinAPI_CallNextHookEx($_whook, $wnCode, $wwParam, $wlParam)
                                Case $WM_RBUTTONUP    ;按下鼠标左键 WM_MBUTTONDBLCLK WM_MBUTTONDOWN
                                        ;MsgBox(1,1,"按下鼠标右键")
                                        Return 1
                                        ;_WinAPI_CallNextHookEx($_whook, $wnCode, $wwParam, $wlParam)                                       
                                       
        EndSwitch
        Return _WinAPI_CallNextHookEx($_whook, $wnCode, $wwParam, $wlParam) ;消息传递到下一个钩子
                               
EndFunc

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 ($wVKey = 91) Then
                If ($wParam = $WM_KEYDOWN) Then
                        ToolTip("{win} was pressed.")
                                                ;Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
                                                $i= $i+1;
                        Return 1
                ElseIf ($wParam = $WM_KEYUP) Then
                        ToolTip("{win} was released.")
                                                $i = 0;
                EndIf
        EndIf
        Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndFunc        ;==>_KeyProc

Func _exit()
        _WinAPI_UnhookWindowsHookEx($hHook)
        DllCallbackFree($hStub_KeyProc)
        Exit
EndFunc   ;==>_exit
发表于 2011-11-9 20:50:43 | 显示全部楼层
屏蔽鼠标右键,应该截取WM_RBUTTONDOWN (右键按下),为了保险起见,WM_RBUTTONDOWN、WM_RBUTTONUP 这两个消息最好都屏蔽掉。如果要屏蔽鼠标按键消息,注意截取到相应的消息之后,钩子函数必须在1/10秒内返回一个非0值。WH_MOUSE_LL钩子不支持WM_RBUTTONDBLCLK 右键双击,你可以自己定义一个计时器,判断两次右键点击之间的时差。
 楼主| 发表于 2011-11-9 22:14:57 | 显示全部楼层
回复 2# pusofalse


    WM_RBUTTONDOWN、WM_RBUTTONUP  两个同时上好像能屏蔽了,
WH_MOUSE_LL钩子不支持WM_RBUTTONDBLCLK 右键双击
那支持WM_LBUTTONDBLCLK双击吗?还是都要自己定义计时器来计算
发表于 2011-11-19 01:57:27 | 显示全部楼层
哇,学习了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 16:32 , Processed in 0.072849 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表