2017-04-22 1 views
0

마우스 클릭을 시뮬레이트하기 위해 다음과 같이 C++ 스 니펫을 작성했습니다.SendInput이 연속적으로 작동하지 않습니다.

INPUT mouseData[2]; 
ZeroMemory(mouseData, sizeof(mouseData)); 

mouseData[0].type = INPUT_MOUSE; 
mouseData[0].mi.dx = xx; 
mouseData[0].mi.dy = yy; 
mouseData[0].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP; 
mouseData[0].mi.mouseData = 0; 
mouseData[0].mi.time = 0; 

mouseData[1].type = INPUT_MOUSE; 
mouseData[1].mi.dx = 10; 
mouseData[1].mi.dy = 10; 
mouseData[1].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP; 
mouseData[1].mi.mouseData = 0; 
mouseData[1].mi.time = 0; 

SendInput(1, &mouseData[0], sizeof(INPUT)); 
Sleep(30); 
SendInput(1, &mouseData[1], sizeof(INPUT)); 

하지만 제대로 작동하지 않습니다. 이전 SendInput이 작동하지만 후자의 SendInput이 작동하지 않습니다. 왜?

또 다른 : 나는 마우스

  1. 호출 SendInput을가
  2. 화면의 어떤 위치에 수동으로 마우스를 차례로 클릭 한 다음과 같은 SendInput을 시도했습니다.
  3. 호출은 위가 잘 작동

을 SendInput을. 하지만 2가 없으면 작동하지 않습니다. 왜?

+0

이것은 마우스 알림을받는 프로그램에 혼란을 야기 할 수 있습니다. 동시에 모든 것을하지 말고, 먼저 움직이고, 아래로, 그리고 나서 위로 움직이십시오. –

+0

이러한 이벤트를 원자 적으로 처리 할 수 ​​있도록 배열에 넣습니다. 한 번에 하나씩 보내지 마십시오. 모든 이벤트와 함께 SendInput을 한 번 호출합니다. 그리고 각각의 행동에 대해 하나의 이벤트가 필요합니다. 설명서를 읽으십시오. –

+0

잘못된 플래그를 설정하고 있습니다. 왼쪽 아래 및 왼쪽 위로 플래그를 단일 입력으로 보낼 수 있습니까? – SMUsamaShah

답변

2

MSDN이 부재

비트가 다음 값 중 적절한 조합이 될 수있는 유효 플래그 its description 슈퍼 도움이되지 않는다.

저는 개인적으로 동일한 입력 명령에서 down 및 up 플래그를 모두 사용하는 것이 합리적이라고 말하지 않습니다. 모든 응용 프로그램과의 호환성을 최대화하려면 일반 사용자처럼 이동, 단추 아래로, 마지막으로 단추 위로 이동하십시오.

많은 마우스 조작을 수행하려는 경우 이러한 세 가지 입력 단계를 수행하는 도우미 함수를 만드는 것이 좋습니다.

관련 문제