这段代码的核心功能是拦截鼠标左键点击操作,并根据特定窗口和条件对鼠标行为进行自定义处理,例如拦截 Notepad(记事本) 的关闭按钮点击操作。

 

#SingleInstance Force
SetBatchLines -1
SetWinDelay 20   ; 每次WinActive命令后, 设置 20 毫秒的延迟
CoordMode Mouse

LButton::
Click Down
KeyWait LButton
Click Up
Return

; 方法一:判断标准窗口按钮来确定拦截目标【未激活也能生效】
#ifWinActive ahk_class Notepad
LButton Up::
MouseGetPos, 拦截x, 拦截y, 拦截id
SendMessage, WM_NCHITTEST := 0x84,, (拦截x & 0xFFFF) | (拦截y & 0xFFFF) << 16,, ahk_id %拦截id%
; https://docs.microsoft.com/en-us/windows/win32/inputdev/wm-nchittest
if (ErrorLevel = 20) {
    WinActivate, ahk_class Shell_TrayWnd
    WinActivate, ahk_class Notepad
}
Click Up
ToolTip % "右上角按钮返回值:" ErrorLevel "`n用SendMessage取返回值有时会不对,可以自行再加其它辅助if条件" 
Return

#If


/*      方法二:通过计算相对坐标,判断按钮位置来确定拦截目标
#ifWinActive ahk_class Notepad
LButton Up::
MouseGetPos, 拦截x, 拦截y, 拦截id
WinGetPos, 窗口x, 窗口y, 窗口w, 窗口h, ahk_id %拦截id%
if (拦截x>窗口x+窗口w-54*(A_ScreenDPI//96)) && (拦截x<窗口x+窗口w-0*(A_ScreenDPI//96)) && (拦截y>窗口y+0*(A_ScreenDPI//96)) && (拦截y<窗口y+34*(A_ScreenDPI//96)) { ; 从右上角计算关闭图标相对位置
    WinActivate, ahk_class Shell_TrayWnd
    WinActivate, ahk_class Notepad
}
Click Up
Return

#If
*/


/*     拦截记事本的关闭按钮第一版.ahk【在拦截后,会出现右键无法使用的Bug】
#IfWinExist ahk_class Notepad

LButton::
MouseGetPos, 拦截x, 拦截y, 拦截id ; 也可以拦截标准控件或者窗口坐标区域
WinGetClass, 拦截类名, ahk_id %拦截id%
if (拦截类名="Notepad") {
    SendMessage, 0x84,, (拦截x & 0xFFFF) | (拦截y & 0xFFFF) << 16,, ahk_id %拦截id%
    if ErrorLevel = 20
       Click Up
   else
     Click down
 } else
  Click down
ToolTip % "右上角按钮返回值:" ErrorLevel "`n用SendMessage取返回值有时会不对,可以自行再加其它辅助if条件" 
return

LButton Up::Click Up

#IfWinExist
*/


/*     拦截记事本的关闭按钮 - 自改版.ahk
SetBatchLines -1
CoordMode, Mouse

#IfWinActive ahk_class Notepad
LButton::
SendInput {LButton Down}
IfWinNotActive ahk_class Notepad
{
   KeyWait LButton
   SendInput {LButton Up}
}
return

LButton Up::
MouseGetPos, x, y
Critical
SendMessage, 0x84,, (x & 0xFFFF) | (y & 0xFFFF) << 16  ; WM_NCHITTEST
if ErrorLevel = 20 ; close button
{
  Gui, LanJie:+ToolWindow
  Gui, LanJie: Show, x-86 y-66 w1 h1,  
  Gui, LanJie: Destroy
}
SendInput {LButton Up}
Critical Off
return
#IfWinActive
*/

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。