如何在 Windows 10 中制作执行鼠标单击的 python 脚本?

How to make python script that performs a Mouse Click in Windows 10?

我正在尝试一个简单的 python 脚本,它点击屏幕坐标。

我尝试过使用 Pyautogui、pynput、pydirectinput、pywinauto...但是在其中 none 中实际进行了点击,唯一有效的方法是将鼠标移动到坐标。

脚本很简单,还是不行,推断是win10相关的问题

有谁知道我该如何解决这个问题?

我是否需要安装其他任何东西,也许是驱动程序?

是否缺少给予某种许可?

有没有办法让我命令鼠标硬件进行点击,而不是虚拟化点击?

下面是我的一些尝试

OBS: 在所有尝试中鼠标移动,但没有点击。

Pyautogui:

import pyautogui
pyautogui.moveTo(35, 240)
pyautogui.click() 

Pydirectinput:

import pyautogui
import pydirectinput
pydirectinput.moveTo(35, 240)
pydirectinput.click()

pywinauto:

import pywinauto
from pywinauto import Desktop, Application, mouse, findwindows

pywinauto.mouse.move(coords=(160, 400))
pywinauto.mouse.double_click(button='left', coords=(160, 400))

Direct windows click:

import win32api, win32con
def click(x,y):
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
click(10,200)

Autoclicker using pynput:

import time
import threading
from pynput.mouse import Button, Controller
from pynput.keyboard import Listener, KeyCode


delay = 0.001
button = Button.left
start_stop_key = KeyCode(char='s')
exit_key = KeyCode(char='e')


class ClickMouse(threading.Thread):
    def __init__(self, delay, button):
        super(ClickMouse, self).__init__()
        self.delay = delay
        self.button = button
        self.running = False
        self.program_running = True

    def start_clicking(self):
        self.running = True

    def stop_clicking(self):
        self.running = False

    def exit(self):
        self.stop_clicking()
        self.program_running = False

    def run(self):
        while self.program_running:
            while self.running:
                mouse.click(self.button)
                time.sleep(self.delay)
            time.sleep(0.1)


mouse = Controller()
click_thread = ClickMouse(delay, button)
click_thread.start()


def on_press(key):
    if key == start_stop_key:
        if click_thread.running:
            click_thread.stop_clicking()
        else:
            click_thread.start_clicking()
    elif key == exit_key:
        click_thread.exit()
        listener.stop()


with Listener(on_press=on_press) as listener:
    listener.join()

试试这个方法:

import pywinauto
app = pywinauto.Application().connect(path='your_process_name.exe')
app.MainDialog.click_input(coords=(x, y))

要使点击方法起作用,您需要指定坐标所在的 process/dialog。 使用 connect() 方法连接到现有方法,否则使用 start() 打开新实例。