AutoHotkey - приложение теряет фокус при включении полноэкранного режима
941
litu16
Я использую AHK 1.1, чтобы установить CapsLock горячую клавишу для переключения полноэкранного режима ArtRage (режим рабочей среды), я делаю это потому, что ArtRage не позволяет мне устанавливать CapsLock горячую клавишу, но я довольно привык использовать эту клавишу для что во многих программах, так что я думал, что AHK может мне помочь, мой сценарий был прост:
; AR4 Toggle Workbench Mode Capslock:: Send ; Ctrl Right is the key I set to toogle the workbench mode WinActivate ahk_class ArtRage 3 return #If
Сценарий работает только при первом включении full screen modeи при первом отключении, я имею в виду первые два раза нажатия CapsLock, но затем он не будет работать, если я не нажму вручную на окне ArtRage. Если я сделаю это, я могу использовать горячую клавишу еще два раза. Так что, думаю, я как-то теряю фокус на окне. Я пробовал также это:
с тем же результатом, я гугл об этом, и я попытался:
Capslock:: WinGet, AR4_id, ID, A Send ControlFocus,,%AR4_id% return
но это не работает вообще. Надеюсь, что какой-нибудь суперпользователь может помочь мне в этом.
Отредактировано >>>>
Итак, теперь я попытался заставить скрипт работать, если WinExist И если WinActive, это возможно? Я сделал это так, но это не работает, CapsLock все еще вызывает ArtRage для каждого приложения.
код работает, но если ArtRage открыт (не сфокусирован) и я нахожусь в MS Word, если я нажму, CapsLock он не будет отправлять, CapsLockно он отправит «работу в тестовом режиме» в Artrage, несмотря на то, что он не сфокусирован.
PD: теперь NumpadMultновая горячая клавиша для входа в полноэкранный режим (это проще).
Иногда помогает добавление кодов клавиш и добавление времени ожидания между нажатиями / отпусканиями клавиш.
Я тестирую .. кажется, что это работает, но иногда нет. Не работает, я все равно должен сделать щелчок на окне ArtRage после выполнения первых двух раз, любая идея?
litu16 7 лет назад
0
1
user3419297
#If WinExist("ahk_class ArtRage 3") Capslock:: WinActivate, ahk_class ArtRage 3 WinWaitActive, ahk_class ArtRage 3 Send ; Ctrl Right is the key I set to toogle the workbench mode return #If
РЕДАКТИРОВАТЬ:
Может ли быть так, что программа создает новое окно этого класса ahk_class в режиме рабочей среды? Используйте это, чтобы узнать это:
F1:: WinGet, instances, count, ahk_class ArtRage MsgBox, There exist %instances% windows of this ahk_class. return
EDIT2:
Попробуйте также это как отдельный скрипт (закройте все другие скрипты, которые могут мешать):
Ответ на вопрос, как лучше всего использовать директивы # If- или #IfWin, зависит от вашей ситуации.
The #IfWin directives are positional: they affect all hotkeys and hotstrings physically beneath them in the script. They are also mutually exclusive; that is, only the most recent one will be in effect.
#if WinExist - это широкий дескриптор, но только если вы отдает ему приоритет, то есть если вы ставите его перед другими директивами #if в скрипте. Попробуйте дать приоритет #if директивам WinActive (поместите их перед #if WinExist в вашем скрипте).
Пример:
#If WinActive("ahk_class ArtRage 3") Capslock:: MsgBox, You pressed Capslock while ArtRage was active 1:: MsgBox, You pressed 1 while ArtRage was active #If WinActive("ahk_class notepad") Capslock:: MsgBox, You pressed Capslock while Notepad was active 1:: Send, 2 #If WinActive("ahk_class CabinetWClass") Capslock:: MsgBox, You pressed Capslock while Explorer was active 1:: Run %A_MyDocuments% #If WinExist("ahk_class ArtRage 3") Capslock:: MsgBox, You pressed Capslock while ArtRage was inactive `n(Notepad and Explorer are not active or do not exist) 1:: MsgBox, You pressed 1 while ArtRage was inactive`nNotepad and Explorer are not active or do not exist #If WinExist("ahk_class IEFrame") Capslock:: MsgBox, You pressed Capslock while IE was inactive `nArtRage does not exist,`nNotepad and Explorer are not active or do not exist #If ; end of context-sensitive hotkeys Capslock:: MsgBox, You pressed Capslock while ArtRage and IE do not exist`nNotepad and Explorer are not active or do not exist 1:: MsgBox, You pressed 1 while ArtRage and IE do not exist`nNotepad and Explorer are not active or do not exist
Кстати: #If WinExist ("ahk_class ArtRage 3") после #If WinActive ("ahk_class ArtRage 3") не имеет смысла (директива #If WinActive предполагает, что это окно существует).
Я сейчас тестирую, я не знаю, иногда работает, иногда нет. Не работает, я все равно должен сделать щелчок на окне ArtRage после выполнения первых двух раз, любая идея?
litu16 7 лет назад
0
Проверьте мой отредактированный ответ.
user3419297 7 лет назад
0
Нет, он не создает новый экземпляр ArtRage, скрипт AHK всегда выводит «есть только 1 окно для этого класса ahk. Любопытно, что я пробовал этот ключ с двумя макро-регистраторами,« Key Manager »и« Hot Keyboard Pro "оба работают нормально, поэтому я думаю, что в окне Artrage нет ничего особенного. Могу ли я использовать` contrlsend` в этом случае?
litu16 7 лет назад
0
Смотрите также EDIT2 выше.
user3419297 7 лет назад
0
спасибо, это сработало с использованием `#If WinExist` и` ahk_parent`. Но теперь проблема в том, что если artrage открыт (даже не сфокусирован), Capslock не будет запускать Capslock в любом другом приложении, вместо этого он перейдет к ArtRage и нажмет `^ `, так что другие приложения, использующие Capslock для полного входа. Режим экрана не будет работать, пока я не закрою ArtRage или Autohotkey. Что я могу сделать? Я отредактировал мой вопрос, чтобы показать, что я сделал, Спасибо, Advanced.
litu16 7 лет назад
0
Есть много способов решить эту проблему, и это будет зависеть от вашей ситуации. Я бы начал другой вопрос, чтобы обсудить это.
user3419297 7 лет назад
0
Давайте [продолжим это обсуждение в чате] (http://chat.stackexchange.com/rooms/49310/discussion-between-user3419297-and-litu16).
user3419297 7 лет назад
0
Новый вопрос был бы очень похож на этот, потому что ему нужно было бы подвести итог всему тому, что было объяснено в этих вопросах, например ... _Я использую AHK 1.1, чтобы установить capslock как горячую клавишу для переключения в полноэкранном режиме ArtRage ( режим рабочей среды), я делаю так, потому что ArtRage не позволяет мне устанавливать capslock как горячую клавишу, но я довольно привык использовать эту клавишу, чтобы сделать это во многих программах_. Пока что `#if winexist` достаточно широк, но если я использую` #if winactive`, это не сработает, как я могу решить эту проблему? спасибо заранее.
litu16 7 лет назад
0
Смотрите EDIT3 выше.
user3419297 7 лет назад
0
Привет, user3419297, я не понимаю, _ # если WinExist имеет широкий дескриптор, но только если вы отдаете ему приоритет, то есть если вы поставите его перед другими директивами #if в скрипте. Попробуйте дать приоритет #if директивам WinActive (поместите их перед #if WinExist в вашем скрипте) ._ Разве это не то, что я только что сделал ?, Я попытался поместить еще один `# If` перед` # ifWinExist`. Не могли бы вы показать пример, как это сделать? Я написал в своем отредактированном коде, как я думал, что мог бы поставить еще один `# if` перед` # ifWinExist`, но потом вы сказали, что это неправильно, как мне это сделать? спасибо заранее.
litu16 7 лет назад
0
Привет, user3419297Я задала новый вопрос об этой проблеме. Надеюсь, вы мне поможете http://superuser.com/questions/1151188/autohotkey-hotkey-overriding-key-in-all-windows-apps-instead-of-just- if-windo спасибо, продвинутый.
litu16 7 лет назад
0
Смотрите пример в EDIT3.
user3419297 7 лет назад
0
Я вижу, что пробелы не имеют смысла в скриптах AHK. Спасибо за пример, теперь я думаю, что смогу это сделать, но я обычно ставлю `#If WinActive`, затем делаю некоторый код, затем` # if` (конец контекстно-зависимых горячих клавиш) перед запуском другого другого куска кода, иначе большинство горячих клавиш мне не подойдут. Итак, я протестировал в качестве вашего примера, но я установил приоритет, поместил код, затем закрыл контекстно-зависимые горячие клавиши и открыл новый `#IfWinActive ArtRage`, и это сработало, но ... это означало бы, что мне нужно вроде LIST все приложения разные, кроме ArtRage, где я хочу, чтобы «capslock» работал по-разному. Поблагодарить
litu16 7 лет назад
0
Еще одна вещь, которая смущает меня в сценариях AHK, заключается в том, что операторам `If` и` else` нужны фигурные скобки (если код внутри них больше 1 строки), но они в вашем примере не нужны, почему?
litu16 7 лет назад
0
привет user3419297 Я решил это, но у меня проблемы с перефокусировкой в окне ArtRage после запуска скрипта, я опубликовал, что я сделал в этом новом вопросе со всеми деталями, не могли бы вы проверить это? танкс продвинутый. http://superuser.com/questions/1151188/autohotkey-hotkey-overriding-key-in-all-windows-apps-instead-of-just-if-windo
litu16 7 лет назад
0