본문 바로가기
프로그래밍˙알고리즘/C#ㆍXamarin

[C# Windows 프로그래밍] PostMessage로 계좌입출금 확인을 해보자! [2강] (카카오뱅크 입출금 확인하기)

by 승주니 2020. 4. 21.
반응형

안녕하세요

PostMessages 1강에 이어 2강을 시작하겠습니다.

 

Spy++를 먼저 실행시킵니다.

카카오톡에 마우스를 갖다대면 Spy++ Messages에 행동 하나하나

Wparam, lParam 값으로 출력됩니다.

 

먼저 좌표에 관한 Wparam, lParam을 찾아보겠습니다.

 

원하는 좌표에 마우스 좌클릭을 해서 LBUTTONUP Keys:0000 xPos:149 yPos:192 를 출력받았습니다.

우리가 원하는 값은 xypos 가 아닌 Wparam,lParam 이기때문에 저상태에서 우클릭 - 속성을 들어가줍시다.

 

wParam : 00000000 , lParam : 008C00CD 두 값을 찾았으니 대입을 해줍니다.

 

PostMessage(0033059A, 0x0201, 00000000, 00BC00CD);
PostMessage(0033059A, 0x0202, 00000000, 00BC00CD);

이렇게만 실행하면, 제가 정한 좌표에 마우스 좌클릭 1회를 하고 종료합니다.

 

PostMessage(0033059A, 0x0201, 00000000, 00BC00CD);
PostMessage(0033059A, 0x0202, 00000000, 00BC00CD);
PostMessage(0033059A, 0x0204, 00000000, 00BC00CD);
PostMessage(0033059A, 0x0205, 00000000, 00BC00CD);

우클릭까지 추가하였습니다.

 

PostMessage(new IntPtr(0033059A), 0x0201, IntPtr.Zero, new IntPtr(00BC00CD));
PostMessage(new IntPtr(0033059A), 0x0202, IntPtr.Zero, new IntPtr(00BC00CD));
PostMessage(new IntPtr(0033059A), 0x0204, IntPtr.Zero, new IntPtr(00BC00CD));
PostMessage(new IntPtr(0033059A), 0x0205, IntPtr.Zero, new IntPtr(00BC00CD));

IntPtr이라는 구조체로 값들을 묶어줍니다.

(C#의 포인터나 핸들은 IntPtr로 받습니다.)

이렇게만 빌드를 할 경우에는 구문오류가 뜰겁니다.

그 이유는 IntPtr은 정수의 값만 받을 수 있기 때문입니다.

 

PostMessage(new IntPtr(Convert.ToInt64("0033059A", 16)), 0x0201, IntPtr.Zero, new IntPtr(Convert.ToInt64("00BC00CD", 16)));
PostMessage(new IntPtr(Convert.ToInt64("0033059A", 16)), 0x0202, IntPtr.Zero, new IntPtr(Convert.ToInt64("00BC00CD", 16)));
PostMessage(new IntPtr(Convert.ToInt64("0033059A", 16)), 0x0204, IntPtr.Zero, new IntPtr(Convert.ToInt64("00BC00CD", 16)));
PostMessage(new IntPtr(Convert.ToInt64("0033059A", 16)), 0x0205, IntPtr.Zero, new IntPtr(Convert.ToInt64("00BC00CD", 16)));

Conver.ToInt64("Value", "진법")

 

16진수의 값을 10진수로 변환하는 코드를 추가해줍니다.

 

 

이제 마지막으로 복사버튼의 값을 구해봅시다.

 

우클릭 - 복사를 누르고 Spy++ Messages 변화를 확인합니다.

 

이 값이 바로 복사버튼을 눌렀을때의 값입니다

message : 0x07E9 , Wparam : 00000064 lParam : 00000000 이네요.

 

PostMessage(new IntPtr(Convert.ToInt64("0033059A", 16)), 0x0201, IntPtr.Zero, new IntPtr(Convert.ToInt64("00BC00CD", 16)));
PostMessage(new IntPtr(Convert.ToInt64("0033059A", 16)), 0x0202, IntPtr.Zero, new IntPtr(Convert.ToInt64("00BC00CD", 16)));
PostMessage(new IntPtr(Convert.ToInt64("0033059A", 16)), 0x0204, IntPtr.Zero, new IntPtr(Convert.ToInt64("00BC00CD", 16)));
PostMessage(new IntPtr(Convert.ToInt64("0033059A", 16)), 0x0205, IntPtr.Zero, new IntPtr(Convert.ToInt64("00BC00CD", 16)));
//내용 복사 코드
PostMessage(new IntPtr(Convert.ToInt64("0033059A", 16)), 0x07E9, IntPtr.Zero, new IntPtr(Convert.ToInt64("64", 16)));

 그대로 작성해주었습니다. 이제 복사된 내용(Clipboard)의 문자열을 받아오는 작업을 하겠습니다.

 

string result = Clipboard.GetText();
MessageBox.Show(result);

string 문자열 result에 클립보드의 텍스트값을 저장시키고,

MessageBox 출력시킨다.

 

결과값은 이렇습니다. 이를 이용해서 Mysql 회원관리 프로그램 등 용이하게 쓰일순 있지만,

그저 PostMessage를 쉽게 설명한 글로 봐주세요!

 

감사합니다~

 

 

 

반응형

댓글