Como escolher programaticamente um item de menu de contexto em outro aplicativo?
-
06-07-2019 - |
Pergunta
O aplicativo de destino está escrito em Delphi (Win32 não .NET) e é de código fechado.
A ação que eu quero para invocar é chamado de cópia, mas não há nenhum atalho de teclado óbvio. (Ctrl + Insert faz a coisa errada e Ctrl + C não faz nada)
posso encontrar meu HWND
alvo e convencê-lo a abrir o menu de contexto (ele responde a WM_RBUTTONDOWN/UP
não WM_CONTEXTMENU
). Do HWND
menu I ainda pode obter o identificador do menu via MN_GETHMENU
e encontrar o item de menu que eu quero. Eu só não sei os detalhes de como a "escolher" o item. Não ajuda que o menu é "modal", ie. sua HWND
não é propriedade, então eu não sei qual das muitas janelas TPUtilWindow
escondidos é o verdadeiro proprietário - caso contrário eu provavelmente poderia simplesmente enviar-lhe um WM_COMMAND
e nem sequer aparecer o menu, que seria preferível
Embora eu tenho certeza que facilita a todos os tipos de hacks, eu preferiria não código de injetar no processo de destino.
Respostas aceito em qualquer idioma.
Solução
Aparentemente, você é capaz de enviá-lo WM_RBUTTONDOWN/UP
mensagens e responde. Se assim for, você pode também enviar mensagens WM_KEYDOWN/UP
? Contanto que você conhece a estrutura do menu e isso não muda, tente dizer o aplicativo que alguém de pressionar a seta para baixo X número de vezes e, em seguida, pressionar Enter. Que parece ser a solução mais simples para mim ...