用于保存对话框的 AHK:导航到桌面并跳转到字段文件名
AHK for Save Dialog: Navigate to desktop and jump to field filename
我使用这个 Autohotkey 脚本有一段时间了:
; Windows Explorer Save Dialog
; hitting CTRL D goes to address bar, jumps to full desktop path, then goes to filename for the user to override
#IfWinActive ahk_class #32770
^D::
Send !D
String := "%UserProfile%\Desktop"
SendRaw %String%
Send {ENTER}
Send !D
return
#IfWinActive
它停止工作了。可能 Windows 10 更新更改了文件保存对话框中的某些内容。
现在使用上面的脚本(按 CTRL+D)仍会打开桌面位置,但会转到右上角 "Desktop Search"(而不是文件名)。
同时将最后一个 Send !D
更改为 Send !N
也没有帮助。
也Send {TAB}
无济于事,Windows无视。焦点似乎停留在“搜索”字段上。
经过评论中的讨论,我实际上能够重现您遇到的问题并找到了问题所在。
如果焦点控件从未离开任何文本输入控件,保存文件对话框中用于将焦点切换到文件名字段的 Alt+N
热键似乎确实不起作用。通过将焦点控件至少一次设置为文本输入控件以外的其他控件,Alt+N
热键似乎可以按预期工作。
好的,这是工作代码。
^d::
ControlFocus, DirectUIHWND2, A
SendInput, % "!d%userprofile%\Desktop{enter}!n"
return
所以首先我们关注 DirectUIHWND2
控件,也可以在保存文件对话框中使用其他控件,不管我们使用哪个。
如果您不知道如何弄清楚 windows' 控件,一种简单的方法是使用“Window Spy”。这是每个 AHK 安装附带的一个简洁的小 AHK 脚本。
您可以从 AHK 安装目录中找到它。
应该叫C:\Program Files\AutoHotkey\WindowSpy.ahk
。或者如果你有一个旧的 AHK 安装,它也可能是一个名为 AU3_Spy.exe
的编译脚本文件(或者类似的东西,我忘记了)
而A
parameter in the ControlFocus
命令表示激活window.
然后我只使用了一个发送命令。无需像在代码中那样使用多个发送命令或创建一些变量。
并且还使用了 !d
和 !n
而不是 !D
和 !N
.
不要在发送命令中使用大写字母,除非你确实需要它们。
!D
和 !N
实际上发送的是 Ctrl+Shift+D
和 Ctrl+Shift+N
,而不是 Alt+D
和 Alt+N
,这就是我假设你真正想要的。
此外,使用 SendInput
而不是 Send
。 SendInput
是首选方法,因为它更快、更可靠(更多信息来自文档)
不过,我担心的一个问题是它甚至可能太快了。似乎每次对我来说都很好,但如果你遇到麻烦,你可以将它分成多个命令,添加一点 Sleep
in between. Or maybe could even switch back to Send
and use SetKeyDelay
.
另一种方法是使用控制集命令。
例如。首先关注一个控件,就像我在我的代码中所做的那样,然后使用例如 ControlSetText
.
我使用这个 Autohotkey 脚本有一段时间了:
; Windows Explorer Save Dialog
; hitting CTRL D goes to address bar, jumps to full desktop path, then goes to filename for the user to override
#IfWinActive ahk_class #32770
^D::
Send !D
String := "%UserProfile%\Desktop"
SendRaw %String%
Send {ENTER}
Send !D
return
#IfWinActive
它停止工作了。可能 Windows 10 更新更改了文件保存对话框中的某些内容。
现在使用上面的脚本(按 CTRL+D)仍会打开桌面位置,但会转到右上角 "Desktop Search"(而不是文件名)。
同时将最后一个 Send !D
更改为 Send !N
也没有帮助。
也Send {TAB}
无济于事,Windows无视。焦点似乎停留在“搜索”字段上。
经过评论中的讨论,我实际上能够重现您遇到的问题并找到了问题所在。
如果焦点控件从未离开任何文本输入控件,保存文件对话框中用于将焦点切换到文件名字段的 Alt+N
热键似乎确实不起作用。通过将焦点控件至少一次设置为文本输入控件以外的其他控件,Alt+N
热键似乎可以按预期工作。
好的,这是工作代码。
^d::
ControlFocus, DirectUIHWND2, A
SendInput, % "!d%userprofile%\Desktop{enter}!n"
return
所以首先我们关注 DirectUIHWND2
控件,也可以在保存文件对话框中使用其他控件,不管我们使用哪个。
如果您不知道如何弄清楚 windows' 控件,一种简单的方法是使用“Window Spy”。这是每个 AHK 安装附带的一个简洁的小 AHK 脚本。
您可以从 AHK 安装目录中找到它。
应该叫C:\Program Files\AutoHotkey\WindowSpy.ahk
。或者如果你有一个旧的 AHK 安装,它也可能是一个名为 AU3_Spy.exe
的编译脚本文件(或者类似的东西,我忘记了)
而A
parameter in the ControlFocus
命令表示激活window.
然后我只使用了一个发送命令。无需像在代码中那样使用多个发送命令或创建一些变量。
并且还使用了 !d
和 !n
而不是 !D
和 !N
.
不要在发送命令中使用大写字母,除非你确实需要它们。
!D
和 !N
实际上发送的是 Ctrl+Shift+D
和 Ctrl+Shift+N
,而不是 Alt+D
和 Alt+N
,这就是我假设你真正想要的。
此外,使用 SendInput
而不是 Send
。 SendInput
是首选方法,因为它更快、更可靠(更多信息来自文档)
不过,我担心的一个问题是它甚至可能太快了。似乎每次对我来说都很好,但如果你遇到麻烦,你可以将它分成多个命令,添加一点 Sleep
in between. Or maybe could even switch back to Send
and use SetKeyDelay
.
另一种方法是使用控制集命令。
例如。首先关注一个控件,就像我在我的代码中所做的那样,然后使用例如 ControlSetText
.