ControlID 매개변수
ControlID 매개변수 (창 컨트롤 식별자, Window Control Identifiers)
AutoHotkey 함수에서 창 안의 어떤 컨트롤(control)을 대상으로 할지 식별하는 데 쓰는 ControlID 매개변수와 각 식별자 유형을 설명하는 문서예요.
출처: 문서
본문
목차 (Table of Contents)
- HWND
- ClassNN
- Text
- Omitted (생략)
- Remarks (주의 사항)
- Related (관련 항목)
컨트롤 식별자 (Control Identifiers)
다음 식별자는 우선 순위(descending precedence)가 높은 순서로 나열돼 있어요. 이 세부 사항은 드문 모호함의 경우에 중요해요. 예를 들어, 어떤 창에 두 개의 편집(edit) 컨트롤이 있는데 첫 번째는 "Edit2"라는 텍스트를, 두 번째는 ClassNN이 "Edit2"인 경우 ControlHide "Edit2"를 사용하면 두 번째 컨트롤이 숨겨져요. ClassNN이 더 높은 우선 순위를 가지기 때문이에요.
HWND
유형: Integer 또는 Object
컨트롤의 HWND(창에 대한 핸들(handle to window)을 뜻하는 약어)는 그 컨트롤이 존재하는 한 유일하게 식별해요. HWND를 직접 전달하거나, GuiControl 객체처럼 Hwnd 프로퍼티를 가진 객체로 전달해요. 이것은 DetectHiddenWindows가 꺼져 있을 때에도 숨겨진 컨트롤에서 동작해요. 그 뒤의 어떤 창 매개변수도 무시돼요. 객체를 전달할 때, 객체에 Hwnd 프로퍼티가 없으면 PropertyError가 던져지고, 순수 정수를 반환하지 않으면 TypeError가 던져져요.
컨트롤의 HWND는 ControlGetHwnd, GuiControl.Hwnd, WinGetControlsHwnd, MouseGetPos 및 DllCall을 통해 얻을 수 있어요.
HWND는 PostMessage, SendMessage로 컨트롤에 메시지를 직접 보내거나, DllCall로 네이티브 API를 호출할 때 특히 유용해요. 컨트롤이 동적으로 생성되거나 재정렬될 때에도 유용한데, HWND는 컨트롤의 수명 동안 일정하게 유지되기 때문이에요.
ClassNN
유형: String
컨트롤의 ClassNN은 해당 창 클래스의 이름 뒤에, 그 컨트롤을 포함하는 최상위 창 안에서의 시퀀스 번호(sequence number)가 붙은 것이에요. 시퀀스 번호는 같은 클래스의 컨트롤들 사이에서 그 컨트롤이 만들어진 순서대로의 위치를 반영해요. 예를 들어, Edit1은 창의 첫 번째 편집 컨트롤이고 Button12는 열두 번째 버튼이에요.
일부 클래스 이름에는 컨트롤의 시퀀스 번호가 아닌 숫자가 포함돼요. 예를 들어 SysListView321은 창의 321번째가 아니라 첫 번째 ListView 컨트롤이에요. 시퀀스 번호 없이 클래스 이름을 얻으려면 컨트롤의 HWND를 WinGetClass에 전달해요.
컨트롤의 ClassNN은 Window Spy로 알아낼 수 있고, ControlGetClassNN, WinGetControls, MouseGetPos로 얻을 수 있어요.
시퀀스 번호는 영구적인 식별자가 아니에요. 응용 프로그램이 컨트롤을 다시 만들거나, 순서를 바꾸거나, 동적/가상화된 UI 요소를 사용하면 변경될 수 있어요. 일부 현대 프레임워크(예: WPF나 Electron)는 전통적인 Win32 클래스 이름을 전혀 노출하지 않거나, 여러 무관한 컨트롤에 일반적인 클래스 이름을 재사용할 수 있어요.
ClassNN은 컨트롤에 고유한 텍스트가 없고 컨트롤 순서가 안정적일 때 흔히 편리해요. 안정성을 보장할 수 없을 때는 HWND나 다른 식별자를 고려해요.
Text (텍스트)
유형: String
컨트롤의 텍스트는 식별자로 사용될 수 있어요. 예를 들어 OK 버튼에는 OK를 사용해요. 매칭 동작은 SetTitleMatchMode가 결정해요. 텍스트가 고유하고 안정적일 때 사용해요. 많은 컨트롤은 텍스트를 동적으로 업데이트하거나 의미 있는 텍스트를 노출하지 않아요.
컨트롤의 텍스트는 Window Spy로 알아낼 수 있고, ControlGetText, GuiControl.Text, GuiControl.Value로 얻을 수 있어요.
Omitted (생략)
ControlClick, ControlSend, PostMessage, SendMessage는 컨트롤이나 최상위 창 둘 중 하나에서 동작할 수 있어요. ControlID 매개변수를 생략하면 함수는 그 컨트롤들 중 하나 대신 (WinTitle로 지정된) 대상 창을 사용해요.
주의 사항 (Remarks)
다음 함수들은 ControlID 매개변수를 가져요: ControlAddItem, ControlChooseIndex, ControlChooseString, ControlClick, ControlDeleteItem, ControlFindItem, ControlFocus, ControlGetChecked, ControlGetChoice, ControlGetClassNN, ControlGetEnabled, ControlGetHwnd, ControlGetIndex, ControlGetItems, ControlGetPos, ControlGetStyle, ControlGetText, ControlGetVisible, ControlHide, ControlHideDropDown, ControlMove, ControlSend, ControlSetChecked, ControlSetEnabled, ControlSetStyle, ControlSetText, ControlShow, ControlShowDropDown, EditGetCurrentCol, EditGetCurrentLine, EditGetLine, EditGetLineCount, EditGetSelectedText, EditPaste, ListViewGetContent, PostMessage, SendMessage. 이 함수들 대부분은 해당 페이지에 컨트롤 식별자 사용을 보여주는 예시가 있어요.
ClassNN과 컨트롤 텍스트는 응용 프로그램이 컨트롤을 다시 만들거나, 순서를 바꾸거나, 동적/가상화된 인터페이스를 사용하거나, 안정적인 Win32 클래스 이름이나 텍스트를 노출하지 않는 프레임워크에 의존할 때 변경될 수 있어요. 식별자를 믿을 수 없을 때는 수명 동안 안정적인 주소 지정을 위해 HWND를 선호하거나 여러 기준을 결합해요. 일반적인 지침으로는: 텍스트가 고유하고 안정적일 때 컨트롤 텍스트를, 컨트롤 순서가 일관되고 가독성이 필요할 때 ClassNN을, 최대 안정성이 필요할 때 HWND를 사용해요. 대상 응용 프로그램을 제어하지 않는 한 응용 프로그램 버전 간에 식별자를 하드코딩하지 마세요.
관련 항목 (Related)
WinTitle Parameter & Last Found Window (WinTitle 매개변수와 마지막으로 찾은 창)