티스토리 뷰

728x90

1. 개요

 특정 데이터를 생성해주는 프로그램에 옵션을 자동으로 넣어 데이터를 저장시키는 프로그램을 작성해 보았습니다. windows API인 HWND를 사용하였으며 Handler을 이용하여 특정 행위를 반복하는 메크로 프로그램을 구현하였습니다.


우선 제가 구현한 프로그램의 최종 소스코드(GNacaLt_Macro.cpp)와 실행 영상입니다.



 반복 순서를 자세하게 설명하면 우선 반복 행위를 할 프로그램을 실행시킵니다.


 생성시킬 Data Type의 버튼을 클릭합니다.


 생성시킬 Data의 옵션 값을 입력합니다.


생성할 데이터가 저장될 위치와 이름을 설정하고 저장합니다.


이후 2번과 3번을 모든 옵션값에 대하여 반복 수행합니다.




2. 주요 소스 코드 설명

 코드를 설명하기 전 프로그램 GUI에서 각 버튼과 Editext의 핸들 값을 보는 방법입니다. HWND는 각 위젯의 핸들값을 가져와 해당 핸들러로서 제어를 합니다. 그래서 함수 파라메터로 들어가는 핸들러 값과 실제 위젯의 핸들값이 같은지 확인하셔야합니다. 저 같은 경우에는 Visual Studio에서 제공하고 있는 Spy++을 이용하였습니다.


 첫 번째는 프로그램 창에 대한 핸들러를 가져오는 FindWindow함수입니다.파라메터로 ClassName 또는 Winodw창의 이름을 넣으시면 됩니다.

HWND WINAPI FindWindow(
  _In_opt_ LPCTSTR lpClassName,
  _In_opt_ LPCTSTR lpWindowName
);

가져오실 프로그램 창의 이름과 Spy++에서 캡션이 같은 것을 확인하실 수 있습니다. 찾기 도구(Ctrl+F)에서 드레그로 쉽게 확인하실 수 있습니다.



 두 번째는 프로그램 창에 있는 위젯에 대한 핸들러를 가져오는 FindWindowEx 함수입니다.

HWND WINAPI FindWindowEx(
  _In_opt_ HWND    hwndParent,
  _In_opt_ HWND    hwndChildAfter,
  _In_opt_ LPCTSTR lpszClass,
  _In_opt_ LPCTSTR lpszWindow
);
 해당 함수를 사용하면서 가장 중요한 것이 코드로 받아온 핸들 값과 Spy++에서 표시하는 핸들값이 같아야합니다.


 세 번째는 버튼 클릭에 대한 함수입니다. 핸들에 메세지를 보내어 버튼에 저장되어 있는 명령을 수행시키는데 명령의 종류에 따라 보내는 메세지의 형태가 다릅니다. 
 
BOOL WINAPI PostMessage(
  _In_opt_ HWND   hWnd,
  _In_     UINT   Msg,
  _In_     WPARAM wParam,
  _In_     LPARAM lParam
);
  
LRESULT WINAPI SendMessage(
  _In_ HWND   hWnd,
  _In_ UINT   Msg,
  _In_ WPARAM wParam,
  _In_ LPARAM lParam
);
 두 함수의 차이점은 메세지로 인한 수행된 함수의 리턴을 보고 끝낼 함수를 끝낼 것인지 입니다. 만약 팝업창을 띠우는 버튼은 SendMessage로 눌렀다면 팝업 창이 꺼질 때까지 다음 코드로 넘어가지 않습니다. 주의하시기 바랍니다.


네 번째는 EditText에 글을 쓰고 지우는 함수입니다. 특수 키를 입력할때에는 pressKeyboard함수를 사용하였으며 일반 ASCII 코드의 단어를 입력할 땐 SendMessage함수를 사용하였습니다. 또한 EditText내 문자를 지우기 위해 Home키와 Delete키를 이용하였습니다. 


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함