哪种在Python上模拟键盘和鼠标的最简单方法?

时间:2010-05-07 21:41:50

标签: python windows keyboard mouse

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

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

5 个答案:

答案 0 :(得分:26)

我在Python中自动测试内容。我倾向于使用以下内容:

<击> http://www.tizmoi.net/watsup/intro.html
修改:链接已失效,已归档版本:https://web.archive.org/web/20100224025508/http://www.tizmoi.net/watsup/intro.html

http://www.mayukhbose.com/python/IEC/index.php

我并不总是(几乎从不)模拟按键和鼠标移动。我通常使用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中。如果你在另一个环境中,我不知道。

答案 1 :(得分:15)

也许您正在寻找Sendkeys

  

SendKeys是一个Python模块   可以发送一个或多个的Windows   击键或击键组合   到活动窗口。

它似乎只是Windows

您还有pywinauto(从我的answer复制)

  

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()

答案 2 :(得分:7)

pyautogui 是一个发送密钥和自动执行几个键盘/鼠标相关任务的绝佳软件包。查看Controlling the Keyboard and Mouse with GUI AutomationPyAutoGUI’s documentation

答案 3 :(得分:0)

您可以将PyAutoGUI library用于适用于Windows,macOS和Linux的Python。

鼠标

这是一个将鼠标移动到屏幕中间的简单代码:

import pyautogui
screenWidth, screenHeight = pyautogui.size()
pyautogui.moveTo(screenWidth / 2, screenHeight / 2)

文档页面:Mouse Control Functions

相关问题:Controlling mouse with Python

键盘

示例:

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

文档页面:Keyboard Control Functions

更多阅读:Controlling the Keyboard and Mouse with GUI Automation(电子书第18章)。

相关问题:

答案 4 :(得分:0)

另外两个选项是:

警告 - 如果您想使用键盘控制进行游戏,那么 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 也无法处理一些移位字符 - 例如 £ 符号等。