Windows MouseEvent 처리

연습 2016. 6. 13. 00:00

 마우스를 이동하는 것은 완료되었지만, 마우스를 클릭하는게 불가능하다.


 이걸 처리하기 위해서 검색한 것에서 mouse_event라는 함수등 다양한 방법으로 처리 방법을 설명한 사이트가 있다.


 http://www.dreamincode.net/forums/topic/8138-mouse-event/

 http://www.tipssoft.com/bulletin/board.php?bo_table=old_bbs&wr_id=186


 소스

 

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
#include <windows.h>
 
void ClickMouse(int parm_x, int parm_y, char parm_left_flag) 
  int x_pos = parm_x*65535/GetSystemMetrics(SM_CXSCREEN); 
  int y_pos = parm_y*65535/GetSystemMetrics(SM_CYSCREEN); 
 
  mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, x_pos, y_pos, 
                                            0, GetMessageExtraInfo()); 
  if(parm_left_flag){ 
      mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_ABSOLUTE, 
                              x_pos, y_pos, 0, GetMessageExtraInfo()); 
      mouse_event(MOUSEEVENTF_LEFTUP | MOUSEEVENTF_ABSOLUTE, 
                              x_pos, y_pos, 0, GetMessageExtraInfo()); 
  } else { 
      mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_ABSOLUTE, 
                              x_pos, y_pos, 0, GetMessageExtraInfo()); 
      mouse_event(MOUSEEVENTF_RIGHTUP | MOUSEEVENTF_ABSOLUTE, 
                              x_pos, y_pos, 0, GetMessageExtraInfo()); 
  } 
 
 
int main(int argc, char** argv) {
    
    ClickMouse(1000,1000,1);
    
    return (EXIT_SUCCESS);
}
 
cs


 이렇게 되어 있는 정보에서 mouse_event라는 것이 처리 되는 것을 알 수 있다.


 특히, mouse_event 다음에 매개변수가 정의가 되어 있다.


 void mouse_event( DWORD event, DWORD posX, DWORD posY, DWORD data, ULONG_PTR extra);


 이렇게 되어 있다.


 전에 설명한, 마우스 커서 조절하는 것과 지금과 차이는 다음과 같다.


 SetCursorPos는 절대 위치값만을 처리한다.

 쉽게 말해서 100, 100이라면, 화면의 기준으로 이동하게 된다.


 반면, mouse_event는 MOUSEEVENTF_MOVE만을 사용하면 상대적 위치로 이동시키는 등. 설정을 할 수 있다.(그리고 동시에 적용 할 수 있다.)


 그 외에도 절대위치를 처리하기 위해선, MOUSEEVENTF_ABSOLUTE을 같이 사용해야된다.

 그리고 같이 사용하는 대신에 화면 크기를 short형으로 잡고 작업한다.

 화면 최대치가, short 최대치가 되는 것이다.


 GetSystemMetrics는 모니터의 해상도를 받아들이는 함수이다.


 즉, 절대값을 사용할려면, 비율을 알아야된다는 뜻이된다.


 예을 들어서 화면의 해상도가 x축이 1900이라고 했을때, x값은 65535가 되는 것이다.


 더 자세한 정보는 MSND을 참조하면 될 것 같다.


 참조 : https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms646260(v=vs.85).aspx

'연습' 카테고리의 다른 글

GCC로 Dynamic Library 만들기.  (0) 2016.06.15
GCC로 Static Library 만들기.  (0) 2016.06.14
Windows Local Host IPv4 주소 찾기.  (0) 2016.06.12
마우스 커서 위치 조절하기.  (0) 2016.06.11
GAS로 플로피 BootLoader 만들기.  (0) 2016.06.10
Posted by JunkMam
,