Pregunta

La aplicación de destino está escrita en Delphi (win32 no .NET) y es de código cerrado.

La acción que quiero invocar se llama Copiar, pero no hay un atajo de teclado obvio. (Ctrl + Insertar hace lo incorrecto y Ctrl + C no hace nada)

Puedo encontrar mi HWND objetivo y persuadirlo para que abra el menú contextual (responde a WM_RBUTTONDOWN / UP no WM_CONTEXTMENU ). Desde el menú HWND incluso puedo obtener el identificador de menú a través de MN_GETHMENU y encontrar el elemento de menú que quiero. Simplemente no conozco los detalles de cómo "elegir" el objeto. No ayuda que el menú sea " modeless " ;, es decir. su HWND no es de su propiedad, por lo que no sé cuál de las muchas ventanas ocultas de TPUtilWindow es el verdadero propietario; de lo contrario, podría enviar un WM_COMMAND y ni siquiera aparece el menú, que sería preferible.

Aunque estoy seguro de que facilita todo tipo de hacks, preferiría no inyectar código en el proceso de destino.

Respuestas aceptadas en cualquier idioma.

¿Fue útil?

Solución

Aparentemente, puedes enviar mensajes WM_RBUTTONDOWN / UP y responde. Si es así, ¿también puede enviar mensajes de WM_KEYDOWN / UP ? Siempre que conozca la estructura del menú y no cambie, intente indicarle a la aplicación que alguien está presionando la flecha hacia abajo X veces y luego presionando ENTER. Esa parece ser la solución más simple para mí ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top