Как программно выбрать пункт контекстного меню в другом приложении? - PullRequest
5 голосов
/ 06 мая 2009

Целевое приложение написано на Delphi (win32 не .NET) и имеет закрытый исходный код.

Действие, которое я хочу вызвать, называется Копировать, но очевидного сочетания клавиш не существует. (Ctrl + Insert делает не то, а Ctrl + C ничего не делает)

Я могу найти свою цель HWND и убедить ее открыть контекстное меню (оно отвечает WM_RBUTTONDOWN/UP, а не WM_CONTEXTMENU). Из меню HWND я могу даже получить дескриптор меню через MN_GETHMENU и найти нужный пункт меню. Я просто не знаю деталей того, как «выбрать» предмет. Не помогает, что меню "немодальное", т.е. его HWND не принадлежит, поэтому я не знаю, какое из многих скрытых TPUtilWindow окон является реальным владельцем - в противном случае я мог бы просто отправить ему WM_COMMAND и даже не открыть меню, которое было бы предпочтительным .

Хотя я уверен, что это облегчает все виды взломов, я бы предпочел не внедрять код в целевой процесс.

Ответы принимаются на любом языке.

1 Ответ

8 голосов
/ 06 мая 2009

Видимо, вы можете отправить ему WM_RBUTTONDOWN/UP сообщений, и он отвечает. Если да, можете ли вы также отправить WM_KEYDOWN/UP сообщения? Если вы знаете структуру меню и она не меняется, попробуйте сообщить приложению, что кто-то нажимает стрелку вниз X несколько раз, а затем нажимает ENTER. Это кажется самым простым решением для меня ...

...