바람이 머문 언덕

mouse_event() 함수와 마우스 관련 함수 본문

컴퓨터 IT/C++ 언어

mouse_event() 함수와 마우스 관련 함수

알 수 없는 사용자 2009. 11. 27. 21:50
반응형

mouse_event 함수는 특정 윈도우가 아닌 활성화 된 윈도우로 이벤트 메세지를 보내는 저 레벨 함수 입니다.

메시지

생성 이벤트

MOUSEEVENTF_MOVE

마우스 이동

MOUSEEVENTF_LEFTDOWN

마우스 왼쪽 버턴 DOWN

MOUSEEVENTF_LEFTUP

마우스 왼쪽 버턴 UP

MOUSEEVENTF_RIGHTDOWN

마우스 오른쪽 버턴 DOWN

MOUSEEVENTF_RIGHTUP

마우스 왼쪽 버턴 UP

MOUSEEVENTF_MIDDLEDOWN

마우스 가운데 버턴 DOWN

MOUSEEVENTF_MIDDLEDOUP

마우스 가운데 버턴 UP

MOUSEEVENTF_WHEEL

마우스 휠 움직임


마우스 이벤트 사용 예 입니다.

mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, x_pos,
  y_pos, 0, GetMessageExtraInfo()); // 마우스 이동 이벤트를 발생 시킴니다.

mouse_event(MOUSEEVENTF_WHEEL, 0, 0, pos, 0);                                              
// 마우스 휠을 pos만큼 움직였다고 이벤트를 발생시킴니다.

특정 윈도우가 아니 윈도우 전체 화면의 좌표를 가져 옴니다.
SetCursorPos( x, y) ;               // 마우스 커서를  x, y 좌표로 이동 시키다.
CPoint pt; GetCursorPos(&pt);   // 마우스 커서의 좌표를 pt로 얻어 온다.

예) 자동으로 윈도우 중앙에서부터 나선형으로 돌아가면서 마우스 버턴을 누르는 함수를  입니다.


        void mouseMove(int ic)
{
    int i, ix, iy,  k , p, x, y, im;                        
    RECT delta; 
    HWND hwnd = NULL;
    hwnd= ::FindWindow(NULL, L"Test Window");  // 윈도우 핸들을 구한다
    ix = 0;
    iy = 0;
   GetWindowRect(hwnd, &delta);          // 윈도우 좌표를 구한다
    // POINT pt; GetCursorPos(&pt) ;     // 마우스 포인트를 구한다
    x = (delta.right + delta.left)/2;            // 윈도우 중간을 구한다.
    y = (delta.bottom + delta.top)/2;
    im = (x > y) ? x: y;
    im /= ic;
// if(im <= 0) return;
    SetCursorPos(x, y) ;                  // 마우스 포인트를 지정한 위치에 놓는다
    for(k = im, i = 1; i < ic; i++)
   {
        p = k * i + x;
        for( p = 0; p < i; x += k, p++)
       {
// if(x <= delta.left || delta.right) break;
           SetCursorPos(x, y) ;
           mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, GetMessageExtraInfo()); // 누르고 
           Sleep(100);
           mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, GetMessageExtraInfo()); // 때고..
           Sleep(100);                     // 100ms 시간 지연
      }
      k = k * ( -1);
      p = k * i * y;
      for( p =0; p < i; y += k, p++)
      {
// if(y < delta.top || y > delta.bottom) break;
          SetCursorPos(x, y);
           mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, GetMessageExtraInfo()); // 누르고  
           Sleep(100);
           mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, GetMessageExtraInfo()); // 때고..
           Sleep(100);                     
      }
   }
}