繁体   English   中英

使用python在Windows中更改鼠标指针速度

[英]Change mouse pointer speed in Windows using python

我正在使用Windows10系统。

我有一个Tkinter画布,上面画有图像。 将鼠标悬停在画布上时,是否有任何方法可以降低鼠标指针的速度? 我已经检查了此链接此链接,但答案似乎不稳定。

更具体地说,是否有可能在普通的Python / Tkinter中降低鼠标指针的速度?

答案是“是”,但是有风险。 可以通过编写控制位置的算法来减慢或加快鼠标的速度。 这种方法很可能会出错,并且容易出错。 此方法将利用tkinter的event_generate函数。

root.event_generate('<Motion>', warp=True, x=xptr, y=yptr)

其中root是根(或任何tk)窗口,而xptr,yptr是强制鼠标光标移至特定屏幕位置的屏幕坐标。

第二种选择也很容易出错,但风险更大 此方法与编辑Windows注册表有关。 注册表项很容易找到: HKEY_CURRENT_USER\\Control Panel\\Mouse 但请注意: 对这些注册表项的任何更改都会影响所有程序 您可以阅读MSDN文章中的一些推荐设置 使用python注册表模块更改注册表项。 但是请确保对程序应用良好的错误处理和退出控制,因为您需要将注册表中更改的所有内容恢复到原来的状态。 而且,如果您的程序在重置注册表项之前崩溃了,那么除非您编写将其设置为某些默认值的程序,否则您必须手动重置它们。

祝好运!

在Windows系统上,可以使用本机SystemParametersInfo更改鼠标指针的速度。 可以通过ctype实现,它是Python标准库的一部分(是否算作“普通”解决方案?)。

看一下这个片段:

import ctypes

try:
    import tkinter as tk
except ImportError:
    import Tkinter as tk


def change_speed(speed=10):
    #   1 - slow
    #   10 - standard
    #   20 - fast
    set_mouse_speed = 113   # 0x0071 for SPI_SETMOUSESPEED
    ctypes.windll.user32.SystemParametersInfoA(set_mouse_speed, 0, speed, 0)


def proper_close():
    change_speed()
    root.destroy()

root = tk.Tk()
root.protocol('WM_DELETE_WINDOW', proper_close)
tk.Button(root, text='Slow', command=lambda: change_speed(1)).pack(expand=True, fill='x')
tk.Button(root, text='Standard', command=change_speed).pack(expand=True, fill='x')
tk.Button(root, text='Fast', command=lambda: change_speed(20)).pack(expand=True, fill='x')
root.mainloop()

但是,如果我们的“标准”速度不等于10怎么办? 没问题! 看一下这个片段:

import ctypes

try:
    import tkinter as tk
except ImportError:
    import Tkinter as tk


def change_speed(speed):
    #   1 - slow
    #   10 - standard
    #   20 - fast
    set_mouse_speed = 113   # 0x0071 for SPI_SETMOUSESPEED
    ctypes.windll.user32.SystemParametersInfoA(set_mouse_speed, 0, speed, 0)


def get_current_speed():
    get_mouse_speed = 112   # 0x0070 for SPI_GETMOUSESPEED
    speed = ctypes.c_int()
    ctypes.windll.user32.SystemParametersInfoA(get_mouse_speed, 0, ctypes.byref(speed), 0)

    return speed.value


def proper_close():
    change_speed(standard_speed)
    root.destroy()


root = tk.Tk()
root.protocol('WM_DELETE_WINDOW', proper_close)
root.minsize(width=640, height=480)

standard_speed = get_current_speed()

safe_zone = tk.LabelFrame(root, text='Safe Zone', bg='green')
slow_zone = tk.LabelFrame(root, text='Slow Zone', bg='red')

safe_zone.pack(side='left', expand=True, fill='both')
slow_zone.pack(side='left', expand=True, fill='both')

slow_zone.bind('<Enter>', lambda event: change_speed(1))
slow_zone.bind('<Leave>', lambda event: change_speed(standard_speed))

root.mainloop()

换句话说-这根本不是一项艰巨的任务。 我们可以自由获取/设置鼠标速度,而不必在注册表中爬行,也无需进行火箭科学计算!

您可以在MSDN上找到有关SystemParametersInfo更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM