ControlGet

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

ControlGet, OutputVar, SubCommand , Value, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

매개변수

OutputVar
The name of the output variable in which to store the result of SubCommand.
SubCommand, Value
These are dependent upon each other and their usage is described below.
Control

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

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

WinTitle
목표 창을 식별하는 창 제목 또는 다른 기준. WinTitle 참조.
WinText
존재하면, 이 매개변수는 목표 창 텍스트의 부문자열입니다 (동봉된 Window Spy 유틸리티에 노출됨). 숨은 텍스트는 DetectHiddenText가 켜져 있어야 탐지됩니다.
ExcludeTitle
제목에 이 값이 있는 창은 무시합니다.
ExcludeText
텍스트에 이 값이 있는 창은 무시합니다.

부-명령어

For SubCommand, specify one of the following:

List

ListView, ListBox, ComboBox, 또는 DropDownList로부터 항목 리스트를 열람합니다. For ListView, additional options can be specified.

ControlGet, OutputVar, List , Options, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

ListView

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, SelectedItems, List, Selected, SysListView321, WinTitle
Loop, Parse, SelectedItems, `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, 0x101E, 0, 80, SysListView321, WinTitle  ; 0x101E은 LVM_SETCOLUMNWIDTH입니다.

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

ListBox, ComboBox, DropDownList

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

Each item except the last will be terminated by a linefeed character (`n). 항목에 개별적으로 접근하려면, 다음 예제와 같이 파싱 회돌이를 사용하십시오:

ControlGet, Items, List,, ComboBox1, WinTitle
Loop, Parse, Items, `n
    MsgBox Item number %A_Index% is %A_LoopField%.

Checked

Retrieves 1 if the checkbox or radio button is checked or 0 if not.

ControlGet, OutputVar, Checked ,, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

Enabled

Retrieves 1 if Control is enabled, or 0 if disabled.

ControlGet, OutputVar, Enabled ,, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

Visible

Retrieves 1 if Control is visible, or 0 if hidden.

ControlGet, OutputVar, Visible ,, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

Tab

Retrieves the tab number of a SysTabControl32 control.

ControlGet, OutputVar, Tab ,, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

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

SendMessage, 0x1304,,, SysTabControl321, WinTitle  ; 0x1304는 TCM_GETITEMCOUNT입니다.
TabCount := ErrorLevel

FindString

Retrieves the entry number of a ListBox or ComboBox that is an exact match for String.

ControlGet, OutputVar, FindString, String , Control, WinTitle, WinText, ExcludeTitle, ExcludeText

콘트롤의 첫 엔트리는 1이고, 두 번째 엔트리는 2입니다, 등등. 일치가 없으면, OutputVar는 비워지고 ErrorLevel은 1로 설정됩니다.

Choice

Retrieves the name of the currently selected entry in a ListBox or ComboBox.

ControlGet, OutputVar, Choice ,, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

대신에 선택된 항목의 위치를 열람하려면, 다음 예제를 따르십시오 (앞의 두 줄만 사용합니다):

SendMessage, 0x0188, 0, 0, ListBox1, WinTitle  ; 0x0188은 LB_GETCURSEL입니다 (ListBox).
SendMessage, 0x0147, 0, 0, ComboBox1, WinTitle  ; 0x0147은 CB_GETCURSEL입니다 (DropDownList 또는 ComboBox).
ChoicePos := ErrorLevel<<32>>32  ; Convert UInt to Int to have -1 if there is no item selected.
ChoicePos += 1  ; 0-기반에서 1-기반으로 변환합니다. 그래서 첫 항목은 0이 아니라, 1입니다.

LineCount

Retrieves the number of lines in an Edit control.

ControlGet, OutputVar, LineCount ,, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

모든 Edit 콘트롤은 콘트롤이 비어 있을지라도 적어도 1 줄이 있습니다.

CurrentLine

Retrieves the line number in an Edit control where the caret (insert point) resides.

ControlGet, OutputVar, CurrentLine ,, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

첫 줄은 1입니다. 콘트롤에 선택된 텍스트가 있다면, 선택이 시작하는 곳의 줄 번호를 OutputVar에 설정합니다.

CurrentCol

Retrieves the column number in an Edit control where the caret (text insertion point) resides.

ControlGet, OutputVar, CurrentCol ,, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

첫 열은 1입니다. 선택된 텍스트가 콘트롤에 있다면, OutputVar에 선택이 시작되는 곳의 열 번호가 설정됩니다.

Line

Retrieves the text of line N in an Edit control.

ControlGet, OutputVar, Line, N , Control, WinTitle, WinText, ExcludeTitle, ExcludeText

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

Selected

Retrieves the selected text in an Edit control.

ControlGet, OutputVar, Selected ,, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

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

Style

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

ControlGet, OutputVar, Style ,, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

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

ExStyle

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

ControlGet, OutputVar, ExStyle ,, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

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

Hwnd [v1.0.43.06+]

콘트롤의 창 핸들(HWND)을 열람합니다.

ControlGet, OutputVar, Hwnd ,, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

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

에러 처리

[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

예제

Retrieves the first line of the first Edit control.

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

Retrieves the currently active tab of the first Tab control.

ControlGet, WhichTab, Tab,, SysTabControl321, Some Window Title
if ErrorLevel
    MsgBox There was a problem.
else
    MsgBox Tab #%WhichTab% is active.