AHK для диалога сохранения: перейдите на рабочий стол и перейдите к имени файла поля - PullRequest
0 голосов
/ 14 апреля 2020

Я некоторое время использовал этот скрипт 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) все еще открывается местоположение рабочего стола, но в правом верхнем углу «Поиск рабочего стола» (вместо этого имени файла).

Также изменение последнего Send !D на Send !N не помогло.

Также Send {TAB} не помогло, Windows игнорирует его. Фокус, кажется, застрял в поле поиска.

1 Ответ

1 голос
/ 15 апреля 2020

После обсуждения в комментариях я действительно смог воспроизвести проблему, с которой вы столкнулись, и обнаружил проблему.
Горячая клавиша Alt+N в диалоговом окне сохранения файла для переключения фокуса на поле имени файла действительно не кажется, работает, если сфокусированный элемент управления никогда не оставлял никаких элементов управления вводом текста. Если для сфокусированного элемента управления по крайней мере один раз назначить что-то отличное от одного из элементов управления вводом текста, то горячая клавиша Alt+N будет работать, как и ожидалось.

Хорошо, так что вот рабочий код. 1007 *

Итак, сначала мы сфокусируемся на элементе управления DirectUIHWND2, и в диалоговом окне сохранения файла может быть другой элемент управления, но не имеет значения, какой мы используем.
А если нет знать, как выяснить элементы управления окна, одним из простых способов является использование «Window Spy». Это аккуратный маленький AHK-скрипт, который поставляется с каждой установкой AHK.
Вы найдете его в каталоге установки AHK.
Должен называться C:\Program Files\AutoHotkey\WindowSpy.ahk, но если у вас более старая установка AHK, он также может быть файл скомпилированного сценария с именем AU3_Spy.exe (или что-то подобное, я забыл)
А параметр A в команде ControlFocus означает активное окно.

А потом я использовал только одну команду отправки. Нет необходимости использовать несколько команд отправки или создавать какую-либо переменную, как вы делаете в своем коде.
А также использовать !d и !n вместо !D и !N.
Не использовать заглавные буквы в командах отправки, если вы на самом деле не хотите их.
!D и !N фактически отправляют Ctrl+Shift+D и Ctrl+Shift+N вместо Alt+D и Alt+N, что, как я полагаю, вы действительно были после.

Также используется SendInput вместо просто Send. SendInput является предпочтительным методом, потому что он быстрее и надежнее (подробнее об этом в документации)
Хотя у меня есть одна проблема, возможно, он может быть слишком быстрым. Кажется, каждый раз отлично работает, но если у вас возникли проблемы, вы можете разделить их на несколько команд, добавив между ними немного Sleep. Или, может быть, можно даже переключиться обратно на Send и использовать SetKeyDelay.

Другой подход для этого может быть с использованием команд set -com control.
Например, сначала фокусировка элемента управления , как я сделал в своем коде, а затем, например, ControlSetText.

...