¿Qué SendMessage usar para enviar claves directamente a otra ventana?

Estoy intentando usar SendMessage para enviar entradas de teclado a otra ventana. Conozco los inconvenientes, pero tengo que hacerlo ya que tengo que enviar varias teclas y no puedo garantizar que la ventana esté enfocada, por lo que esto tiene que funcionar cuando la ventana no está enfocada.

Lo estoy probando intentando enviar claves a una ventana de bloc de notas. He probado las siguientes variaciones, y ninguna ha funcionado:

 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) 

Cuando escribí la pregunta, entendí que SendKeys es la forma correcta de generar entradas de teclado, y esa es la única que funciona en todos los casos. Sin embargo, no pude usar SendKeys , ya que la computadora en la que se ejecuta mi progtwig se usará activamente mientras mi progtwig se ejecuta, lo que significa que puede hacer clic con el mouse en cualquier momento que cambiará el enfoque de la ventana y hará que SendKeys comience a enviar. entrada a la ventana equivocada.

Lo que quería saber era por qué, en particular, mi código no funcionaba: ¿estaba haciendo algo mal con los tipos de mensajes que estaba enviando? Post vs. Send ? ¿Qué debería ser WPARAM ? Etc … La respuesta fue probablemente porque estaba enviando los mensajes a la ventana del Bloc de notas, y no al control de edición que se encuentra dentro del Bloc de notas; sospecho que funcionará.

De todos modos, intenté enviar información a la aplicación en la que quería que funcionara, y esto terminó funcionando:

 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) 

Entonces, la respuesta es que no estaba haciendo nada incorrecto en cuanto a los tipos de mensajes o el contenido del mensaje, era solo un destino incorrecto.