Я использую AHK 1.1, чтобы установить capslock как горячую клавишу для переключения полноэкранного режима ArtRage (режим рабочей среды), я делаю это, потому что ArtRage не позволяет мне устанавливать CapsLock как горячую клавишу, но я довольно привык использовать это ключ, чтобы сделать это во многих программах, поэтому я подумал, что AHK может помочь мне.

Я попробовал это, и это сработало:

;   AR4 Toggle Workbench Mode
If WinActive("ahk_class ArtRage 3")

Capslock::
Sleep 20
Send {SC037 Down}   ;   NumpadMult
Sleep 10
Send {SC037 Up} ;   NumpadMult
Sleep 90
WinActivate, ahk_class ArtRage 3
return

#If

Таким образом, скрипт работает нормально, но затем окно ArtRage как-то теряет фокус, я имею в виду, что окно ArtRage все еще отображается, но я заметил, что оно теряет фокус, потому что если я хочу запустить другую горячую клавишу AHK (которая запускает только #If WinActive("ahk_class ArtRage 3") ) сразу же после выполнения вышеописанного сценария, он не обнаружит окно ArtRage как открытое, поэтому оно не запустится, если я не нажму вручную на окно ArtRage.

Я попытался сфокусироваться снова после того, как Capslock (режим переключения рабочих мест ) завершен, но WinActivate, ahk_class ArtRage 3 не перефокусируется на окне ArtRage, разве нет другого способа перефокусироваться на окне в AHK?

EDITED >>> как я могу поместить IfWinExist("ahk_class ArtRage 3") в конце части действий? Потому что я не могу просто запустить его поверх моего скрипта AHK, потому что он всегда будет фокусироваться на ArtRage, даже если я работаю в других приложениях, верно? Я пробовал это, но это не в правильном синтаксисе, не могли бы вы опубликовать пример??

#If WinActive("ahk_class ArtRage 3")

Capslock::
Send {SC037 Down}   ;   NumpadMult
Sleep 30
Send {SC037 Up} ;   NumpadMult
Sleep 30
IfWinExist("ahk_class ArtRage 3")
    WinActivate, ahk_class ArtRage 3
return

#If

1 ответ1

0

Попробуйте это (прежде всего как автономный скрипт):

;   AR4 Toggle Workbench Mode
#If WinActive("ahk_class ArtRage 3")

    Capslock::
    KeyWait, Capslock   ;  wait until Capslock is released 
    Sleep 20
    Send {NumpadMult}
    Sleep 90
    If !WinActive("ahk_class ArtRage 3")  ;  means: IfWinNotActive
    {
        Loop
        {           
            ;  Which window becomes active in this case?
            WinGetTitle, ActiveTitle, A
            WinGetClass, ActiveClass, A
            ToolTip, Active Window:`n%ActiveTitle%  ahk_class %ActiveClass%
            WinActivate, ahk_class ArtRage 3
            Sleep 50
            If WinActive("ahk_class ArtRage 3")
            {
                ToolTip
                break
            }                   
        }
    }
    return

#If

Esc:: ExitApp

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