Python 鼠标单击而不移动光标?

Python 鼠标单击而不移动光标?,python,mouseevent,Python,Mouseevent,我似乎找不到这个问题的具体答案。如何在不移动光标的情况下单击屏幕上的坐标?我正在进行一个项目,该项目将自动安装程序,但仍希望在安装过程中控制鼠标执行其他任务。有什么想法吗?一些例子也会很棒。如果您知道要单击的屏幕坐标,您可以尝试: import pyautogui x, y = 500, 250 # or whatever pyautogui.click(x, y) 这将移动到鼠标指针指向(x,y)并用鼠标左键单击。感谢那些试图帮助我的人。经过进一步研究,我找到了一个解决办法。我找到了一种通过

我似乎找不到这个问题的具体答案。如何在不移动光标的情况下单击屏幕上的坐标?我正在进行一个项目,该项目将自动安装程序,但仍希望在安装过程中控制鼠标执行其他任务。有什么想法吗?一些例子也会很棒。

如果您知道要单击的屏幕坐标,您可以尝试:

import pyautogui
x, y = 500, 250 # or whatever
pyautogui.click(x, y)

这将移动到鼠标指针指向(x,y)并用鼠标左键单击。

感谢那些试图帮助我的人。经过进一步研究,我找到了一个解决办法。我找到了一种通过使用将AutoIt导入Python的方法。我一直在寻找一个ControlClick函数,它可以在不移动鼠标光标的情况下单击控件。以下是一个例子:

import autoit
import time

autoit.run("notepad.exe")
autoit.win_wait_active("[CLASS:Notepad]", 3)
autoit.control_send("[CLASS:Notepad]", "Edit1", "hello world{!}")
time.sleep(5)
autoit.win_close("[CLASS:Notepad]")
autoit.control_click("[Class:#32770]", "Button2")

再次感谢。此线程可以标记为已应答和已关闭:)

我需要类似的东西,我找到的解决方案是:

import win32gui
import win32api
import win32con


def control_click(x, y, handle, button='left'):

    l_param = win32api.MAKELONG(x, y)

    if button == 'left':
        win32gui.PostMessage(handle, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, l_param)
        win32gui.PostMessage(handle, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, l_param)

    elif button == 'right':
        win32gui.PostMessage(handle, win32con.WM_RBUTTONDOWN, 0, l_param)
        win32gui.PostMessage(handle, win32con.WM_RBUTTONUP, 0, l_param)

窗口不需要位于前台,但不能最小化,句柄和坐标必须来自控件,例如:在记事本中,句柄和坐标用于“Edit1”控件,而不是窗口,如果应用程序没有通过spytool可见的控件,则可以使用句柄和窗口坐标,示例:pycharm本身。

使用什么?Tk(国际)、Gtk、Django和HTML5、JS接口、pygame、pyHook、原始MFC?你也应该解释一下你所说的没有光标移动的点击事件(可能改变屏幕焦点或活动窗口?)是什么意思,因为这还不清楚。我还没有找到任何关于我要完成的工作的文档。甚至尝试了PyAutogui。你想在屏幕上模拟鼠标点击而不需要鼠标吗?不确定python,但AutoHotKey可以做到这一点。我正在尝试复制ControlClick函数,就像AutoIt一样。它向活动窗口中的给定控件发送鼠标单击命令(例如在安装程序上单击“下一步”),而不在屏幕上移动光标。OP明确表示他不希望光标移动。我很确定,如果你是作者,你必须通过接受答案将其标记为关闭
import win32gui
import win32api
import win32con


def control_click(x, y, handle, button='left'):

    l_param = win32api.MAKELONG(x, y)

    if button == 'left':
        win32gui.PostMessage(handle, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, l_param)
        win32gui.PostMessage(handle, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, l_param)

    elif button == 'right':
        win32gui.PostMessage(handle, win32con.WM_RBUTTONDOWN, 0, l_param)
        win32gui.PostMessage(handle, win32con.WM_RBUTTONUP, 0, l_param)