我在 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