解决 autohotkey 中的热字符串扩展问题

解决 autohotkey 中的热字符串扩展问题

我在 ahk 中遇到了不一致的热字符串扩展。例如以下热字符串

:o:192.::192.168.

到昨天为止都可以工作,但是今天的启动/重启循环之后就不行了。

热键仍然有效,例如下面这个

OpenClipboardFileWith(app)
{
    ;Run, Notepad.exe
    fname = %Clipboard% ;Open file in Clipboard, if it exists - similar to functionality in DOPUS
    ;MsgBox Before %fname%
    StringSplit, fname, fname, `r`n
    ;MsgBox %fname0%
    if (fname0 > 0) {
        ;convert newline seperated files to space seperated arguments for program
        StringReplace, fname, fname, `r`n, "%A_Space%", All
        fname = "%fname%"
        ;MsgBox parameters are %fname%
    }
    If !FileExist(fname1) {
        ;check for single element first
        fname = 
    }
    Loop %fname0%-1
    {
        element := fname%A_Index%
        ;element = "%element%"
        ;MsgBox %element%
        ;params = %params% %element%
        If !FileExist(element) {
            ;MsgBox Resetting fname as %element% doesn't exist.
            fname = 
        }
    }
    ;MsgBox After %app% %fname%
    Run, %app% %fname%
  return
}
#y::OpenClipboardFileWith(Share "\Programs\@Text\Editors\Notepad2\notepad2.exe") ;;Notepad (open file on clipboard)
#n:: Run, notepad.exe

所以我不知道问题是什么。这种情况时有发生,我也在另一台电脑上遇到过这个问题。我猜这与键盘和鼠标挂钩有关。我检查了脚本列表(右键单击 ahk 图标 > 查看脚本信息),一切正常,挂钩已安装。

我该如何解决这个问题?

我测试了它是否以管理员身份运行。

MsgBox , , , %A_IsAdmin%

并说 1. 我甚至尝试过这些程序http://www.tranglos.com/activehotkeys/http://hkcmdr.anymania.com/index.html但这些都帮不上忙。它显示常规热键已注册,但没有显示热字符串。还有其他工具可以检测并解决这些问题吗?问题是https://stackoverflow.com/questions/1465135/detecting-keyboard-hooks毫无帮助。

还有其他人遇到类似的问题吗?

另一个相关问题可能是,拖放随机停止工作,我必须按住鼠标左键,按ESC几次才能使其工作(但不一致)。

我猜测,在电脑上安装的各种程序中,有一个程序导致了这个问题。

答案1

您对“拖放”的问题是 Windows 7 中鲜为人知的“功能”。在雷德蒙德有时间修补它之前,恢复拖放的方法是按Ctrl+ Alt+ Del,然后在弹出蓝色选择页面时ESC再次按。我知道这听起来很蠢,但每次都有效。

由于某种原因,您的:

:o:192.::192.168.

仍然需要空格,因此我将其更改为:

:*:192.::192.168.

运行完美。

答案2

禁用 UAC 后它终于开始工作了。

答案3

我遇到了一些扩展无法正常工作的问题。但问题出在脚本本身。我加入了别人编写的脚本,但我没有完全意识到它的工作原理。

它有一个指令

#IfWinActive, ahk_class Blah

它没有结尾空白

#IfWinActive

这意味着,该初始指令之后的所有热键和扩展(我的大多数扩展)都仅适用于上下文布拉

为了解决这个问题,我添加了额外的指令

#IfWinActive

在其开始之后。这使得上下文再次适用于任何事物。

问题脚本的一个例子是

;This is for in a Console Window
#IfWinActive, ahk_class ConsoleWindowClass
#a::
; Some short cut here
    return

::ex::Some expand which I expect to happen in all situations (which doesn't)

要修复该脚本,你需要执行以下操作

;This is for in a Console Window
#IfWinActive, ahk_class ConsoleWindowClass
#a::
; Some short cut here
    return
#IfWinActive

::ex::Some expand which I expect to happen in all situations (which  it now does)

有关其工作原理的更多信息,请查看 https://www.autohotkey.com/docs/commands/_IfWinActive.htm

相关内容