⚠ 이 강좌는 오토핫키 v2를 다룹니다
지금 보시는 강좌는 과거 오랜 시간동안 알려진 오토핫키(v1.1)의 차세대 버전인 오토핫키 v2를 다루고 있습니다.
만약 구버전인 '오토핫키 v1.1'의 강좌를 찾으신다면 프날 오토핫키 강좌(https://pnal.kr)를 봐주시면 되지만,
새로 오토핫키를 배우신다면 v2 버전을 배우시는 것을 강력히 추천드립니다.
47. 창의 구성 알기
마지막 수정일: 2023-12-17
지금까지는 MouseClick
과 Send
의 조합으로 키보드/마우스 입력을 구현하였습니다.
그러나 이럴 경우, 자동화 프로그램을 실행하면서 그 컴퓨터를 정상적으로 사용하긴 힘들 것입니다.
컴퓨터 이용 중에 키보드와 마우스 입력이 저절로 될 테니까요.
그래서 앞으로 우리는 컨트롤 함수를 배울 것입니다.
활성 창에 대한 개념을 배웠었죠? 컨트롤 함수를 이용하면 활성되지 않은 창에도 키보드/마우스 입력을 구현할 수 있습니다.
굉장히 많은 컨트롤 함수가 있지만, 우리는 흔히 비활성 입력 함수로 불리는 ControlClick
, ControlSend
와 알아두면 좋은 ControlSetText
를 배울 것입니다.
컨트롤 함수는 실제 키보드 입력이나 마우스 커서의 동작을 재현 하지 않습니다. 단지, 입력을 전송할 창에 '입력 신호'를 보내어, 마치 실제로 입력한 것과 같은 효과를 줄 수 있습니다. 입력을 전송하고자 하는 창이 비활성 상태에 있는 채로 '그 창에만' 클릭이나 키 입력을 할 수 있는 것입니다. 따라서 자동화 작업 중에도 여러분의 컴퓨터 이용에는 큰 지장이 없습니다.
이를 잘 이해하기 위해선 '창'의 구조에 대해서 알아야합니다.
창의 구조
우리가 사용하는 Windows 운영체제는 GUI(Graphic User Interface) 기반이자, 멀티 태스킹을 지원합니다. 어렵게 생각하지 마세요. 여러 창을 동시에 띄워두고 컴퓨터 이용을 할 수 있다는 것입니다.
우리가 직접 실행하는 프로그램은 흔히 '창'을 가졌고, 그 창이 화면에 나타나기 때문에 마우스로 클릭을 하여 여러 동작을 할 수 있습니다.
![제목 표시줄과 버튼, 선택 상자, 이미지 등이 있는 창의 모습](/static/image/47-1.png)
창에는 아래와 같이 '제목'과 '내용'이 있고, 가장 중요한 '컨트롤'이라는 개념이 있습니다.
- 제목(Title): 창의 제목. 제목 표시줄이 있다면 그곳에 표시됨.
- 내용(Text): 창이 가지고 있는 내용.
- 컨트롤(Control): 창이 가지고 있는, 사용자의 입력을 받거나 글자를 보여주는 등 상호작용을 하는 요소
여러 창이 있지만, 제목과 내용으로 창을 구분지을 수 있습니다. "ABC라는 제목을 가진 창", "Needle이라는 내용을 가진 창"처럼 말입니다. 혹은 둘 모두 쓸 수 있죠. "ABC라는 제목을 가졌으며 Needle이라는 내용을 가진 창"처럼요.
컨트롤
아래와 같이 창을 이루는 눈에 보이는 요소 하나 하나가 모두 컨트롤입니다. 컨트롤은 아래와 같이 여러 종류와 모양으로 존재합니다.
![버튼, 선택 상자, 리스트 박스에 각각의 명칭이 적혀있고, 버튼 컨트롤은 2개가 있는 모습](/static/image/47-2.png)
그런데 사진에서 '버튼'처럼 같은 종류의 컨트롤이 보입니다. 이들을 구분하기 위해 컨트롤이 가지고 있는 고유의 이름인 ClassNN을 이용할 수 있습니다.
각 컨트롤은 ClassNN이라는 고유한 별칭을 가지고 있습니다. 따라서 프로그램을 작성할 때 ClassNN을 이용하면 여러 컨트롤 중 하나를 명확히 지정해줄 수 있습니다. "Button1을 클릭해줘", "Edit3에 글씨를 써줘"와 같이 말입니다.
또, 컨트롤 또한 내용을 가지고 있습니다. 컨트롤이 가지고 있는 글 내용으로도 여러 컨트롤을 구분할 수 있습니다. "Note 라는 내용을 가진 컨트롤" 처럼 말입니다. 이렇게 하면 같은 종류의 컨트롤이라도 구분지어 지정해줄 수 있습니다.
![](/static/image/47-3.png)
창과 컨트롤 정보 알아오기
창과 컨트롤 정보 역시 Window Spy를 통해 알아올 수 있습니다. 알고자 하는 창과 컨트롤 위에 마우스 커서를 올리면, 아래와 같이 창의 제목은 맨 위에, 컨트롤 정보는 중간부분에 표시됩니다.
![박스 안에 *제목 없음-메모장 이라고 적혀있고, Control Under Mouse Position 박스 안엔 ClassNN과 Text가 적혀있고 그 옆에 컨트롤의 ClassNN과 내용이 Edit 1, Test Text 라고 적혀있다.](/static/image/47-4.png)
창의 내용은 더 밑에 표시됩니다.
![Visible Text 문구 밑에 UiRibbonDockTop, Ribbon이라고 적혀있는 상자의 모습](/static/image/47-5.png)
위의 경우에선 아래와 같이 각각의 정보를 알아올 수 있죠.
- 창의 제목: *제목 없음 - Windows 메모장
- 창의 내용: UIRibbonDockTop, Ribbon, ...
- 컨트롤의 ClassNN: Edit1
- 컨트롤의 내용: Test text :)
일단 이정도로만 알아두고 본격적으로 컨트롤 함수를 배워봅시다.