27 - [오토핫키] 비활성 PostMessage
27 - [오토핫키] 비활성 PostMessage
컴퓨터는 모든 행동에 대해 끊임없이 Post(편지)를 주고받습니다. 예를들어 우리가 A를 누르는 행동이 A에 해당하는 키값을 담고있는 Post를 운영체재로 건내줍니다. 운영체재는 다시 활성화 되어있는 창에 Post를 보내어 A라는 문자자를 띄워주며 A라는 문자를 띄웠다는 완료(SendMessage) Post를 다시 운영체재로 보냅니다. 자세하게 알고 싶으면 Windows API라는 부분을 공부하면 됩니다. 어쨌든 PostMessage는 운영체재가 활성창에 보내는 Post를 강제로 뜯어 고쳐 원하는 창에 보내도록 하는 것입니다. 대부분의 비활성 작업은 ControlSend와 ControlClick을 활용하면 해결 되기 때문에 저는 전혀 사용하지 않지만 간혹 Control계열의 명령어가 안되는 경우도 있기 때문에 PostMessage라는것이 있다는 정도만 알고 있어도 괜찮습니다. |
|
|
문법
PostMessage, Msg [, wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText] |
설명
Msg전송할 메시지 번호를 입력합니다. 표현식 가능 28 - [오토핫키] PostMessage 메시지 목록 참조 |
wParam메시지의 첫 번째 구성요소. 표현식 가능 |
lParam메시지의 두 번째 구성요소. 표현식 가능 |
ControlClassNN (콘트롤 클래스이름과 번호) "스파이"를 통해 알 수 있습니다. |
WinTitle창의 제목이나 클래스 등 창을 나타내는 기준. 22 - [오토핫키] WinTitle 종류 참조 |
WinText창의 텍스트 부분 |
ExcludeTitle제외할 타이틀 |
ExcludeText제외할 텍스트 |
Msg 키값
키보드 누르기 |
0x100 |
키보드 떼기 |
0x101 |
마우스 이동 |
0x200 |
마우스 좌 누르기 |
0x201 |
마우스 좌 떼기 |
0x202 |
마우스 좌 더블클릭 |
0x203 |
미우스 우 누르기 |
0x204 |
마우스 우 떼기 |
0x205 |
마우스 우 더블클릭 |
0x206 |
wParam / lParam 값
|
키보드에 관한 wParam과 lParam은 위의
프로그램으로 알 수 있습니다.
마우스는 wParam에 0 (Up, Move) 혹은
1 (Down) 이 들어가며 lParam은 변수화
시킨 마우스의 좌표값이 들어갑니다.
* Pos := (A*65536)+B
* Pos := B|A<<16
이렇게 두가지 방법이 있으며 A = Y 좌표
B = X 좌표를 입력합니다.
일반적으로 Relative 좌표 값을 사용 했지만
PostMessage는 클래스 값도 반영을 해야
하기 때문에 이미지에 표시 되어있는 값을
빼줘야 정확한 좌표를 클릭 합니다.
여기서는 76-58=18 / 227-211=16 으로
Pos := 18|16<<16 이렇게 작성 해야합니다. |
|
ClassNN은 "스파이"로 알 수 있습니다.
Control Under Mouse Position:
부분을 보면 ClassNN: 이라고 되어있는
부분이 콘트롤 클래스 이름입니다.
여기서는 "Internet Explorer_Server1"이
콘트롤 클래스 겠네요. |
예제
예제1)Pos := 18|16<<16 F1:: PostMessage, 0x201, 1, %Pos%, Button10 , 계산기 PostMessage, 0x202, 0, %Pos%, Button10 , 계산기 PostMessage, 0x201, 1, %Pos%, Button10 , 계산기 PostMessage, 0x202, 0, %Pos%, Button10 , 계산기 PostMessage, 0x201, 1, %Pos%, Button22 , 계산기 PostMessage, 0x202, 0, %Pos%, Button22 , 계산기 PostMessage, 0x201, 1, %Pos%, Button9 , 계산기 PostMessage, 0x202, 0, %Pos%, Button9 , 계산기 PostMessage, 0x201, 1, %Pos%, Button5 , 계산기 PostMessage, 0x202, 0, %Pos%, Button5 , 계산기 PostMessage, 0x201, 1, %Pos%, Button28 , 계산기 PostMessage, 0x202, 0, %Pos%, Button28 , 계산기 Return |
예제2)F1:: PostMessage, 0x100, 83, 2031617, Edit1 , 제목 없음 - 메모장 PostMessage, 0x101, 83, 2031617, Edit1 , 제목 없음 - 메모장 PostMessage, 0x100, 69, 1179649, Edit1 , 제목 없음 - 메모장 PostMessage, 0x101, 69, 1179649, Edit1 , 제목 없음 - 메모장 PostMessage, 0x100, 67, 3014657, Edit1 , 제목 없음 - 메모장 PostMessage, 0x101, 67, 3014657, Edit1 , 제목 없음 - 메모장 PostMessage, 0x100, 82, 1245185, Edit1 , 제목 없음 - 메모장 PostMessage, 0x101, 82, 1245185, Edit1 , 제목 없음 - 메모장 PostMessage, 0x100, 69, 1179649, Edit1 , 제목 없음 - 메모장 PostMessage, 0x101, 69, 1179649, Edit1 , 제목 없음 - 메모장 PostMessage, 0x100, 84, 1310721, Edit1 , 제목 없음 - 메모장 PostMessage, 0x101, 84, 1310721, Edit1 , 제목 없음 - 메모장 PostMessage, 0x100, 71, 2228225, Edit1 , 제목 없음 - 메모장 PostMessage, 0x101, 71, 2228225, Edit1 , 제목 없음 - 메모장 PostMessage, 0x100, 68, 2097153, Edit1 , 제목 없음 - 메모장 PostMessage, 0x101, 68, 2097153, Edit1 , 제목 없음 - 메모장 Return |
* 저는 포스팅의 레이아웃을 통일하기 위해 포스트메시지를 두줄로 나눠 썼지만 한줄로 작성하기 바랍니다.
예제1은 계산기 창의 55-81= 을 누른것과 같습니다. 예제2는 메모장에 secretgd를 입력 합니다. 사실 진정한 비활성은 ControlSend, ControlClick이 아니라 PostMessage이지만 스크립트가 정말 엄청나게 길어지고 보기 불편하기 때문에 저는 사용하지 않아요. |