ControlGet

콘트롤에 관하여 다양한 유형의 정보를 열람합니다.

ControlGet, OutputVar, Cmd [, Value, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]
선택

매개변수

OutputVar

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

Cmd, Value
아래 리스트 참조
Control

ClassNN (콘트롤의 클래스이름과 실체 번호) 또는 콘트롤의 텍스트일 수 있습니다. 둘 모두 Window Spy를 통하여 알아낼 수 있습니다. 텍스트를 사용할 때, 부합하는 행위는 SetTitleMatchMode로 결정됩니다. 이 매개변수가 비어 있으면, 목표 창의 최상위 콘트롤이 사용됩니다.

콘트롤의 HWND (창 핸들)에 작동시키려면, Control 매개변수를 빈 채로 두고 ahk_id %ControlHwnd%WinTitle 매개변수에 지정하십시오 (이것은 숨은 콘트롤에도 작동합니다. DetectHiddenWindows가 꺼져 있어도 상관없습니다). 콘트롤의 HWND는 전형적으로 ControlGet Hwnd, MouseGetPos, 또는 DllCall을 통하여 열람합니다.

WinTitle

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

WinText

존재하면 목표 창 텍스트의 부문자열입니다 (Window Spy에 노출됨). 숨은 텍스트는 DetectHiddenText가 켜져(ON) 있어야 노출됩니다.

ExcludeTitle

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

ExcludeText

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

Cmd, Value

CmdValue 매개변수는 서로 의존합니다. 그 사용법은 아래에 기술합니다.

List: ListView, ListBox, ComboBox, 또는 DropDownList로부터 항목 리스트를 열람합니다.

ListView: ListView를 열람하는 구문은 다음과 같습니다:

ControlGet, OutputVar, List, Options, SysListView321, WinTitle, WinText
선택 | 내려받기

Options 매개변수가 비어 있거나 생략되면, 콘트롤에 있는 모든 텍스트가 열람됩니다. 마지막 행을 제외하고 각 행마다 라인피드 문자로 끝납니다 (`n). 각 행 안에서, 각 필드 (컬럼)은 마지막을 제외하고 탭 문자로 끝납니다 (`t).

Options에 다음 단어들을 지정하십시오. 각 옵션은 다음 옵션과 스페이스 또는 탭으로 구분됩니다:

Selected: 모든 행 말고 선택된 (강조된) 행들만 열람합니다. 아무것도 없으면, OutputVar는 비워집니다.
Focused: 초점 행만 열람합니다. 없으면, OutputVar는 비워집니다.
Col4: 모든 컬럼 말고 네 번째 컬럼(필드)만 열람합니다 (4를 원하는 번호로 교체).
Count: 콘트롤에 있는 전체 행의 개수를 열람합니다.
Count Selected: 선택된 (강조된) 행의 개수를 열람합니다.
Count Focused: 초점 행의번호(위치)를 열람합니다 (없으면 0).
Count Col: 콘트롤에 있는 컬럼의 개수를 열람합니다 (또는 개수를 셀 수 없으면 -1).

주의: 어떤 어플리케이션은 ListView 텍스트를 따로 보관합니다. 그 때문에 텍스트를 열람할 수 없습니다. 이런 경우, ErrorLevel은 보통 0으로 설정됩니다 (성공을 뜻함). 그러나 열람된 필드는 비어 있을 것입니다. 또한 ListView 텍스트 열람은 #MaxMem으로 제한되지 않습니다.

성공하면, ErrorLevel은 0이 설정됩니다. 실패하면 1로 설정되고 OutputVar는 비워집니다. 실패는 다음과 같은 경우 일어납니다:

  1. 목표 창이나 콘트롤이 존재하지 않는다;
  2. 목표 창이 SysListView32 유형이 아니다;
  3. ListView를 소유한 프로세스를 열 수 없다. 아마도 사용자가 권한이 없거나 잠겨 있기 때문일 것이다;
  4. ColN 옵션에 존재하지 않는 컬럼을 지정했다.

ListView로부터 개별적으로 행과 필드를 추출하려면, 다음 예제와 같이 파싱 회돌이를 사용하십시오:

ControlGet, List, List, Selected, SysListView321, WinTitle
Loop, Parse, List, `n  ; 행은 라인피드로 구분됩니다 (`n).
{
    RowNumber := A_Index
    Loop, Parse, A_LoopField, %A_Tab%  ; 각 행의 필드 (컬럼)은 탭으로 구분됩니다 (A_Tab).
        MsgBox Row #%RowNumber% Col #%A_Index% is %A_LoopField%.
}
선택 | 내려받기

관련하여 말씀 드리자면, ListView의 컬럼은 SendMessage를 통하여 크기를 변경할 수 있습니다. 다음 예제에 보여줍니다:

SendMessage, 4126, 0, 80, SysListView321, WinTitle  ; 4126은 메시지 LVM_SETCOLUMNWIDTH입니다.
; 위에서, 0은 첫 컬럼을 나타냅니다 (1은 두 번째, 2는 세 번째, 등등.)  또한, 80은 새 너비입니다.
; 80을 -1로 바꾸면 컬럼의 크기가 자동으로 조절됩니다. -2로 교체하면 헤더 텍스트 너비까지 고려하여 크기를 조절해 줍니다.
선택 | 내려받기

ListBox, ComboBox, DropDownList: 콘트롤로부터 모든 텍스트가 열람됩니다 (즉, 위의CountSelected같은 ListView 옵션은 지원하지 않습니다).

각 행은 마지막을 제외하고 라인피드로 끝납니다 (`n). 항목에 개별적으로 접근하려면, 다음 예제와 같이 파싱 회돌이를 사용하십시오:

ControlGet, List, List,, ComboBox1, WinTitle
Loop, Parse, List, `n
    MsgBox Item number %A_Index% is %A_LoopField%.
선택 | 내려받기

Checked: 체크박스나 라디오 버튼이 체크되어 있으면 OutputVar에 1을 설정합니다. 그렇지 않으면 0을 설정합니다.

Enabled: Control이 활성화되어 있으면 OutputVar에 1을 설정합니다. 그렇지 않으면 0을 설정합니다.

Visible: Control이 보이면 OutputVar에 1을 설공하고, 숨어 있으면 0을 설정합니다.

Tab: OutputVar에 SysTabControl32 콘트롤의 탭 번호를 설정합니다. 첫 탭은 1, 두 번째 탭은 2입니다, 등등. 대신에 얼마나 많은 탭(페이지)가 탭 콘트롤에 있는지 알아 보려면, 다음 예제를 따르십시오:

SendMessage, 0x1304,,, SysTabControl321, WinTitle  ; 0x1304는 TCM_GETITEMCOUNT입니다.
TabCount = %ErrorLevel%
선택 | 내려받기

FindString, String: ListBox 또는 ComboBox에서 String에 정확하게 일치한 엔트리의 갯수를 OutputVar에 설정합니다. 콘트롤의 첫 엔트리는 1이고, 두 번째 엔트리는 2입니다, 등등. 일치가 없으면, OutputVar는 비워지고 ErrorLevel은 1로 설정됩니다.

Choice: ListBox 또는 ComboBoxSet에서 현재 선택된 엔트리의 이름을 OutputVar에 설정합니다. 대신에 선택된 항목의 위치를 열람하려면, 다음 예제를 따르십시오 (앞의 두 줄만 사용합니다):

SendMessage, 0x188, 0, 0, ListBox1, WinTitle  ; 0x188은 LB_GETCURSEL입니다 (ListBox).
SendMessage, 0x147, 0, 0, ComboBox1, WinTitle  ; 0x147은 CB_GETCURSEL입니다 (DropDownList 또는 ComboBox).
ChoicePos = %ErrorLevel%  ; 항목이 선택되어 있지 않으면 -1이 설정됩니다.
ChoicePos += 1  ; 0-기반에서 1-기반으로 변환합니다. 그래서 첫 항목은 0이 아니라, 1입니다.
선택 | 내려받기

LineCount: Edit 콘트롤의 줄의 개수를 OutputVar에 설정합니다. 모든 Edit 콘트롤은 콘트롤이 비어 있을지라도 적어도 1 줄이 있습니다.

CurrentLine: Edit 콘트롤에서 현재 캐럿이 있는 (삽입 지점) 줄의 번호를 OutputVar에 설정합니다. 첫 줄은 1입니다. 콘트롤에 선택된 텍스트가 있다면, 선택이 시작하는 곳의 줄 번호를 OutputVar에 설정합니다.

CurrentCol: Edit 콘트롤에서 현재 캐럿이 있는 (텍스트 삽입 지점) 열 번호를 OutputVar에 설정합니다. 첫 열은 1입니다. 선택된 텍스트가 콘트롤에 있다면, OutputVar에 선택이 시작되는 곳의 열 번호가 설정됩니다.

Line, N: Edit 콘트롤에서 N 번 줄의 텍스트를 OutputVar에 설정합니다. Line 1은 첫 줄입니다. 콘트롤의 특성에 따라, OutputVar는 캐리지 리턴 (`r) 또는 캐리지 리턴 + 라인피드 (`r`n)로 끝날 수 있습니다. 지정된 줄 번호가 비어 있거나 존재하지 않으면, ErrorLevel 에 1이 설정되고 OutputVar는 비워집니다.

Selected: Edit 콘트롤에서 선택된 텍스트를 OutputVar에 설정합니다. 아무 텍스트도 선택되어 있지 않으면, OutputVar는 비워지고 ErrorLevel에는 0이 설정됩니다 (즉, 에러 없음). 어떤 유형의 콘트롤은 RichEdit20A와 같이 어떤 경우 올바르게 텍스트를 생산하지 않을 수 있습니다 (예, Metapad).

Style: 콘트롤의 스타일을 나타내는 8-자리 십육진 수를 열람합니다. 스타일 목록은 스타일 테이블을 참조하십시오.

ExStyle: 콘트롤의 확장 스타일을 나타내는 8-자리 십육진 수를 열람합니다.

Hwnd [v1.0.43.06+]: 지정된 콘트롤의 창 핸들(HWND)을 열람합니다: ControlGet, OutputVar, Hwnd,, Edit1, WinTitle. 콘트롤의 HWND는 PostMessage, SendMessage, 그리고 DllCall에 자주 사용됩니다. 관련하여 말씀 드리자면, 콘트롤의 HWND는 MouseGetPos를 통해서 열람할 수도 있습니다. 마지막으로, 콘트롤의 HWND를 ahk_id WinTitle로 직접적으로 사용할 수 있습니다 (이것은 숨은 콘트롤에도 작동합니다. DetectHiddenWindows가 꺼져 있어도 상관없습니다).

ErrorLevel

[v1.1.04+] 이 명령어는 실패시 예외를 던질 수 있습니다. 더 자세한 정보는 실행시간 에러를 참조하십시오.

성공하면, ErrorLevel은 0이 설정됩니다. 문제가 발생하면 -- 존재하지 않는 창이나 콘트롤 같은 경우 -- ErrorLevel은 1이 설정되고 OutputVar는 비워집니다.

논평

콘트롤을 변경하는 명령어와 다르게, ControlGet은 자동 지연이 없습니다; 즉, SetControlDelay에 영향을 받지 않습니다.

현재 마우스가 떠 있는 콘트롤의 ClassNN 또는 HWND를 알아내려면, MouseGetPos를 사용하십시오. 창의 콘트롤 목록을 얻으려면, WinGet ControlList를 사용하십시오.

창 제목과 텍스트는 대소문자를 구별합니다. 숨은 창은 DetectHiddenWindows가 켜져 있어야 탐지됩니다.

관련 항목

Control, GuiControlGet, ControlMove, ControlGetText, ControlSetText, ControlGetPos, ControlClick, ControlFocus, ControlSend, WinGet

예제

ControlGet, OutputVar, Line, 1, Edit1, Some Window Title

ControlGet, WhichTab, Tab, , SysTabControl321, Some Window Title
if ErrorLevel
    MsgBox There was a problem.
else
    MsgBox Tab #%WhichTab% is active.
선택 | 내려받기