щелкните пункт контекстного меню, используя sendmessage (или аналогичную функцию) - PullRequest
1 голос
/ 25 мая 2009

Мне нужно щелкнуть правой кнопкой мыши другое приложение, получить его контекстное меню (которое было открыто после щелчка правой кнопкой мыши) и затем выбрать элемент из него.

Я могу использовать postMessage с другим дескриптором приложения, и в результате появилось запрошенное контекстное меню, но я не знаю, как его выбрать.

</p> <pre><code> public const int WM_RBUTTONDOWN = 0x0204; public const int WM_RBUTTONUP = 0x0205; [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SendMessage", CharSet = System.Runtime.InteropServices.CharSet.Auto)] public static extern void SendMessage(IntPtr hWnd, int msg, int wParam, int lParam); [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "PostMessage", CharSet = System.Runtime.InteropServices.CharSet.Auto)] public static extern void PostMessage(IntPtr hWnd, int msg, int wParam, int lParam); Point p = Cursor.Position; PostMessage((IntPtr)123456, WM_RBUTTONDOWN, 0, 0); PostMessage((IntPtr)123456, WM_RBUTTONUP, 0, 0);

что мне делать дальше (теперь открыто контекстное меню)?

спасибо, Томер.

1 Ответ

0 голосов
/ 25 мая 2009

Полагаю, вы хотите запустить определенное действие. Нет необходимости открывать контекстное меню: просто опубликуйте сообщение WM_COMMAND , соответствующее элементу контекстного меню, который вы хотите выбрать. Вы найдете идентификатор элемента WM_COMMAND, связанный с нужным элементом меню, используя такие инструменты, как Spy ++ или Winspector .

PostMessage((IntPtr)hWnd, WM_COMMAND, 0, ID_MENU_ITEM);

РЕДАКТИРОВАТЬ: Уточнение в ответ на ваш комментарий:

Вы отправляете или публикуете сообщение WM_COMMAND прямо в главное окно, а не в меню. На самом деле, вам вообще не нужно открывать меню. Контекстное меню - это просто элемент графического интерфейса, который позволяет пользователю выбрать действие. Приложению не нужно, чтобы меню отображалось для передачи указанного действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...