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

    메시지의 두 번째 구성요소. 표현식 가능

    Control

    ClassNN (콘트롤 클래스이름과 번호) "스파이"를 통해 알 수 있습니다.

    WinTitle

    창의 제목이나 클래스 등 창을 나타내는 기준. 22 - [오토핫키] WinTitle 종류 참조

    WinText

    창의 텍스트 부분

    ExcludeTitle

    제외할 타이틀

    ExcludeText

    제외할 텍스트

     

     

     

    Msg 키값

    키보드 누르기

    0x100

    키보드 떼기

    0x101

    마우스 이동

    0x200

    마우스 좌 누르기

    0x201

    마우스 좌 떼기

    0x202

    마우스 좌 더블클릭

    0x203

    미우스 우 누르기

    0x204

    마우스 우 떼기

    0x205

    마우스 우 더블클릭

    0x206

     

    wParam / lParam 값

    param.exe

     

     

     

     

    키보드에 관한 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이지만 스크립트가 정말 엄청나게 길어지고 보기 불편하기 때문에 저는 사용하지 않아요.

     

     

     

     

     

     

    Posted by 옹봉이