使用 Python 将按键发送到不同的窗口
Posted
技术标签:
【中文标题】使用 Python 将按键发送到不同的窗口【英文标题】:Sending key presses to a different window using Python 【发布时间】:2017-11-19 19:50:33 【问题描述】:我正在尝试实现一些非常简单的事情 - 使用我想要的脚本:
-
启动软件
填写用户名
按标签
填写密码
按回车
我无法执行第 3 步和第 5 步。这是我的代码:
import win32api
import win32gui
import win32con
def send_keys(hwnd, username, password):
for c in username:
win32api.PostMessage(hwnd, win32con.WM_CHAR, ord(c), 0)
win32api.keybd_event(win32con.VK_TAB, 0, win32con.KEYEVENTF_EXTENDEDKEY, 0) # DOES NOT WORK
for c in password:
win32api.PostMessage(hwnd, win32con.WM_CHAR, ord(c), 0)
win32api.keybd_event(win32con.VK_RETURN, 0, win32con.KEYEVENTF_EXTENDEDKEY, 0) # DOES NOT WORK
def main():
[...] # Run software, it pops as foreground window
hwnd = win32gui.GetForegroundWindow()
send_keys(hwnd, 'some_username', 'some_password')
if __name__ == '__main__':
main()
当我在记事本中运行脚本的按键部分 (send_keys
) 时,它会正确发送选项卡和返回/输入键,但是它不适用于预期的软件。有什么建议么?
【问题讨论】:
一次tab
按键是否足以让您的密码输入成为焦点?
为什么每个人和他们的狗都痴迷于 UI 自动化应该通过伪造输入来完成的想法?当您需要自动化 UI 时,为什么不使用 UI 自动化?
【参考方案1】:
PostMessage
可能返回一个非零值。
如果您在PostMessage
之后调用GetLastError
,您可能会得到 5=access denied。
在过去,每个人都可以从任何应用程序向任何窗口发送消息,但如今的安全性大部分时间都被禁止了。
您想要达到的目标可以通过SendInput
方法完成。
【讨论】:
以上是关于使用 Python 将按键发送到不同的窗口的主要内容,如果未能解决你的问题,请参考以下文章
怎么使用EXTJS 实现点击一个按键然后弹出一个窗口,并且在弹出窗口时能发送请求到服务器然后接受