2012-04-26 5 views
1

예를 들어 Windows에서 시작 버튼을 클릭 할 때 아래 스크립트는 완벽하게 작동하지만 특정 GUI 프로그램에서 버튼을 클릭하려고 시도하면 효과.특정 GUI에서 마우스 클릭 명령이 작동하지 않습니다.

이 프로그램이 가상 마우스 클릭을 비활성화했을 수 있습니까? 그렇다면 어떻게 든이를 피할 수 있습니까?

import win32api, win32con 
Po=win32api.GetCursorPos() 
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,Po[0],Po[1],0,0) 
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,Po[0],Po[1],0,0) 

답변

1

mouse_event (입력에 사용하는 기본 API 인 SendInput)에는 몇 가지 까다 롭습니다. 비트, 그것은 좋은 생각이다 read the MSDN page for mouse_event 완전히 신중하게하기 전에 미국 작은 그림에주의를 기울이십시오 : 특히, x 및 y 값은 이 아니므로 픽셀이 아니므로 GetCursorPos에서 가져온 값을 넣을 수는 없습니다.

0,0이 왼쪽 하단 모서리이므로 왼쪽 하단 근처의 점은 대략 화면의 동일한 영역에 있지만 더 멀리 떨어져있을수록 픽셀 값이 더 멀어집니다 이 API가 사용하는 실제 단위에서 : 시작 버튼 근처의 위치 (화면의 왼쪽 하단에 있다고 가정)에서 작동하는 것처럼 보일 수 있지만 다른 값의 경우 다른 곳에서 클릭하는 것처럼 보일 수 있습니다 당신이보고있는 것. MSDN에서

: X 축 또는 마지막 마우스 이벤트 이후의 움직임의 양에 따라 마우스의 절대 위치가 생성
DWORD 상기에 따라 :
입력 [IN]

DX MOUSEEVENTF_ABSOLUTE의 설정. 절대 데이터는 마우스의 실제 x 좌표로 지정됩니다. 상대적인 데이터는 이동 된 mickeys의 수로 지정됩니다. 미키 (mickey)는 마우스가 움직 였다는보고를하기 위해 이동해야하는 양입니다.

먼저 MOUTEVENTF_ABSOLUTE 플래그가 필요합니다. 하지만 그게 전부가 아니에요 : MOUSEEVENTF_ABSOLUTE 값을 지정하면, DX와 DY는 0에서 65,535 사이의 정규화 된 절대 좌표를 포함

비고
....
이벤트 프로시 저는이 좌표를 디스플레이 표면에 매핑합니다. 좌표 (0,0)는 디스플레이 화면의 왼쪽 위 모서리에 매핑되며 (65535,65535) 오른쪽 아래 모서리에 매핑됩니다.

... 그래서이 API에 전달하기 전에 대상 좌표를 적절하게 조정해야합니다.

1
프로그램에 의해 생성

마우스 이벤트는 그들이 원하는 경우 응용 프로그램은 필터링 할 수 있습니다 재산 "주입"한 - 예를 들어, MMO의 클라이언트는 종종 일부를 설정할 수 mouse_event 봇에게의

그 0을 방지하기 위해 그 필터 속성을 사용하면 삽입 된 플래그를 극복 할 수 있는지 조사 할 수 있습니다. 단, 즉시 방법을 찾을 수는 없지만

관련 문제