바람이 머문 언덕
mouse_event() 함수와 마우스 관련 함수 본문
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);
}
}
}