使用Python将按键发送到不同的窗口

时间:2017-11-19 19:50:33

标签: python winapi pywin32 win32gui

我正在努力实现一些非常简单的事情 - 我想要一个脚本:

  1. 启动软件
  2. 填写用户名
  3. 按Tab键
  4. 填写密码
  5. 按enter
  6. 我无法让第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)时,它会发送标签并正确返回/输入密钥,但是,它不适用于目标软件。有什么建议?

1 个答案:

答案 0 :(得分:0)

PostMessage可能会返回非零值。

如果您在GetLastError之后拨打PostMessage,则可能会获得5 =拒绝访问权限。

在过去,每个人都可以从任何应用程序向任何窗口发送消息,但在今天的安全性中,大部分时间都是禁止的。

您希望实现的目标可以使用SendInput方法完成。