'마우스 커서'에 해당되는 글 2건

  1. 2016.06.13 Windows MouseEvent 처리
  2. 2016.06.11 마우스 커서 위치 조절하기.

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
,

 윈도우에서 마우스 커서 이동시키는 작업이 필요할 것 같아서 구글링을 해보았다.[각주:1][각주:2][각주:3][각주:4]


 먼저 알아야 되는 구조체는 다음과 같다.


 typedef struct tagPOINT {

   LONG x;

   LONG y;

 } POINT, *LPPOINT;


 이것은 position의 점을 정의 내리는 것으로 2차원 평면에서의 독립 변수 x, y를 가지는 구조체이다.

 마우스 커서 위치 또한 평면 위에 존재하는 것이기 때문에, POINT라는 값을 가진다.


 원본 함수.

 BOOL WINAPI GetCursorPos(

   _Out_ LPPOINT lpPoint

 );


 _Out_LPPPOINT라는 것은 POINT를 변수로 가지는 point 구조체 매개변수이다.

 여기에 값을 LPPOINT라는 걸로 가지기 때문에, POINT로 값을 가지고 올 수 있다.


 마우스 커서의 위치를 이동을 하도록 만드는 방법이 있다.


 마우스의 위치를 자동으로 할 수 있다.


 원본 함수.

 BOOL WINAPI SetCursorPos(

   _In_ int X,

   _In_ int Y

 );


 이것들은 전부다 정의한 것으로

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
#include <stdio.h>
 
#include <conio.h>
 
#include <windows.h>
 
int main()
{
    POINT p;
    
    printf("마우스 위치를 100, 100으로 이동시킵니다.\n");
    
    SetCursorPos(100,100);
    
    do{
        GetCursorPos(&p);
        printf("마우스 위치 (x, y) : (%d, %d)\n",p.x, p.y);
        if(kbhit())
        {
            break;
        }
    }while(1);
    
    return 0;
}
cs


 이런 소스를 만들면, 100, 100으로 이동한 후에 현재 마우스 위치를 파악할 수 있게 된다.

  1. http://breadlab.net/165 (2016-06-06) [본문으로]
  2. https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms648394(v=vs.85).aspx (2016-06-06) [본문으로]
  3. https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms648390(v=vs.85).aspx (2016-06-06) [본문으로]
  4. https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms648383(v=vs.85).aspx (2016-06-06) [본문으로]
Posted by JunkMam
,