用于保存对话框的 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+DCtrl+Shift+N,而不是 Alt+DAlt+N,这就是我假设你真正想要的。

此外,使用 SendInput 而不是 SendSendInput 是首选方法,因为它更快、更可靠(更多信息来自文档)
不过,我担心的一个问题是它甚至可能太快了。似乎每次对我来说都很好,但如果你遇到麻烦,你可以将它分成多个命令,添加一点 Sleep in between. Or maybe could even switch back to Send and use SetKeyDelay.

另一种方法是使用控制集命令。
例如。首先关注一个控件,就像我在我的代码中所做的那样,然后使用例如 ControlSetText.