Навигация по времени (ListBox) - PullRequest
0 голосов
/ 30 марта 2012

При создании AutoHotkey-скрипта я столкнулся со следующей проблемой. Мне нужно перемещаться по списку (одна позиция в нижнем направлении). Если текущая выбранная строка является нижней строкой видимой области списка, то навигация займет больше времени, чем если выбор выше последней строки. Существует видео этого поведения. ( РЕДАКТИРОВАТЬ: Как я понимаю, есть дополнительное время для перерисовки списка)

Следующий скрипт не работает для выбранной нижней строки.

Send, {tab}   ; Set focus to ListBox
Send, {down}  ; Navigate Listbox
Send, {enter} ; Submit selection

Итак, я могу вставить Sleep, 200 после второй строки. Однако, может быть, есть более элегантное решение. Если такое решение существует, опишите его, пожалуйста.

1 Ответ

1 голос
/ 01 апреля 2012

Я не могу воспроизвести поведение, о котором вы говорите.

На самом деле нет ничего неуместного в добавлении одной команды Sleep, если она заставляет вещи работать хорошо. Сон очень часто требуется при использовании команды «Отправить», чтобы все работало гладко в различных приложениях. Это потому, что команда Send иногда отправляет искусственные нажатия клавиш быстрее, чем приложение предназначено для обработки. Мне нужно было написать сценарии, такие как:

Send, {x down}
Sleep, 50
Send, {x up}

для работы в нескольких приложениях, для имитации продолжительности печати. ​​
Конечно, есть SetKeyDelay, но тогда у вас не будет такого штрафа.

Другая опция использует GuiControl для выбора вещей.
Вот грубый пример:

Gui, Add, DropDownList, vColorChoice, Black|White|Red|Green|Blue
Gui, Add, ListBox, vChoice Choose1 AltSubmit h120, Red|Green|Blue|Black|White
Gui, Show, h156

loop 4
{
Gui, Submit, nohide
sleep, 1000
GuiControl, Choose, Choice, % Choice + 1
Send, {enter}{tab}
} Return

Это демонстрация, а не практический сценарий. Чтобы выбрать что-то конкретное, это будет выглядеть так:

GuiControl, Choose, Choice, 3
...