Python 使用什么SendMessage将密钥直接发送到另一个窗口?
我正在尝试使用Python 使用什么SendMessage将密钥直接发送到另一个窗口?,python,winapi,input,pywin32,Python,Winapi,Input,Pywin32,我正在尝试使用SendMessage将键盘输入发送到另一个窗口。我知道缺点,但我必须这样做,因为我必须发送几个键,我不能保证窗口会有焦点-所以当窗口没有焦点时,这必须起作用 我试着将按键发送到记事本窗口来测试它。我尝试过以下几种变体,但都没有成功: def post_keys1(hwnd): win32api.SendMessage( hwnd, win32con.WM_KEYDOWN, ord('A'), 0 + (0 << 8) + (or
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, win32con.WM_CHAR, ord('A'),
0 + (0 << 8) + (ord('A') << 16) + (0 << 24))
win32api.PostMessage(
hwnd, win32con.WM_KEYUP, ord('A'),
0 + (0 << 8) + (ord('A') << 16) + (0xC0 << 24))
def post_keys3(hwnd):
win32api.SendMessage(hwnd, win32con.WM_CHAR,
ord('A'), 0)
def post_keys4(hwnd):
win32api.PostMessage(hwnd, win32con.WM_CHAR,
ord('A'), 0)
def post_keys5(hwnd):
win32api.PostMessage(hwnd, win32con.WM_KEYDOWN, ord('A'), 0)
win32api.PostMessage(hwnd, win32con.WM_CHAR, ord('A'), 0)
win32api.PostMessage(hwnd, win32con.WM_KEYUP, ord('A'), 0)
def post_keys6(hwnd):
win32api.SendMessage(hwnd, win32con.WM_KEYDOWN, ord('A'), 0)
win32api.SendMessage(hwnd, win32con.WM_CHAR, ord('A'), 0)
win32api.SendMessage(hwnd, win32con.WM_KEYUP, ord('A'), 0)
def post_键1(hwnd):
win32api.SendMessage(
hwnd,win32con.WM_KEYDOWN,ord('A'),
0 + (0当我写这个问题时,我知道SendKeys
是生成键盘输入的正确方法,而且这是唯一一种在所有情况下都有效的方法。但是,我不能使用SendKeys
,因为我的程序正在运行的计算机将在我的程序运行时被积极使用,这意味着鼠标点击可能在某个时间发生y时间将改变窗口的焦点,并使SendKeys
开始向错误的窗口发送输入
我想知道的是为什么我的代码不起作用——我发送的消息类型是否有问题?Post
vs.Send
?WPARAM应该是什么?等等……答案可能是因为我将消息发送到记事本窗口,而不是发送到我的编辑控件de记事本-我怀疑这会起作用
不管怎样,我尝试将输入发送到我希望它实际工作的应用程序,但最终成功:
def send_input_hax(hwnd, msg):
for c in msg:
if c == "\n":
win32api.SendMessage(hwnd, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
win32api.SendMessage(hwnd, win32con.WM_KEYUP, win32con.VK_RETURN, 0)
else:
win32api.SendMessage(hwnd, win32con.WM_CHAR, ord(c), 0)
因此,答案是,就消息类型或消息内容而言,我没有做错任何事情,只是到达了一个错误的目的地。+1但这只是一个注意事项,以防它发生在其他人身上:在某些应用程序中,你必须使用PostMessage
而不是SendMessage
来模拟VK\u返回到工作K