WinGet

지정된 창의 유일한 ID, 프로세스 ID, 프로세스 이름, 또는 그의 콘트롤 목록을 열람합니다. 또한 지정된 기준에 부합하는 모든 창의 목록을 열람합니다.

WinGet, OutputVar [, Cmd, WinTitle, WinText, ExcludeTitle, ExcludeText]
선택

Parameters

OutputVar

Cmd의 결과를 저장할 변수의 이름.

Cmd
아래 리스트 참조.
WinTitle

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

WinText

존재하면, 이 매개변수는 목표 창 텍스트의 부문자열입니다 (Window Spy 유틸리티에 노출). 숨은 텍스트는 DetectHiddenText가 켜져 있으면(ON) 탐지됩니다.

ExcludeTitle

제목에 이 값이 있는 창은 제외합니다.

ExcludeText

텍스트에 이 값이 있는 창은 제외합니다.

Cmd는 수행할 연산입니다. 비어 있으면 ID가 기본값입니다. 다음 단어 중 하나가 될 수 있습니다:

ID: 창의 유일 ID 번호 (HWND/핸들)을 열람합니다. 부합하는 창이 없으면, OutputVar는 비워집니다. 함수 WinExist()WinActive()도 창의 ID를 열람하는 데 사용할 수 있습니다; 예를 들어, WinExist("A")는 활성 창의 ID를 얻는 가장 빠른 방법입니다. 콘트롤의 HWND를 발견하려면 (Post/SendMessage 또는 DllCall에 사용할 목적으로), ControlGet Hwnd 또는 MouseGetPos를 사용하십시오.

IDLast: 위와 동일하지만 부합하는 창이 여럿이면 가장 마지막/최하위 창의 ID를 열람합니다. 오직 하나만 일치하면, ID와 동일하게 수행합니다. 이 개념은 WinActivateBottom이 사용하는 개념과 비슷합니다.

PID: 창의 프로세스 ID (PID)를 열람합니다.

ProcessName: 창을 소유한 프로세스의 이름을 열람합니다 (예, notepad.exe). 부합하는 창이 없으면, OutputVar는 비워집니다.

ProcessPath [v1.1.01+]: ProcessName과 비슷하지만, 단지 이름이 아니라 프로세스의 전체 경로와 이름을 열람합니다.

Count: 기존 창에서 WinTitle, WinText, ExcludeTitle, 그리고 ExcludeText (없으면 0)에 부합하는 창의 개수를 열람합니다. 시스템의 모든 창을 열람하려면, 네 개의 매개변수를 모두 생략하십시오. 숨은 창은 DetectHiddenWindows이 켜져 있을 경우에만 포함됩니다.

List: 기존 창에서 지정된 WinTitle, WinText, ExcludeTitle, 그리고 ExcludeText에 부합하는 기존의 모든 창의 유일 ID 번호들을 열람합니다. (전체 시스템의 모든 창을 열람하려면, 네 개의 제목/텍스트 매개변수를 모두 생략하십시오). 각 ID 번호는 OutputVar의 이름으로 시작하는 변수에 저장됩니다 (의사-배열을 형성합니다). 반면에 OutputVar 자체에는 열람된 항목의 개수가 설정됩니다 (없으면 0입니다). 예를 들어, OutputVar가 MyArray이고 부합한 창이 두 개 발견되었다면, MyArray1은 첫 번째 창의 ID가 설정되고, MyArray2는 두 번째 창의 ID에 설정됩니다. 창은 (바탕화면에 어떻게 쌓여 있는가에 맞추어) 위에서 아래로 열람됩니다. 숨은 창은 DetectHiddenWindows이 켜져 있을 때만 탐지됩니다. 함수 안에서, 지역적이 아니라 전역적 의사-배열을 생성하려면, 이 명령어를 사용하기 전에 먼저 MyArray를 전역 변수로 선언하십시오 (전역-간주 함수에 대하여 그 반대도 마찬가지입니다). 그렇지만, 흔한 혼란의 근원 때문에, 종종 각 변수를 함수 안에 설정하는 것이 필수적인 경우도 있습니다.

MinMax: 창에 대하여 최소/최대 상태를 열람합니다. 부합하는 창이 없으면 OuputVar는 비워집니다; 그렇지 않으면 다음 숫자 중 하나가 설정됩니다:
-1: 창이 최소 상태입니다 (WinRestore로 복원할 수 있습니다).
1: 창이 최대 상태입니다 (WinRestore로 복원할 수 있습니다).
0: 창이 최대 상태도 아니고 최소 상태도 아닙니다.

ControlList: 창에 있는 모든 콘트롤의 이름을 열람합니다. 부합하는 창이 존재하지 않거나 창에 콘트롤이 없으면, OutputVar는 비워집니다. 그렇지 않으면, Window Spy에 보여지듯이, 각 콘트롤 이름은 그의 클래스 이름과 바로 다음에 연속 번호 (ClassNN)로 구성됩니다.

마지막 항목을 제외하고 각 항목은 라인피드로 끝납니다 (`n). 콘트롤 이름을 하나씩 조사하려면, 아래 예제 섹션에 보여주는 바와 같이 회돌이 파싱을 사용하십시오.

콘트롤은 Z-순서에 따라 정렬됩니다. 보통 창이 지원한다면 TAB 키로 초점을 이동하는 순서와 동일합니다.

현재 마우스 아래에 있는 콘트롤은 MouseGetPos로 열람할 수 있습니다.

ControlListHwnd [v1.0.43.06+]: 위와 같지만 각 콘트롤의 ClassNN이 아니라 창 핸들 (HWND)을 열람합니다.

Transparent: 창의 투명도를 열람합니다 (투명도를 설정하는 방법은 WinSet을 참조하십시오). 다음과 같은 경우 OutputVar이 비워집니다:

  1. OS가 Windows XP보다 구형입니다;
  2. 부합하는 창이 없습니다;
  3. 창에 투명도 레벨이 없습니다;
  4. (OS 행위로 야기된) 기타 조건. 예를 들어 창을 투명하게 만든 이후로 최소화, 복구, 또는 크기가 바뀌었습니다.
그렇지 않으면, 0부터 255 사이의 숫자가 저장됩니다. 0은 보이지 않는 창을 나타내고 255는 완전 불투명 창을 나타냅니다. 예를 들어:

MouseGetPos,,, MouseWin
WinGet, Transparent, Transparent, ahk_id %MouseWin%  ; 마우스 아래의 창이 투명도.
선택 | 내려받기

TransColor: 창에서 투명으로 표식이 붙은 색을 열람합니다 (TransColor를 설정하는 법은 WinSet를 참조합니다.). OutputVar는 다음과 같은 경우 비워집니다:

  1. OS가 Windows XP보다 오래되었습니다;
  2. 부합하는 창이 없습니다;
  3. 창에 투명 색이 없습니다; 또는
  4. (OS 행위로 야기된) 기타 조건. 예를 들어 창을 투명하게 만든 이후로 최소화, 복구, 또는 크기가 바뀌었습니다.
그렇지 않으면, 여섯자리 십육진 RGB 색이 저장됩니다. 예, 0x00CC99. 예를 들어:

MouseGetPos,,, MouseWin
WinGet, TransColor, TransColor, ahk_id %MouseWin%  ; 마우스 커서 아래에 있는 창의 TransColor.
선택 | 내려받기

Style 또는 ExStyle: 창의 스타일 또는 확장 스타일을 나타내는 8-자리 십육진 수를 열람합니다. 부합하는 창이 없으면, OutputVar는 비워집니다. 다음 예제는 창에 WS_DISABLED 스타일이 있는지 알아봅니다:

WinGet, Style, Style, My Window Title
if (Style & 0x8000000)  ; 0x8000000 is WS_DISABLED.
  ... 창이 비활성 상태입니다. 그래서 적절한 조치를 수행합니다.
선택 | 내려받기

다음 예제는 창에 WS_EX_TOPMOST 스타일이 있는지 알아봅니다 (항상-위에):

WinGet, ExStyle, ExStyle, My Window Title
if (ExStyle & 0x8)  ; 0x8 is WS_EX_TOPMOST.
  ... 창이 항상 최상위 상태입니다. 그래서 적절한 조치를 수행합니다.
선택 | 내려받기

스타일 목록은 스타일 테이블을 참조하십시오.

논평

창의 ID 번호는 오직 창이 살아 있을 동안에만 유효합니다. 다른 말로, 어플리케이션이 재시작하면, 그의 모든 창은 새 ID 번호를 얻습니다.

이 명령어로 열람된 ID 번호는 숫자이고 (앞에 접두어 "ahk_id"를 포함하지 않음) 그리고 SetFormat의 설정에 상관없이 16진 형식으로 저장됩니다.

마우스 커서 아래에 있는 창의 ID는 MouseGetPos로 열람할 수 있습니다.

ID 번호는 현재 32-비트 부호없는 정수이지만, 앞으로 64-비트가 될 가능성이 있습니다. 그러므로, 이런 값들에 대해 덧셈을 하는 것과 같은 숫치 연산을 수행하는 것은 안전하지 않습니다. 왜냐하면 그런 연산은 입력 문자열을 부호없는 정수가 아니라 부호있는 정수로 해석할 필요가 있기 때문입니다.

창 제목과 텍스트는 대소문자에 민감합니다. 숨은 창은 DetectHiddenWindows가 켜져 있으면 탐지됩니다.

관련 항목

WinGetClass, Process, WinGetTitle, MouseGetPos, ControlGet, ControlFocus, GroupAdd

예제

; 예제 #1: 활성 창을 최대화하고 그의 유일 ID를 보고합니다:
WinGet, active_id, ID, A
WinMaximize, ahk_id %active_id%
MsgBox, 활성 창의 ID는 "%active_id%"입니다.

; 예제 #2: 전체 시스템에서 모든 창을 방문하고 각 창에 대하여 다음 정보를 보여줍니다:
WinGet, id, list,,, Program Manager
Loop, %id%
{
    this_id := id%A_Index%
    WinActivate, ahk_id %this_id%
    WinGetClass, this_class, ahk_id %this_id%
    WinGetTitle, this_title, ahk_id %this_id%
    MsgBox, 4, , Visiting All Windows`n%a_index% of %id%`nahk_id %this_id%`nahk_class %this_class%`n%this_title%`n`nContinue?
    IfMsgBox, NO, break
}

; 예제 #3: ControlList으로부터 콘트롤 이름을 하나씩 추출합니다:
WinGet, ActiveControlList, ControlList, A
Loop, Parse, ActiveControlList, `n
{
    MsgBox, 4,, Control #%a_index% is "%A_LoopField%". Continue?
    IfMsgBox, No
        break
}

; 예제 #4: 실시간으로 활성 창의 콘트롤 리스트를 보여줍니다:
#Persistent
SetTimer, WatchActiveWindow, 200
return
WatchActiveWindow:
WinGet, ControlList, ControlList, A
ToolTip, %ControlList%
return
선택 | 내려받기