2

Я пытаюсь создать сценарий, который копирует поля в форме в одном окне в форму в другом окне, используя Alt-Tab для перемещения между окнами.

Первая alt-tab работает для перемещения из окна 1 в окно 2, но следующая alt-tab для перемещения из окна 2 в окно 1 не работает.

Мой сценарий выглядит следующим образом:

#z::Send ^c!{tab}^v!{tab}{tab}^c!{tab}{tab}^v!{tab}{tab}^c!{tab}{tab}^v!{tab}

При нажатии Window z я хочу скопировать текущее поле в окне 1, перейти к окну 2 и вставить его, затем вернуться к окну 1 и скопировать следующее поле, перейти к окну 2, вставить в следующее поле и так далее.

Может кто-нибудь помочь.

Спасибо

3 ответа3

2

Я не нашел, что отправка последовательности нажатий клавиш была бы очень эффективной в таких обстоятельствах. Есть слишком много разных способов, которые могут пойти не так. Я бы попробовал использовать встроенные переменные буфера обмена и поменять местами только один раз.

Вы можете использовать горячую клавишу, чтобы выполнить набор инструкций, используя этот формат в вашем скрипте:

z::
; do a bunch of stuff here
return

Я бы сразу взял данные из первой формы и сохранил их:

clipboard =  ; Start off empty to allow ClipWait to detect 
Send ^c
ClipWait 
Field1:=ClipboardAll

Send {Tab} ; move to next field

Получив данные из первого окна, вы можете перейти к следующему окну:

Send AltTab 

(Хотя лучшим способом является WinActivate.)

Во втором окне вы можете переместиться вниз по форме, вставив данные из первого:

clipboard = %Field1%
Send ^v
Wait 100

Send {Tab} ; move to field 2...

См. Страницу AutoHotKey для Переменных буфера обмена для справки.

1

Вот два очень простых метода, позволяющих сделать именно ту последовательность alt-множественные вкладки, которую вы хотите. Главное, вы можете указать в фигурных скобках, сколько раз вы хотите нажать клавишу !:

1) Следующее использует знакомое ! для Alt и давайте вам Alt-Tab 2 окна далеко. Естественно, вы можете изменить «2» на любой номер, который вам нужен:

Send !{TAB 2}

Таким образом, ваш скрипт может быть изменен как:

#z::Send ^c!{tab}^v!{tab 2}^c!{tab 2}^v!{tab 2}^c!{tab 2}^v!{tab}

2) Этот следующий позволяет вам явно сказать, когда alt нажата и когда она отпущена. И снова {tab} {tab} сокращается до {tab 2}:

Send {alt down}{tab 2}{alt up}

Таким образом, ваш скрипт может быть изменен как:

#z::Send ^c!{tab}^v{alt down}{tab 2}{alt up}^c{alt down}{tab 2}{alt up}^v{alt down}{tab 2}{alt up}^c{alt down}{tab 2}{alt up}^v!{tab}

Прежде чем искать решение, я тоже попробовал ! {tab} {tab}, который вы пробовали; просто вторая вкладка не считается сопровождаемой.

Я нашел ответ в Справке AutoHotKey >> Управление с клавиатуры >> Send / SendRaw / SendInput / SendPlay / SendEvent: Отправить ключи и клики

0

Действительно простой способ сделать это, если заголовки окон всегда будут иметь хотя бы одно и то же частичное имя (Без названия - Блокнот, Документ1 - Блокнот и т.д.), - это использовать функцию WinWaitActive . Если вы знаете, что они никогда не изменятся, откройте программу AU3Record.exe (находится в C:\Program Files\AutoIt3\SciTE\ScriptWriter\AU3Record.exe). Начните запись и пару раз кликните туда-сюда между окнами. Остановите запись и возьмите строки, начинающиеся с WinWaitActive, и названия ваших окон в параметрах, удалите все, что может измениться, и используйте эти строки для переключения между окнами.

Это гораздо эффективнее, потому что вам не нужно беспокоиться о гигантских строках клавиатурных команд (сделайте это, alt-tab, сделайте это, alt-tab, сделайте это снова, alt-tab и т.д.) поддерживать при редактировании вашего сценария.

Также, как примечание, я бы разбил последовательности клавиш на более мелкие. Управлять ими проще, когда в каждой строке по две или три клавиши. Если вам все еще нужно, чтобы все выполнялось одновременно, сделайте это функцией.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .