在Python中将密钥发送到非活动窗口

在Python中将密钥发送到非活动窗口,python,winapi,process,window,key,Python,Winapi,Process,Window,Key,我试图在Python程序的另一个进程中按下一个键。我已经尝试了win32 api,但不知怎么的,这段代码什么也没做: import win32gui import win32con import win32api hwnd = win32gui.FindWindow("notepad", "prueba.txt: Bloc de notas") if(hwnd != 0): win32api.SendMessage(hwnd, win32con.WM_KEYDOWN, win32c

我试图在Python程序的另一个进程中按下一个键。我已经尝试了win32 api,但不知怎么的,这段代码什么也没做:

import win32gui
import win32con
import win32api

hwnd = win32gui.FindWindow("notepad", "prueba.txt: Bloc de notas")

if(hwnd != 0):

    win32api.SendMessage(hwnd, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
    win32api.SendMessage(hwnd, win32con.WM_KEYUP, win32con.VK_RETURN, 0)

    while(True):

        win32api.SendMessage(
            hwnd,
            win32con.WM_CHAR,
            ord('x'),
            0)
else:
    print("The window is closed")
当然,我希望对非活动窗口执行此操作。有什么解决方案或替代方案吗


谢谢

目标窗口错误。记事本有多个窗口:它有一个带子编辑控件的框架窗口。要使代码正常工作,您应该在代码中找到一个子帧(=hwnd),它是一个编辑控件,并向它发送WM_字符。

使用(但添加错误检查)


如果您想循环发送邮件,您应该添加一些“睡眠”呼叫:-)

谢谢大家。不支持postmessage的模拟器和游戏呢?我尝试过keybd_事件,但它非常慢,因为您必须等待0.1秒。如果您不能或不想使用PostMessage WM_CHAR(或WM_KEYDOWN),则只剩下SendInput。我不知道SendInput需要任何“等待”;看看张贴的代码是否适合你,你应该接受答案。当你有更多的重复次数时,你可能可以对答案进行投票。我认为SendInput在模拟器和游戏中不起作用:(无论如何,如果我的代码帮助你用“x”填充记事本,你可以接受答案:-)如果
keybd_event
起作用,
SendInput
也应该起作用。如果
SendInput
不起作用,我不知道还有其他解决方案。
hwndMain = win32gui.FindWindow("notepad", "prueba.txt: Bloc de notas")
hwndEdit = win32gui.FindWindowEx( hwndMain, 0, "Edit", 0 )
win32api.PostMessage( hwndEdit,win32con.WM_CHAR, ord('x'), 0)