简短的摘要:
我正在尝试创建一个程序,将键盘事件发送到计算机,为了所有目的,模拟事件应被视为键盘上的实际击键.
原帖:
我正在寻找一种使用python生成键盘事件的方法.
假设函数接收到必须模拟按下的键,如下所示:
keyboardevent('a') #lower case 'a'
keyboardevent('B') #upper case 'B'
keyboardevent('->') # right arrow key
def keyboardevent(key):
#code that simulated 'key' being pressed on keyboard
Run Code Online (Sandbox Code Playgroud)
以上显然是示例,但我正在寻找的是库,模块或其他,我可以用它来模拟键盘事件.
注意:这与将字符发送到记事本,或将文本输入字段等不同.我希望python脚本模拟一个实际的键盘事件,计算机会认为确实存在键盘事件.
额外注意:
我不想将键击发送到活动窗口 - 我希望系统能够相信键盘的按键被按下,微妙的区别,因为一些活动窗口不接受某些键组合,或者我想使用键盘快捷键对于通过我的脚本的后台进程,他们不需要通过活动窗口
到目前为止,我已经看过这些事情:
这些都是关于苹果的,并没有任何帮助.
还有这个:
这似乎可能是我需要的,但我找不到它的库或任何文档.
我也搜索了更多的地方,但还没有找到解决方案.
搜索了几个小时后,我想知道是否有可能模拟键盘上的keydown按键.例如,我希望我的程序按住x键五秒钟,所以当我在记事本中运行时,它看起来像是这样的:xxxxxxxxxxxxx.我在互联网上尝试了不同的代码,到目前为止我能找到的最好的东西是:
import ctypes
import time
user32 = ctypes.windll.user32
inputhex = raw_input("Please enter your desired key's code (HEX): ")
keycode = int(inputhex, 16)
time.sleep(1)
#VOID keybd_event(BYTE bVk, BYTE bScan, DWORD dwFlags, PTR dwExtraInfo);
user32.keybd_event(keycode,0,2,0) #is the code for KEYDOWN
time.sleep(5)
#user32.keybd_event(keycode,0,0,0) #is the code for KEYDUP[/code]
Run Code Online (Sandbox Code Playgroud)
Sendkey模块无法解决我的问题,因为它只允许您发送单个按键而不是保持按键事件.我知道autoit,在过去使用它,但我真的想知道这是否可能与python和如何.PS我正在使用python for windows
我必须使用Windows模拟包来执行重复性任务,每次都有稍微不同的选项.
由于我讨厌重复点击,基于懒惰和人类引入的错误数量,我想自动驾驶这个程序.有问题的程序不支持脚本,没有API,没有COM,nada,nyet,nravin.据我所知,自动驱动该程序的唯一方法是模仿人(即键盘和鼠标宏).
我知道AutoHotKey,但我认为它不符合我的要求.(或者它可能会做我想要的,但它的脚本语言很糟糕.)
要求是:
必须允许操作之间的时间延迟,或事件检测以触发操作.
模拟运行最多可能需要十分钟,因此GUI驱动程序必须等到模拟完成后再开始新模拟.
一种方法是等待十分钟,并希望模拟完成.另一种方法是使其成为事件驱动的,即观察"模拟运行..."对话框消失并替换为"模拟完成"对话框.
必须允许复杂键盘输入的组合.
每次模拟运行所需的一些键盘输入是不同的.例如,模拟描述可能采用格式,[Project name][Scenario name][Option 1][Option 2]...并且必须为每个模拟输入.
我知道AutoHotKey允许基本级别的输入自定义,但我随意阅读文档使得脚本语言看起来像某种恶意恐怖.
这是为了工作,所以任何解决方案都必须免费用于商业用途.
我将接受任何符合上述标准的解决方案,但我非常喜欢可以从Python驱动的东西.但是,我也会接受自动化的GUI测试工具,我可以自定义做我想要的 - 可能是一个Win32 GUI相当于Selenium的浏览器? - 键盘宏录制器,它将生成自定义输出或其他任何有效的输出.
如何在Python中控制鼠标和键盘?
我们的想法与Java中的Robot()类相同.能够说:将鼠标从这里移动到这里,点击那里,写出屏幕上的任何内容.
对于Windows,有win32api,但我主要使用的是Linux.
对于Linux有Xlib,但它也适用于键盘吗?(仅发现鼠标的参考)
有跨平台的解决方案吗?(Linux,Windows甚至OS X都会很棒.)
我需要把注意力集中到一个指定的窗口,而我正在看到的唯一方法就是尽量减少它前面的所有窗口,直到我得到正确的窗口...
我该怎么做?
Windows 7,没有特定的工具包....
每种类型的窗口,例如firefox和console命令
这段代码(灵感来自哪个是在 Python 上模拟键盘和鼠标的最简单方法?)打开一个记事本并每秒发送 A、B、C、D、...、Z 键:
import win32com.client, time
shell = win32com.client.Dispatch("WScript.Shell")
shell.Run('Notepad')
time.sleep(1)
shell.AppActivate("Notepad")
for i in range(65,91):
shell.SendKeys(chr(i))
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
我想让这个操作在后台继续,继续我在计算机上的工作,并将击键发送到记事本(在后台)。
问题:如果我同时打开另一个应用程序(例如:浏览器),击键将被发送到当前活动窗口,这是我不想要的!
问题:即使此应用程序不在前台,如何让 Python仅将击键发送到 notepad.exe ?
上下文:我正在自动化一些长期任务,要求我的 Python 脚本app.exe在大约 15 分钟内向(在后台)发送击键,但同时我想用计算机做其他事情。
注意:更一般地说,我感兴趣的用例是进程 app.exe 可能打开对话框、关闭对话框、打开其他窗口的情况,因此解决方案应该能够将击键发送到进程的活动窗口. 因此,像这里这样具有固定 hWnd 的解决方案不能直接工作。