将密钥发送到Python中的非活动窗口[重复]
Posted
技术标签:
【中文标题】将密钥发送到Python中的非活动窗口[重复]【英文标题】:Send keys to a inactive window in Python [duplicate] 【发布时间】:2014-03-21 23:53:49 【问题描述】:我正在尝试在 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")
当然,我想对非活动窗口执行此操作。任何解决方案或替代方案?
谢谢
【问题讨论】:
【参考方案1】:使用(但添加错误检查)
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)
如果你想循环发布消息,你应该添加一些“睡眠”调用:-)
【讨论】:
谢谢你们。不接受 postmessage 的模拟器和游戏怎么办?我试过 keybd_event 但它真的很慢,因为你必须等待 0.1 秒。 如果您不能或不想使用 PostMessage WM_CHAR(或 WM_KEYDOWN),那么您就剩下 SendInput。我不知道 SendInput 需要任何“等待”;请参阅msdn.microsoft.com/en-us/library/windows/desktop/ms646310.aspx 如果发布的代码对您有用,您应该接受答案。当您有更多代表时,您也许可以对答案进行投票。 我认为 SendInput 在模拟器和游戏中不起作用:( 无论如何,如果我的代码帮助您在记事本中填写“x”,您可以接受答案:-) 如果keybd_event
有效,SendInput
也应该有效。如果SendInput
不起作用,我不知道其他解决方案。【参考方案2】:
目标窗口错误。记事本有多个窗口:它有一个带有子编辑控件的框架窗口。为了使您的代码正常工作,您应该找到一个作为编辑控件的框架的子项(= 代码中的 hwnd)并向其发送 WM_CHAR。
【讨论】:
以上是关于将密钥发送到Python中的非活动窗口[重复]的主要内容,如果未能解决你的问题,请参考以下文章