2011-03-02 3 views
13

Win32 API를 사용하여 마우스 이벤트를 시뮬레이트하고 싶습니다. 내가 어떻게 해?코드에서 마우스 이벤트를 어떻게 시뮬레이트 할 수 있습니까?

가장 기본적인 수준, 시스템이 이벤트 유형 및 좌표를 갖는 레벨을 시뮬레이트하고 어떤 윈도우로 릴레이해야하는지 알지 못했습니다.

나는 그것이 어떻게 작동하는지 모르겠습니다. 어느 쪽이든, 나는 그것을하는 데 도움이 필요합니다. 나는 운전자 수준에 간섭해야 할 것이냐?!

내 요구 사항을 명확하게하기 위해 어떤 창을 대상으로하고 싶지는 않습니다. 사용자가 마우스를 클릭하거나 이동 한 것으로 생각하면됩니다. 그리고 C로 코딩 할 것입니다.

답변

21

입력 이벤트에 해당하는 INPUT structures 배열을 지정하여 코드에서 움직임과 버튼 클릭을 합성 할 수있는 SendInput function을 찾고 있습니다.

UINT WINAPI SendInput(
    __in UINT nInputs,  // number of structures in the pInputs array 
    __in LPINPUT pInputs, // an array of INPUT structures, representing an event 
    __in int cbSize  // the size, in bytes, of an INPUT structure 
); 

참고 그러나,이 기능이 User Interface Privilege Isolation (UIPI), 대상임을 응용 프로그램은 동일하거나 낮은 무결성 수준에서 실행중인 응용 프로그램에 입력을 주입 할 수 있다는 것을 의미한다.

+0

덕분에 나를 위해 그 문제를 해결 :) – Micka

5

mouse_event (winuser.h)을 사용하십시오. 다음 코드는 마우스를 이동 한 다음 새 위치에서 클릭을 수행합니다. 이 작업은 두 줄로 수행 할 수 있지만 좀 더 자세한 내용입니다.

X 및 Y는 mickeys, 0에서 65535로 지정됩니다. 그러면 현재 해상도로 매핑됩니다. 즉, 0,0이 왼쪽 위 모서리이고 65535,65535가 오른쪽 아래 모퉁이입니다. 내 응용 프로그램의 관리자 권한을 부여 level`은`무결성을 언급 대한

mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, x, y, 0, 0); 
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); 
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); 
+3

을에 따르면 MSDN의 문서 (http://msdn.microsoft.com/en-us/library/ ms646260.aspx), mouse_event가 SendInput에 의해 대체되었습니다. 대신 SendInput을 사용하는 것이 좋습니다. –

관련 문제