[PYTHON] 파이썬 Win32 시뮬레이션 클릭
PYTHON파이썬 Win32 시뮬레이션 클릭
마우스 클릭을 시뮬레이션하려는 창이 있다고 가정 해 보겠습니다. 특정 x, y 좌표에서. 나는 이미 hwnd를 가지고 있지만 확실하지 않다. lParam을 만드는 법. 나는 과거에 SendMessage를 사용했다. 버튼 등등. 그러나 나는 그들의 힘을 알았다. 어떤 도움이라도 대단히 감사하겠습니다. 나는 또한 도울 수 없지만 궁금하다면 나는 이것을 바르게 생각하고있다. 나의 최종 목표는 특정 Skype 메인 윈도우의 사용자 (예 :). 나는 EnumChildWindows를 사용했다. 메인 윈도우의 모든 자식을 찾지 만 올바른 윈도우를 찾을 수 없습니다. 그래서 좌표를 사용하여 '클릭'하려고했습니다.
해결법
-
==============================
1.ctypes 덕분에 낮은 수준의 Windows API를 사용할 수 있습니다. 아래 예제를 참조하십시오 (테스트하지 않은 것이 좋지만 괜찮을 것입니다).
ctypes 덕분에 낮은 수준의 Windows API를 사용할 수 있습니다. 아래 예제를 참조하십시오 (테스트하지 않은 것이 좋지만 괜찮을 것입니다).
import ctypes MOUSEEVENTF_MOVE = 0x0001 # mouse move MOUSEEVENTF_ABSOLUTE = 0x8000 # absolute move MOUSEEVENTF_MOVEABS = MOUSEEVENTF_MOVE + MOUSEEVENTF_ABSOLUTE MOUSEEVENTF_LEFTDOWN = 0x0002 # left button down MOUSEEVENTF_LEFTUP = 0x0004 # left button up MOUSEEVENTF_CLICK = MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_LEFTUP def click(x, y): #move first x = 65536L * x / ctypes.windll.user32.GetSystemMetrics(0) + 1 y = 65536L * y / ctypes.windll.user32.GetSystemMetrics(1) + 1 ctypes.windll.user32.mouse_event(MOUSEEVENTF_MOVEABS, x, y, 0, 0) #then click ctypes.windll.user32.mouse_event(MOUSEEVENTF_CLICK, 0, 0, 0, 0)
최신 정보: 아래의 코드를 테스트하지는 않았지만 아이의 위치를 얻기 위해 뭔가를 써야한다고 생각합니다. 그런 다음 올바른 위치를 클릭 할 수 있습니다.
CHILD= None def the_callback(child_hwnd, regex): '''Pass to win32gui.EnumWindows() to check all the opened windows''' if re.match(regex, win32gui.GetWindowText(child_hwnd)): CHILD= child_hwnd win32gui.EnumChildWindows(hwnd, the_callback, regex) if CHILD: (x_tl, y_tl, x_br, y_br) = win32gui.GetWindowRect(CHILD)
-
==============================
2.나는 이것이 당신에게 좋다고 생각한다. 직접 사용하거나 이것을 파이썬 프로그램으로 가져올 수있다.
나는 이것이 당신에게 좋다고 생각한다. 직접 사용하거나 이것을 파이썬 프로그램으로 가져올 수있다.
"""mousemacro.py defines the following functions: click() -- calls left mouse click hold() -- presses and holds left mouse button release() -- releases left mouse button rightclick() -- calls right mouse click righthold() -- calls right mouse hold rightrelease() -- calls right mouse release middleclick() -- calls middle mouse click middlehold() -- calls middle mouse hold middlerelease() -- calls middle mouse release move(x,y) -- moves mouse to x/y coordinates (in pixels) getpos() -- returns mouse x/y coordinates (in pixels) slide(x,y) -- slides mouse to x/y coodinates (in pixels) also supports optional speed='slow', speed='fast' """ from ctypes import* from ctypes.wintypes import * from time import sleep import win32ui __all__ = ['click', 'hold', 'release', 'rightclick', 'righthold', 'rightrelease', 'middleclick', 'middlehold', 'middlerelease', 'move', 'slide', 'getpos'] # START SENDINPUT TYPE DECLARATIONS PUL = POINTER(c_ulong) class KeyBdInput(Structure): _fields_ = [("wVk", c_ushort), ("wScan", c_ushort), ("dwFlags", c_ulong), ("time", c_ulong), ("dwExtraInfo", PUL)] class HardwareInput(Structure): _fields_ = [("uMsg", c_ulong), ("wParamL", c_short), ("wParamH", c_ushort)] class MouseInput(Structure): _fields_ = [("dx", c_long), ("dy", c_long), ("mouseData", c_ulong), ("dwFlags", c_ulong), ("time",c_ulong), ("dwExtraInfo", PUL)] class Input_I(Union): _fields_ = [("ki", KeyBdInput), ("mi", MouseInput), ("hi", HardwareInput)] class Input(Structure): _fields_ = [("type", c_ulong), ("ii", Input_I)] class POINT(Structure): _fields_ = [("x", c_ulong), ("y", c_ulong)] # END SENDINPUT TYPE DECLARATIONS # LEFTDOWN = 0x00000002, # LEFTUP = 0x00000004, # MIDDLEDOWN = 0x00000020, # MIDDLEUP = 0x00000040, # MOVE = 0x00000001, # ABSOLUTE = 0x00008000, # RIGHTDOWN = 0x00000008, # RIGHTUP = 0x00000010 MIDDLEDOWN = 0x00000020 MIDDLEUP = 0x00000040 MOVE = 0x00000001 ABSOLUTE = 0x00008000 RIGHTDOWN = 0x00000008 RIGHTUP = 0x00000010 FInputs = Input * 2 extra = c_ulong(0) click = Input_I() click.mi = MouseInput(0, 0, 0, 2, 0, pointer(extra)) release = Input_I() release.mi = MouseInput(0, 0, 0, 4, 0, pointer(extra)) x = FInputs( (0, click), (0, release) ) #user32.SendInput(2, pointer(x), sizeof(x[0])) CLICK & RELEASE x2 = FInputs( (0, click) ) #user32.SendInput(2, pointer(x2), sizeof(x2[0])) CLICK & HOLD x3 = FInputs( (0, release) ) #user32.SendInput(2, pointer(x3), sizeof(x3[0])) RELEASE HOLD def move(x,y): windll.user32.SetCursorPos(x,y) def getpos(): global pt pt = POINT() windll.user32.GetCursorPos(byref(pt)) return pt.x, pt.y def slide(a,b,speed=0): while True: if speed == 'slow': sleep(0.005) Tspeed = 2 if speed == 'fast': sleep(0.001) Tspeed = 5 if speed == 0: sleep(0.001) Tspeed = 3 x = getpos()[0] y = getpos()[1] if abs(x-a) < 5: if abs(y-b) < 5: break if a < x: x -= Tspeed if a > x: x += Tspeed if b < y: y -= Tspeed if b > y: y += Tspeed move(x,y) def click(): windll.user32.SendInput(2,pointer(x),sizeof(x[0])) def hold(): windll.user32.SendInput(2, pointer(x2), sizeof(x2[0])) def release(): windll.user32.SendInput(2, pointer(x3), sizeof(x3[0])) def rightclick(): windll.user32.mouse_event(RIGHTDOWN,0,0,0,0) windll.user32.mouse_event(RIGHTUP,0,0,0,0) def righthold(): windll.user32.mouse_event(RIGHTDOWN,0,0,0,0) def rightrelease(): windll.user32.mouse_event(RIGHTUP,0,0,0,0) def middleclick(): windll.user32.mouse_event(MIDDLEDOWN,0,0,0,0) windll.user32.mouse_event(MIDDLEUP,0,0,0,0) def middlehold(): windll.user32.mouse_event(MIDDLEDOWN,0,0,0,0) def middlerelease(): windll.user32.mouse_event(MIDDLEUP,0,0,0,0) if __name__ == '__main__': while 1: move(10,1)
from https://stackoverflow.com/questions/2964051/python-win32-simulate-click by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Pandas : Excel의 병합 된 헤더 열을 구문 분석합니다. (0) | 2018.11.10 |
---|---|
[PYTHON] tensorflow : .eval ()은 끝나지 않습니다. (0) | 2018.11.10 |
[PYTHON] Matplotlib : 그림 개체를 사용하여 그림 초기화 (0) | 2018.11.10 |
[PYTHON] 세션 쿠키를 공유하기 위해 동일한 하위 도메인에서 별개의 장고 앱을 얻는 방법은 무엇입니까? (0) | 2018.11.10 |
[PYTHON] 파이썬을 사용하여 단색 이미지의 방울 주위 사각형 사각형 상자 (0) | 2018.11.10 |