Я хочу определить ярлык, используя autohotkey, который автоматизирует навигацию к текстовому полю «Ширина ячейки» в меню ленты Word (т. Е. Отправляет клавиши Alt , j , l , w в Word).
Моя первоначальная попытка выполнения сценария приводит к проблеме, при которой действия Up
нажатий физических клавиш не были выполнены до отправки ключей. по сценарию, приводящему к сбою.
Хотя у меня есть обходной путь (использующий sleep 250
, показанный ниже), я хотел бы понять, существует ли более элегантное решение - например, это значение было выбрано методом проб и ошибок, и этот обходной путь может завершиться неудачей на другом компьютере, или если у моего ноутбука плохой день.
По сути, я хотел бы найти решение, позволяющее избежать жесткого кодирования продолжительности ожидания.
Есть предложения?
Проблема
В моем исходном скрипте я попытался определить горячую клавишу Alt + Shift + p в Word, чтобы отправить Alt , j , l , w в последовательности. Это приводит к сбою, и вместо этого вводится текст "jlw" в ячейку активной таблицы.
Это связано с тем, что для физически нажатых клавиш (отмеченных #
в комментариях ниже) действия Up
еще не запускаются, когда скрипт уже начал посылать ключи (обозначается $
). Это нарушает последовательность отправки Alt , j , l , w , поэтому происходит сбой.
Также обратите внимание на отмеченные события ?
может быть побочным продуктом неудачных действий.
Сценарий
; Jump to table cell width entry when Alt+Shift+p pressed in Word only
#IfWinActive, ahk_exe WINWORD.EXE
!+p::
Send, {RAlt down}{RAlt up}jlw
Return
История ключей
VK SC Type Up/Dn Elapsed Key Comment
-------------------------------------------------------------------------------------------------------------
A4 038 d 1.03 LAlt #
A0 02A d 0.14 LShift #
50 019 h d 0.13 p #, h=Hook Hotkey
A5 138 i d 0.02 RAlt $
A5 138 i u 0.00 RAlt $
11 01D i d 0.00 Control ?
11 01D i u 0.00 Control ?
A4 038 i u 0.00 LAlt #
A0 02A i u 0.00 LShift #
4A 024 i d 0.00 j $
4A 024 i u 0.00 j $
4C 026 i d 0.00 l $
4C 026 i u 0.00 l $
57 011 i d 0.00 w $
57 011 i u 0.00 w $
11 01D i d 0.00 Control ?
A4 038 i d 0.00 LAlt ?
11 01D i u 0.00 Control ?
A0 02A i d 0.00 LShift ?
50 019 s u 0.08 p #
A0 02A u 0.25 LShift ?
A4 038 u 0.00 LAlt ?
Обходной путь
При добавлении оператора sleep 250
горячие клавиши и отправленные ключи выполняются в заданной последовательности. Обратите внимание, что никакие другие ключи не срабатывают (ничего не обозначено ?
).
Сценарий
; Jump to table cell width entry when Alt+Shift+p pressed in Word only
#IfWinActive, ahk_exe WINWORD.EXE
!+p::
Sleep 250
Send, {RAlt down}{RAlt up}jlw
Return
История ключей
VK SC Type Up/Dn Elapsed Key Comment
-------------------------------------------------------------------------------------------------------------
A4 038 d 0.39 LAlt #
A0 02A d 0.20 LShift #
50 019 h d 0.20 p #, h=Hook Hotkey
50 019 s u 0.11 p #
A0 02A u 0.11 LShift #
A4 038 u 0.00 LAlt #
A5 138 i d 0.03 RAlt $
A5 138 i u 0.00 RAlt $
4A 024 i d 0.00 j $
4A 024 i u 0.00 j $
4C 026 i d 0.00 l $
4C 026 i u 0.00 l $
57 011 i d 0.00 w $
57 011 i u 0.00 w $, SUCCESS!