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

balp4ylt  于 2023-05-30  发布在  Windows
关注(0)|答案(6)|浏览(170)

我需要做一些宏,我想知道什么是最推荐的方法来做到这一点。
所以,我需要写一些东西,并点击一些地方与它,我需要模仿TAB键。

af7jpaap

af7jpaap1#

我用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中。如果你在另一个环境中,我就不知道了。

gt0wga4j

gt0wga4j2#

您正在寻找Sendkeys吗?
SendKeys是Windows的Python模块,可以向活动窗口发送一个或多个击键或击键组合。
似乎只有windows
你也有pywinauto(从我的SO答案复制)
pywinauto是一组开源(LGPL)模块,用于将Python用作基于Windows NT的操作系统(NT/W2 K/XP)的GUI自动化“驱动程序”。
和网页上的例子

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

x8diyxa73#

pyautogui是一个很棒的软件包,可以发送键并自动执行一些与键盘/鼠标相关的任务。查看Controlling the Keyboard and Mouse with GUI AutomationPyAutoGUI’s documentation

utugiqy6

utugiqy64#

您可以使用PyAutoGUI library for Python,它可以在Windows,macOS和Linux上运行。

鼠标

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

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章)。
相关问题:

wlp8pajw

wlp8pajw5#

其他两个选项是:

警告-如果你想使用键盘控制游戏,那么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处理大写字母字符。当字符不能简单地Map时,该函数福尔斯到使用pynput。请注意,PyAutoGUI也不能处理一些移位字符--例如£符号等。

bpsygsoo

bpsygsoo6#

ctypes
这里没有提到的一个答案是ctypes,它的主要优点是它是一个可以立即使用的本地库。我个人对它的问题也比其他图书馆少。

import ctypes

ctypes.windll.user32.keybd_event(0x73, 0, 0, 0) # F4 Down
ctypes.windll.user32.keybd_event(0x73, 0, 0x0002, 0) # F4 Up

ctypes.windll.user32.mouse_event(2, 0, 0, 0, 0) #Left mouse button down
ctypes.windll.user32.mouse_event(4, 0, 0, 0, 0) #Left mouse button up

ctypes.windll.user32.SetCursorPos(100, 100)

鼠标控制是不言自明的,和keycodes on Windows are documented here

相关问题