我需要做一些宏,我想知道最推荐的方法是什么。
所以,我需要写一些东西并点击一些地方,我需要模拟TAB键。
答案 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是一套开源的 (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 Automation和PyAutoGUI’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 也无法处理一些移位字符 - 例如 £ 符号等。