#IfWinActive / #IfWinNotActive / #IfWinExist / #IfWinNotExist

문맥-감지 핫키핫스트링을 만듭니다. 그런 핫키는 활성화 된 또는 존재하는 창의 종류에 따라 다른 조치를 수행합니다 (또는 아무일도 하지 않습니다).

#IfWinActive WinTitle, WinText
#IfWinExist WinTitle, WinText
#IfWinNotActive WinTitle, WinText
#IfWinNotExist WinTitle, WinText
#If Expression

매개변수

WinTitle

목표 창을 식별하는 창 제목 또는 다른 기준. WinTitle 참조.

부합하는 행위는 자동-실행 섹션에 설정된 대로SetTitleMatchMode가 결정합니다.

대부분의 다른 지시어처럼, 변수는 지원하지 않습니다. ahk_pidahk_id를 하드-코드된 프로세스나 창 ID와 함께 사용할 수는 있지만, 더 일반적인 것은 #IfWin이 간접적으로 GroupAddHotkey IfWin을 통하여 사용하는 것입니다.

WinText

존재하면, 이 매개변수는 목표 창 텍스트의 부문자열입니다 (동봉된 Window Spy 유틸리티에 노출됨). 숨은 텍스트는 DetectHiddenText이 자동-실행 섹션 (스크립트이 최상단)에 켜져 있으면 탐지됩니다.

ExcludeTitle, ExcludeText

이것들은 지원되지 않지만, WinTitle대하여 ahk_group MyGroup를 지정하면 간접적으로 사용할 수 있습니다 (여기에서 MyGroupGroupAdd를 통하여 생성된 그룹이며, 이 그룹은 ExcludeTitle/Text를 지원합니다).

기본 연산

#IfWin 지시어로 문맥 감지 핫키핫스트링을 쉽게 만들 수 있습니다. 예를 들어:

#IfWinActive ahk_class Notepad
#space::MsgBox 노트패드 안에서 Win+Spacebar를 눌렀습니다.

#IfWin 지시어는 위치에 민감합니다: 스크립트에서 물리적으로 아래에 있는 모든 핫키와 핫스트링에 영향을 미칩니다. 이 둘은 또 상호 배타적입니다; 즉, 가장 최신의 것만 효과가 있습니다.

문맥 감지를 끄려면, 매개변수 없이 #IfWin 지시어를 지정하십시오. 예를 들어:

#IfWinActive

#IfWin이 꺼져 있을 때 (또는 스크립트에 전혀 사용되지 않으며), 모든 핫키핫스트링이 모든 창에 대하여 활성화 됩니다 (SuspendHotkey 명령어를 통하여 끌 수 있습니다).

마우스나 키보드 핫키가 #IfWin를 통하여 꺼져 있을 때, 고유의 기능을 수행합니다; 즉, 마치 그런 핫키가 전혀 없는 것처럼 활성 창에 건네집니다. 한 가지 예외가 있습니다: 조이스틱 핫키는: #IfWin이 작동하더라도, 다른 프로그램이 버튼 누름을 보는 것을 막지 않습니다.

#IfWin can also be used to alter the behavior of an ordinary key like Enter or Space. 이는 특정 창이 그 키를 무시하거나 마음에 안드는 행위를 수행할 경우 유용합니다. 예를 들어:

#IfWinActive Reminders ahk_class #32770  ; 아웃룩의 "알리미" 창.
Enter::Send !o  ; "Enter" 키눌림은 선택된 알리미를 재우는게 아니라 열리도록 만듭니다.
#IfWinActive

다른 지시어처럼, #IfWin는 조건적으로 실행할 수 없습니다.

변종 (중복) 핫키

특정 핫키핫스트링은 각 정의마다 #IfWin 기준이 다르다면 스크립트에 한 번 이상 정의할 수 있습니다. 이것을 핫키 변종이라고 합니다. 예를 들어:

#IfWinActive ahk_class Notepad
^!c::MsgBox 노트패드에서 Control+Alt+C를 눌렀습니다.
#IfWinActive ahk_class WordPadClass
^!c::MsgBox 워드패드에서 Control+Alt+C를 눌렀습니다.
#IfWinActive
^!c::MsgBox 노트패드/워드패드가 아닌 창에서 Control+Alt+C를 눌렀습니다.

여러 변종이 촉발될 수 있다면, 스크립트에서 제일 위쪽에 있는 변종만 촉발됩니다. 예외가 있다면 전역 변종입니다 (#IfWin 기준이 전혀 없다면): 언제나 가장 우선 순위가 낮습니다. 그러므로, 경쟁 상대로 다른 변종이 전혀 없을 경우에만 촉발됩니다 (이 예외는 핫스트링에 적용되지 않습니다).

중복 핫키를 만들 때, ^!+#와 같은 수식 심볼의 순서는 문제가 되지 않습니다. 예를 들어, ^!c!^c와 동일합니다. 그렇지만, 키는 일관성이 있게 철자가 되어야 합니다. 예를 들어, 이런 목적으로 EscEscape와 같지 않습니다 (그렇지만 대소문자는 문제가 되지 않습니다). 또, 와일드카드 접두 심볼(*)이 있는 핫키는 완전히 비-와일드카드 핫키와 구분됩니다; 예를 들어, *F1F1는 각자 자신만의 변종 집합이 있습니다.

같은 핫키 서브루틴을 여러 변종이 실행하도록 만들려면, 가장 쉬운 방법은 동일한 핫키를 주욱 늘어놓고, 각각 #IfWin 지시어를 다르게 만드는 것입니다. 예를 들어:

#IfWinActive ahk_class Notepad
#z::
#IfWinActive ahk_class WordPadClass
#z::
MsgBox 노트패드 또는 워드패드에서 Win+Z를 눌렀습니다.
return

대안으로, #IfWinActive ahk_group MyGroup을 통하여 창 그룹을 사용할 수 있습니다.

핫키 변종을 (스크립트가 실행중인 동안에) 동적으로 생성하려면, "Hotkey IfWin"를 참조하십시오.

총평

#IfWin는 또 적절할 때 접두 키를 자신의 고유 기능으로 복구합니다 (접두 키는 "a & b"와 같이 핫키 안에 있는 A 키입니다). 주어진 접두 심볼에 대하여 활성화된 핫키가 전혀 없을 때마다 이런 일이 일어납니다.

Gosub나 Goto를 사용하여 핫키나 핫스트링 라벨에 점프할 때, 스크립트 상단에 가까운 변종으로 점프합니다.

핫키가 현재 #IfWin을 통하여 꺼져 있으면, 그의 키나 마우스 버튼은 "#" 문자와 함께 KeyHistory의 "Type" 컬럼에 나타납니다. 이는 스크립트 디버깅에 도움이 됩니다.

%Var%와 같은 변수 참조는 현재 지원하지 않습니다. 그러므로, 퍼센트 사인은 `%를 통하여 피신시켜야 합니다. 앞으로는 지원할 가능성이 있습니다. 비슷하게, (`,를 통하여) 글자 그대로의 쉼표도 피신시켜야 합니다. 추가 매개변수가 미래에 추가될 가능성이 있습니다. 이 한계를 우회할 필요가 있다면, GroupAddahk_group를 사용하십시오.

Hotkey 명령어가 핫키에 할당한 라벨은 #IfWin에 직접적으로 영향을 받지는 않습니다. 대신에, #IfWin를 스크립트 상단에 가깝게 사용하면 Hotkey 명령어가 생성한 모든 핫키에 영향을 줍니다 (단 "Hotkey IfWin"가 사용되어 그것을 바꾸지 않았어야 합니다).

알트-탭 핫키는 #IfWin에 영향을 받지 않습니다: 오히려 모든 창에 효과가 있습니다.

마지막 발견 창은이 #IfWinActive/Exist이 설정합니다 (그렇지만 #IfWinNotActive/NotExist로는 설정되지 않습니다). 예를 들어:

#IfWinExist ahk_class Notepad
#n::WinActivate  ; #IfWin이 발견한 창을 활성화합니다.

#IfWin의 매개변수 중 하나에 선두 또는 후미의 스페이스/탭이 필요하면, 피신 연속열 `s와 `t를 사용할 수 있습니다.

수행성능의 이유로, #IfWin는 지정된 창의 존재나 활성화를 항상 관제하지는 않습니다. 대신에, 핫키나 핫스트링을 타자할 때만 부합하는 창이 있는지 점검합니다. 부합하는 창이 존재하지 않으면, 키눌림이나 마우스 클릭은 활성 창 안으로 그대로 통과시킵니다.

창 제목과 텍스트는 대소문자를 구분합니다. 숨은 창은 DetectHiddenWindows이 (스크립트 상단) 자동 실행 섹션에서 켜졌다면 탐지됩니다 .

#If 표현식, Hotkey 명령어, Hotkeys, Hotstrings, Suspend, WinActive(), WinExist(), SetTitleMatchMode, DetectHiddenWindows

예제

Creates two hotkeys and one hotstring which only work when Notepad is active, and one hotkey which works for any window except Notepad.

#IfWinActive ahk_class Notepad
^!a::MsgBox 노트패드가 활성화되어 있는 동안 Ctrl-Alt-A를 눌렀습니다.  ; 이 핫키는 다른 창에 눌려봐야 아무 효과도 없습니다 (그대로 "통과 시킵니다").
#c::MsgBox 노트패드가 활성화되어 있는 동안 Win-C를 눌렀습니다.
::btw:노트패드에 있는 동안에만 :"btw"에 대하여 이 텍스트로 교체됩니다.
#IfWinActive
#c::MsgBox 노트패드가 아닌 창에서 Win-C를 눌렀습니다.