这段代码(灵感来自哪个是在 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 的解决方案不能直接工作。
我正在尝试SendMessage将键盘输入发送到另一个窗口.我知道缺点,但我必须这样做,因为我必须发送几个键,我不能保证窗口将有焦点 - 所以当窗口没有焦点时这必须工作.
我正在通过尝试将密钥发送到记事本窗口来测试它.我尝试了以下变化,但没有一个有效:
def post_keys1(hwnd):
win32api.SendMessage(
hwnd, win32con.WM_KEYDOWN, ord('A'),
0 + (0 << 8) + (ord('A') << 16) + (0 << 24))
win32api.SendMessage(
hwnd, win32con.WM_CHAR, ord('A'),
0 + (0 << 8) + (ord('A') << 16) + (0 << 24))
win32api.SendMessage(
hwnd, win32con.WM_KEYUP, ord('A'),
0 + (0 << 8) + (ord('A') << 16) + (0xC0 << 24))
def post_keys2(hwnd):
win32api.PostMessage(
hwnd, win32con.WM_KEYDOWN, ord('A'),
0 + (0 << 8) + (ord('A') << 16) + (0 << 24))
win32api.PostMessage(
hwnd, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Pywin32向无效的TeraTerm窗口发送击键.
这个答案让我写了这段代码:
import win32gui
import win32con
import win32api
hwndMain = win32gui.FindWindow("Tera Term VT", None)
print hwndMain
hwndChild = win32gui.GetWindow(hwndMain, win32con.GW_CHILD)
win32api.PostMessage(hwndChild, win32con.WM_CHAR, 0x5b, 0)
Run Code Online (Sandbox Code Playgroud)
但是:
hwndMain = win32gui.FindWindow("Tera Term VT", None)返回0,它找不到窗口.
如果我换"Tera Term VT"到"Notepad",我很乐意整天将键击发送到活动的记事本窗口.那么,为什么我不能进入TeraTerm窗口?
PyHANDLE = FindWindow(ClassName,WindowName)
ClassName:PyResourceId要查找的窗口类的名称或原子,可以是None
WindowName:string要查找的窗口的标题,可以是None
那么如何才能使用正确的ClassName呢?
我已经尝试了几乎每一个变化Tera Term VT,逃避空间:"Tera\ Term\ VT"用单引号括起整个:"'Tera Term VT'"但是没有任何作用.我甚至尝试使用进程的名称:"ttermpro.exe",并"COM11:115200baud - Tera Term VT"在绝望中将子名称包含在字符串中,但没有任何作用.
有趣的是,这个:
import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
shell.AppActivate("Tera Term …Run Code Online (Sandbox Code Playgroud)