#If [AHK_L]
문맥-감지 핫키와 핫스트링을 만듭니다. 문맥 감지 핫키는 표현식의 결과에 따라 다르게 조치를 수행합니다 (또는 아무것도 하지 않습니다).
#If [, Expression ]
매개변수
- Expression
유효한 표현식.
기본 연산
유효한 연산식이면 핫키가 활성화 될 문맥을 정의하는 데 사용할 수 있습니다. 예를 들어:
#If WinActive("ahk_class Notepad") or WinActive(MyWindowTitle) #Space::MsgBox You pressed Win+Spacebar in Notepad or %MyWindowTitle%.
#IfWin 지시어처럼, #If도 위치에 민감합니다: 스크립트에서 물리적으로 아래에 있는 모든 핫키와 핫스트링에 영향을 줍니다. #If 그리고 #IfWin는 또 상호 배타적입니다; 즉, 가장 최근의 #If 또는 #IfWin만 효과가 있습니다.
문맥 감지를 끄려면, 모든 매개변수를 생략하고 #If 또는 #IfWin 지시어를 지정하면 됩니다. 예를 들어:
#If
총평
핫키를 구성하는 키 조합이 눌리면, #If 표현식을 평가하여 그 핫키를 활성화 할지 말지를 결정합니다. 표현식의 평가가 완료될 때까지 또는 시간제한이 풀릴 때까지 시스템은 키보드나 마우스 입력에 응답하지 않을 가능성이 있습니다. 표현식이 평가되고 있는 동안에 (예를 들어 표현식이 호출한 함수로부터) 키눌림이나 마우스 클릭을 전송하면 복잡한 일이 야기되므로 피하는 편이 좋습니다.
표현식은 프로그램이 핫키가 활성화되어 있는지 알 필요가 있을 때마다 평가될 수도 있습니다. 예를 들어, a & b::
와 같은 맞춤 조합에 대하여 #If 표현식은 접두 키가 (이 예제에서는 a
) 눌릴 때 평가되어, 맞춤 수식 키로 행위해야 할지 말지 결정합니다.
위에 기술한 이유 때문에, 표현식은 반드시 빨리 완료되도록 그리고 부작용이 없도록 작성해야 합니다.
[v1.0.90+]: A_ThisHotkey와 A_TimeSinceThisHotkey는 현재 #If 표현식이 평가되고 있는 핫키에 기반하도록 설정됩니다.
[v1.0.95.00+]: A_PriorHotkey와 A_TimeSincePriorHotkey는 임시로 "This" 변수에 상응하는 이전의 값을 담고 있습니다.
관련 항목
#IfWin 지시어의 행위 특성은 대부분 #If에도 적용됩니다.
#IfTimeout을 사용하면 기본 시간제한 값을 바꿀 수 있습니다.
예제
; 예제 1: 태스크 바 위에서 마우스 휠을 스크롤해서 볼륨을 조절합니다. #If MouseIsOver("ahk_class Shell_TrayWnd") WheelUp::Send {Volume_Up} WheelDown::Send {Volume_Down} MouseIsOver(WinTitle) { MouseGetPos,,, Win return WinExist(WinTitle . " ahk_id " . Win) } ; 예제 2: 모든 편집 콘트롤을 위한 간단한 단어-삭제 단축키. #If ActiveControlIsOfClass("Edit") ^BS::Send ^+{Left}{Del} ^Del::Send ^+{Right}{Del} ActiveControlIsOfClass(Class) { ControlGetFocus, FocusedControl, A ControlGet, FocusedControlHwnd, Hwnd,, %FocusedControl%, A WinGetClass, FocusedControlClass, ahk_id %FocusedControlHwnd% return (FocusedControlClass=Class) } ; 예제 3: 문맥-감지 핫키. #If Esc::ExitApp ; 예제 4: 동적인 핫키. 예제 1을 필요로 함. NumpadAdd:: Hotkey, If, MouseIsOver("ahk_class Shell_TrayWnd") if (doubleup := !doubleup) Hotkey, WheelUp, DoubleUp else Hotkey, WheelUp, WheelUp return DoubleUp: Send {Volume_Up 2} return