在Python上模拟键盘和鼠标最简单的方法是什么?

在Python上模拟键盘和鼠标最简单的方法是什么?,python,windows,keyboard,mouse,Python,Windows,Keyboard,Mouse,我需要做一些宏,我想知道最推荐的方法是什么 所以,我需要写一些东西并用它单击一些地方,我需要模拟TAB键。也许你在寻找 SendKeys是一个用于 可以发送一个或多个 击键或击键组合 到活动窗口 好像只有窗户 你也有(从我的SO抄袭) pywinauto是一套开源软件 (LGPL)用于将Python用作 适用于Windows NT的GUI自动化“驱动程序” 基于操作系统(NT/W2K/XP) 和网页上的示例 > from pywinauto import application >

我需要做一些宏,我想知道最推荐的方法是什么

所以,我需要写一些东西并用它单击一些地方,我需要模拟TAB键。

也许你在寻找

SendKeys是一个用于 可以发送一个或多个 击键或击键组合 到活动窗口

好像只有窗户

你也有(从我的SO抄袭)

pywinauto是一套开源软件 (LGPL)用于将Python用作 适用于Windows NT的GUI自动化“驱动程序” 基于操作系统(NT/W2K/XP)

和网页上的示例

> from pywinauto import application
> app = application.Application.start("notepad.exe")
> app.notepad.TypeKeys("%FX")
> app.Notepad.MenuSelect("File->SaveAs")
> app.SaveAs.ComboBox5.Select("UTF-8")
> app.SaveAs.edit1.SetText("Example-utf8.txt")
> app.SaveAs.Save.Click()
也许你在找什么

SendKeys是一个用于 可以发送一个或多个 击键或击键组合 到活动窗口

好像只有窗户

你也有(从我的SO抄袭)

pywinauto是一套开源软件 (LGPL)用于将Python用作 适用于Windows NT的GUI自动化“驱动程序” 基于操作系统(NT/W2K/XP)

和网页上的示例

> from pywinauto import application
> app = application.Application.start("notepad.exe")
> app.notepad.TypeKeys("%FX")
> app.Notepad.MenuSelect("File->SaveAs")
> app.SaveAs.ComboBox5.Select("UTF-8")
> app.SaveAs.edit1.SetText("Example-utf8.txt")
> app.SaveAs.Save.Click()

我用Python进行自动化测试。我倾向于使用以下方法:


编辑:链接已失效,存档版本:

我并不总是(几乎从不)模拟按键和鼠标移动。我通常使用COM设置windows对象的值并调用它们的.click()方法

您可以通过以下方式发送按键信号:

import win32com.client

shell = win32com.client.Dispatch("WScript.Shell")
shell.SendKeys("^a") # CTRL+A may "select all" depending on which window's focused
shell.SendKeys("{DELETE}") # Delete selected text?  Depends on context. :P
shell.SendKeys("{TAB}") #Press tab... to change focus or whatever

这些都在Windows中。如果你在另一个环境中,我不知道

我用Python进行自动化测试。我倾向于使用以下方法:


编辑:链接已失效,存档版本:

我并不总是(几乎从不)模拟按键和鼠标移动。我通常使用COM设置windows对象的值并调用它们的.click()方法

您可以通过以下方式发送按键信号:

import win32com.client

shell = win32com.client.Dispatch("WScript.Shell")
shell.SendKeys("^a") # CTRL+A may "select all" depending on which window's focused
shell.SendKeys("{DELETE}") # Delete selected text?  Depends on context. :P
shell.SendKeys("{TAB}") #Press tab... to change focus or whatever

这些都在Windows中。如果你在另一个环境中,我不知道

pyautogui是一个很好的软件包,可以发送按键并自动执行与键盘/鼠标相关的任务。签出并重试。

pyautogui是一个很棒的软件包,可以发送按键并自动执行与键盘/鼠标相关的任务。查看并查看。

您可以使用在Windows、macOS和Linux上工作的Python

老鼠 下面是将鼠标移动到屏幕中间的简单代码:

import pyautogui
screenWidth, screenHeight = pyautogui.size()
pyautogui.moveTo(screenWidth / 2, screenHeight / 2)
文档页面:

相关问题:

键盘 例如:

pyautogui.typewrite('Hello world!')                 # prints out "Hello world!" instantly
pyautogui.typewrite('Hello world!', interval=0.25)  # prints out "Hello world!" with a quarter second delay after each character
文档页面:


更多阅读:(电子书第18章)

相关问题:

您可以在Windows、macOS和Linux上使用Python

老鼠 下面是将鼠标移动到屏幕中间的简单代码:

import pyautogui
screenWidth, screenHeight = pyautogui.size()
pyautogui.moveTo(screenWidth / 2, screenHeight / 2)
文档页面:

相关问题:

键盘 例如:

pyautogui.typewrite('Hello world!')                 # prints out "Hello world!" instantly
pyautogui.typewrite('Hello world!', interval=0.25)  # prints out "Hello world!" with a quarter second delay after each character
文档页面:


更多阅读:(电子书第18章)

相关问题:

另外两个选项是:

  • pynput——适用于Windows(已测试)、Linux和MacOS——文档位于
  • PyDirectInput--仅适用于Windows,可与(或不与)PyAutoGUI一起使用
警告-如果您想在游戏中使用键盘控制,那么pynput并不总是有效-例如,它适用于Valheim,但不适用于Witcher 3-PyDirectInput将在这里工作。我还测试了PyDirectInput,它适用于半衰期2(作为对旧游戏的测试)

提示-您可能需要减少字符输入之间的延迟(对于游戏,不要删除)-使用pydirectinput.PAUSE=0.05

例如,这里有一个允许虚拟键盘键入的函数-目前仅在Windows上测试:

from pynput import keyboard
try:
    import pydirectinput
    pydirectinput.PAUSE = 0.05
except ImportError as err:
    pydirectinput = False
    print("pydirectinput not found:")

def write_char(ch):
    upper = ch.isupper()
    if pydirectinput and pydirectinput.KEYBOARD_MAPPING.get(ch.lower(), False):
        if upper:
            pydirectinput.keyDown('shift')
            print('^')
        pydirectinput.write(ch.lower(), interval=0.0)
        print(ch)
        if upper:
            pydirectinput.keyUp('shift')
    else:
        keyboard.Controller().type(ch)
这允许发送字符串,并通过pydirectinput处理大写字母字符。当字符不能简单地映射时,函数会返回到使用pynput。请注意,PyAutoGUI也无法处理某些移位字符,例如:%符号等。

另外两个选项是:

  • pynput——适用于Windows(已测试)、Linux和MacOS——文档位于
  • PyDirectInput--仅适用于Windows,可与(或不与)PyAutoGUI一起使用
警告-如果您想在游戏中使用键盘控制,那么pynput并不总是有效-例如,它适用于Valheim,但不适用于Witcher 3-PyDirectInput将在这里工作。我还测试了PyDirectInput,它适用于半衰期2(作为对旧游戏的测试)

提示-您可能需要减少字符输入之间的延迟(对于游戏,不要删除)-使用pydirectinput.PAUSE=0.05

例如,这里有一个允许虚拟键盘键入的函数-目前仅在Windows上测试:

from pynput import keyboard
try:
    import pydirectinput
    pydirectinput.PAUSE = 0.05
except ImportError as err:
    pydirectinput = False
    print("pydirectinput not found:")

def write_char(ch):
    upper = ch.isupper()
    if pydirectinput and pydirectinput.KEYBOARD_MAPPING.get(ch.lower(), False):
        if upper:
            pydirectinput.keyDown('shift')
            print('^')
        pydirectinput.write(ch.lower(), interval=0.0)
        print(ch)
        if upper:
            pydirectinput.keyUp('shift')
    else:
        keyboard.Controller().type(ch)

这允许发送字符串,并通过pydirectinput处理大写字母字符。当字符不能简单地映射时,函数会返回到使用pynput。请注意,PyAutoGUI也无法处理某些移位字符,例如:%符号等。

您可能需要更具体地说明您正在测试的是什么。网页?桌面应用程序?网页、桌面应用程序、everything=)是在OS X中模拟键盘事件的一种方法。您可能希望更具体地了解您正在测试的内容。网页?桌面应用程序?网页、桌面应用程序、everything=)是在OS X中模拟键盘事件的一种方法。好消息:要使用win32com,首先必须安装。要激活要将按键发送到的程序,请使用
shell.AppActivate(“记事本”)
(替换记事本)这非常有效-感谢@dagur提供有关窗口焦点的提示!我还需要鼠标事件模拟-这对我来说是最好的,并且与此键盘解决方案配合得很好。很高兴知道:要使用win32com,首先必须安装。要激活要将按键发送到的程序,请使用
sh