在Python中模拟鼠标点击/检测光标下的颜色

7 投票
2 回答
8239 浏览
提问于 2025-04-15 17:24

我刚开始学Python,想写一个程序,让鼠标在某个位置(x, y)点击一下,然后移动到另一个位置(a, b),接着等到鼠标下面的颜色变成某种特定的颜色,比如#fff。等颜色变了之后,再点击一下,然后重复这个过程。

我找不到一个好的Python库来处理鼠标相关的操作。

2 个回答

-1

如果你在用Windows系统,那么对于这种情况,你真的应该试试AutoHotkey。它虽然不是Python,但在Windows上做这种事情时非常强大。而且用户社区也非常友好,随时可以去他们的“求助”论坛看看。

9

模拟鼠标事件的接口(API)跟你使用的操作系统有关。我不知道有什么可以跨平台使用的解决方案。

在Windows系统上,你可以通过ctypes来访问Win32 API。你可以查看MSDN上的mouse_event。另外,你可能还会对pywinauto感兴趣。

要获取鼠标下的颜色,你需要知道鼠标的位置。可以查看MSDN上的GetCursorPos。然后,如果你的应用有获取该位置颜色的接口,你就可以使用它。如果没有,你可以尝试抓取鼠标周围的一小部分屏幕,然后使用PIL来获取这个区域内每个像素的颜色。我觉得PIL的屏幕捕捉功能可能只在Windows平台上有效,但我不太确定。

我正在使用以下函数来满足类似的需求:

def grab_main_color(self, rect, max_colors=256):
    """returns a tuple with the RGB value of the most present color in the given rect"""
    img=ImageGrab.grab(rect)
    colors = img.getcolors(max_colors)
    max_occurence, most_present = 0, 0
    try:
        for c in colors:
            if c[0] > max_occurence:
                (max_occurence, most_present) = c
        return most_present
    except TypeError:
        raise Exception("Too many colors in the given rect")

撰写回答