Autohotkey,为什么即使没有$前缀,此Windows Explorer Backspace热键也不会触发自身


1

在这篇howtogeek帖子中,有一个类似的代码片段,在Windows资源管理器中使用Backspace上一个文件夹级别:

#IfWinActive, ahk_class CabinetWClass

; Please run on Windows 7+ 
Backspace::
    ControlGet renamestatus,Visible,,Edit1,A
    ControlGetFocus focussed, A
    if(renamestatus!=1 && (focussed=="DirectUIHWND3"||focussed==SysTreeView321))
    {
        MsgBox, Don't check this ; debug
        SendInput !{Up}
    }else{
        tooltip, Back-delete a char
        Send {Backspace} ; Why does it not trigger another Backspace hotkey?
    }
return
#IfWinActive

但是我很困惑他为什么能写

Backspace::

代替

$Backspace::

根据doc的说法,当您在Windows 7资源管理器中重命名文件时,no- $情况将导致按Backspace无限触发更多Backspace,但实际上不会发生。有人可以帮忙解释一下吗?

在Windows 7上尝试使用Autohotkey 1.1.13.01。

Answers:


1

来自#UseHook帮助主题:

热键将使用默认方法(如果可能,请使用RegisterHotkey();否则为键盘挂钩)实现。

通常,只要有可能,就会使用Windows API函数RegisterHotkey()来实现键盘热键。但是,如果改用键盘挂钩,则在某些情况下热键的响应性可能会更好。

将此指令设置为ON等效于在每个受影响的热键的定义中使用$前缀。

因此,热键具有两种注册方法之一,并且可以将多种方式设置为这两种注册方法之一。您可以通过以下方式来查看正在使用哪种方法注册热键:将该脚本作为#persistent另一个持久脚本运行或作为其一部分运行,然后从任务栏图标打开脚本窗口,然后选择View > Hotkeys and their methods (Ctrl+H)。热键将在其中列出,k-hook或带有reg- #UseHook帮助主题中上述两个选项。

结果如下k-hook

#UseHook
Backspace::

这也会导致键盘钩:

$Backspace::

这也会导致键盘钩:

#IfWinActive, ahk_class CabinetWClass
Backspace::

这将导致常规注册,并reg显示在热键列表下:

Backspace::

或更笼统地说:

#IfWinActive
Backspace::

重要的区别是最终结果,以及是否将其注册为键盘挂钩。如果您想尝试无限重复的Backspace,请删除或替换#IfWinActive, ahk_class CabinetWClass并在Explorer窗口中点击Backspace。事情应该变得疯狂了片刻,然后您应该收到一条消息,提示已收到太多热键,您确定要继续。玩得开心。

您可能感兴趣的另一个工具是将“向上”按钮图标添加回Windows 7文件夹... 此免费实用程序做得很好,下载后只要选择安装程序中可用的4个选项之一即可。并运行它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.