使用python创建鼠标滚动事件

时间:2012-03-03 04:16:01

标签: python windows mouse scrollbar mouseevent

我发现这个Controlling mouse with Python这个问题在创建脚本以移动鼠标并使用Python单击鼠标时非常有用。是否也可以创建鼠标滚动事件?另外,前进和后退按钮怎么样?

4 个答案:

答案 0 :(得分:3)

仅针对“已故”观众,这需要您更改第4个参数dwData ... 我认为它看起来像这样:

import win32api
from win32con import *

#Scroll one up
win32api.mouse_event(MOUSEEVENTF_WHEEL, x, y, 1, 0)

#Scroll one down
win32api.mouse_event(MOUSEEVENTF_WHEEL, x, y, -1, 0)

#Scroll one to the right
win32api.mouse_event(MOUSEEVENTF_HWHEEL, x, y, 1, 0)

#Scroll one to the left
win32api.mouse_event(MOUSEEVENTF_HWHEEL, x, y, -1, 0)

<小时/> 更多信息? win-api文档非常好:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646260%28v=vs.85%29.aspx

答案 1 :(得分:1)

使用pygame包可以更轻松地完成此操作。您需要确保在python库中安装了pygame包。要下载它,请单击链接:

http://www.pygame.org/download.shtml

看起来应该是这样的:

import pygame

pygame.init()

def main():
    While true:
        for event in pygame.event.get():
            if event.type == pygame.MOUSEBUTTONDOWN:
                if event.button == 1:
                    print ("You pressed the left mouse button.")

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    pygame.quit()
                    quit()

main()

运行上面的代码时,它会告诉您按下鼠标左键时按下了鼠标左键。完成后按Esc键停止它。此方法存储事件列表,并按照发生的顺序对其进行测试。如果找到一个被按下的,它将在if语句中运行它后面的代码,然后将其从列表中删除。

要使用滚轮,只需替换行上的数字1:

if event.button == 1:

将其替换为4以向前滚动,将5替换为向后滚动。

答案 2 :(得分:1)

我真的很为此挣扎,所以我认为我应该发布Windows的解决方案。

快速pip install pywin32之后,我可以访问必要的win32apiwin32con等。

注意::我上次检查时,pywin32仅受以下支持:

  • Python :: 2.7
  • Python :: 3.5
  • Python :: 3.6
  • Python :: 3.7
import time
import win32api
import win32con


def scroll(clicks=0, delta_x=0, delta_y=0, delay_between_ticks=0):
    """
    Source: https://docs.microsoft.com/en-gb/windows/win32/api/winuser/nf-winuser-mouse_event?redirectedfrom=MSDN

    void mouse_event(
      DWORD     dwFlags,
      DWORD     dx,
      DWORD     dy,
      DWORD     dwData,
      ULONG_PTR dwExtraInfo
    );

    If dwFlags contains MOUSEEVENTF_WHEEL,
    then dwData specifies the amount of wheel movement.
    A positive value indicates that the wheel was rotated forward, away from the user;
    A negative value indicates that the wheel was rotated backward, toward the user.
    One wheel click is defined as WHEEL_DELTA, which is 120.

    :param delay_between_ticks: 
    :param delta_y: 
    :param delta_x:
    :param clicks:
    :return:
    """

    if clicks > 0:
        increment = win32con.WHEEL_DELTA
    else:
        increment = win32con.WHEEL_DELTA * -1

    for _ in range(abs(clicks)):
        win32api.mouse_event(win32con.MOUSEEVENTF_WHEEL, delta_x, delta_y, increment, 0)
        time.sleep(delay_between_ticks)

然后,在定义之后

click_point = x_position, y_position

然后使用

pyautogui.moveTo(x=click_point[0], y=click_point[1], duration=0.25)

确保鼠标位于正确的位置。我只是调用上面的scroll函数:

scroll(-4, 0.1)

向下滚动4个刻度,每个刻度之间延迟100毫秒。

答案 3 :(得分:0)

生成滚动事件,使用带有MOUSEEVENTF_WHEEL的mouse_event方法。对于其他事件,例如前进/后退按钮,取决于鼠标的设置方式以及触发它的按钮。请参阅msdn document on this for a list of possible values