python win32 моделирует щелчок

Скажем, у меня есть окно, для которого я хочу моделировать щелчок мышью в определенном x, y координата. У меня уже есть hwnd, но я не уверен, как создать lParam. Я использовал SendMessage в прошлом для нажатия на кнопки, и т.д., но я знал их hwnds. Любая справка значительно ценилась бы. Я также не могу не задаться вопросом, иду ли я об этом правильным путем. Моя конечная цель нажимает на определенного пользователя на главном окне в скайпе (например). Я использовал EnumChildWindows для нахождения детей всего главного окна, но не мог найти правильного. Так изображенный я попытался бы 'нажать' на него с помощью координат.

5
задан nabizan 3 June 2010 в 07:37
поделиться

1 ответ

Вы можете использовать низкоуровневый API окон благодаря ctypes. См. Пример ниже (адаптированный из того, что я не тестировал, но все должно быть в порядке)

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)
8
ответ дан 18 December 2019 в 09:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: