Python 滚轮鼠标与 win32con

问题描述 投票:0回答:2

请告诉我如何解决我的小问题。

我正在为 android 模拟器编写自动化,我使用 win32api 库来模拟非活动程序窗口中的操作。

有时我需要将鼠标滚动发送到模拟器。为此,我使用:

lParam = win32api.MAKELONG (500, 500)

win32api.PostMessage(hwnd,win32con.WM_MOUSEWHEEL,win32con.MK_LBUTTON,lParam)

因此,我向下滚动。 但是,无论我在谷歌上搜索和寻找信息多长时间,我都无法弄清楚如何以同样的方式向上滚动。

嗯,对于点击的想法,我使用:

定义单击(x,y):

lParam = win32api.MAKELONG (x, y)
win32api.PostMessage (hwnd, win32con.WM_MOUSEMOVE, lParam)
win32api.PostMessage (hwnd, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, lParam)
win32api.PostMessage (hwnd, win32con.WM_LBUTTONUP, win32con.MKF_LEFTBUTTONSEL, lParam)

否则我无法点击。

python winapi postmessage hwnd win32con
2个回答
0
投票

我是这样解决这个问题的:

win32api.PostMessage(hwnd, win32con.WM_MOUSEWHEEL, win32con.WHEEL_DELTA * 5, lParam)

0
投票
import win32gui, win32api, win32con
from time import sleep

def wheel(hWnd,x,y,delta):
    lParam = win32api.MAKELONG (x, y)
    wParam = win32api.MAKELONG(0, delta)
    #hWnd= win32gui.FindWindowEx(hWnd, None, None, None)
    #win32gui.SendMessage(hWnd, win32con.WM_MOUSEMOVE, win32con.MK_LBUTTON, lParam)
    win32api.PostMessage(hWnd, win32con.WM_MOUSEWHEEL, wParam, lParam)
    #win32api.PostMessage(hWnd, win32con.WM_MOUSEWHEEL, 120, lParam)
    
def hWndByInTitleSubSrting(subString):# get window handler
    _hwnd = []
    def enumHandler(hwnd, lParam):
        if win32gui.IsWindowVisible(hwnd):
            if subString in win32gui.GetWindowText(hwnd):
                _hwnd.append(hwnd)
    win32gui.EnumWindows(enumHandler, None)
    return _hwnd

hwnds = hWndByInTitleSubSrting('Microsoft​ Edge')
hwnd = hwnds[0] # get first Microsoft​ Edge window 

x,y=50,50+170 # 170 window title height in my Microsoft​ Edge
delta = 120

count = 10
for i in range(count): # +delta
    wheel(hwnd,x,y,delta*5)
    sleep(0.2)
    
for i in range(count): # -delta
    wheel(hwnd,x,y,delta*-5)

delta
120*n
,其中
n
int
eger (..., -2, -1, 0, 1, 2, ...)。使用
-delta
+delta
作为滚动方向。此代码是根据此问题中的代码重构的使用 win32gui 将鼠标滚动消息发布到不同窗口时遇到的不同行为

© www.soinside.com 2019 - 2024. All rights reserved.