SuperMiQi Ответов: 2

Как программно закрыть главное меню другого приложения.


Всем Привет.

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

Что может быть волшебным событием, чтобы закрыть меню из другого приложения?
Заранее большое вам спасибо.
С уважением.
Мики.

Что я уже пробовал:

Я пытался применить SetFocus к мэйнфрейму или сообщению WM_EXITMENULOOP, но в настоящее время мне это не удалось.
Я даже применил refreshwindow, но главное меню остается открытым.

2 Ответов

Рейтинг:
1

Jochen Arndt

Вы отметили свой вопрос как C++ и C#. Поэтому я дам только общий ответ.

Хотя существует множество методов IPC (Межпроцессной связи), похоже, что здесь уместно использовать сообщения Windows.

Чтобы использовать это, отправитель должен знать, какое сообщение должно быть отправлено в какой дескриптор окна. Общий метод заключается в определении сообщения и реализации обработки в главном окне принимающего приложения. Затем этот обработчик может инициировать дальнейшие действия, такие как закрытие меню.

Для отправки сообщения Вы можете использовать Функция SendMessage (Windows)[^] или Функция PostMessage (Windows)[^]. Но вы должны знать дескриптор окна принимающего приложения, которое обрабатывает сообщение. Вы можете получить это, используя Функция FindWindow (Windows)[^] с зарегистрированным именем класса окна и / или заголовком. В качестве альтернативы используйте Функция BroadcastSystemMessage (Windows)[^] для отправки сообщения всем приложениям (получателям BSM_APPLICATIONS и флаг BSF_IGNORECURRENTTASKТогда вам не нужен дескриптор окна, но вы должны убедиться, что сообщение уникально (см. ниже).

Для сообщения Вы можете использовать WMP_APP идентификатор основе (WM_USER не рекомендуется). Лучшим решением было бы использование зарегистрированного сообщения, которое обеспечивает уникальный идентификатор (см. Функция RegisterWindowMessage (Windows)[^]). Смотреть также О сообщениях и очередях сообщений (Windows)[^].

Все вышеперечисленные функции также можно использовать с C# с помощью P/Invoke.


Рейтинг:
1

xXxRevolutionxXx

Теперь я не знаю решения вашего вопроса. Но...одна (не очень профессиональная) вещь, которую вы могли бы сделать... это создать внешний файл (например, в AppData), и приложение, меню которого должно быть закрыто ... проверит наличие там условия. Если он соответствует "требованиям", то закроет меню. Если нет... он будет держать ее открытой. И из другого приложения.. вы фактически будете контролировать "состояние" файла.


SuperMiQi

Здравствуйте Сэр,
Спасибо за ваш ответ.
У меня уже есть механизм, чтобы вызвать действие. Единственное неизвестное-это какое событие sendmessage вызвать, чтобы закрыть открытое меню.
У тебя есть идея?
Заранее большое вам спасибо.
С уважением.
Мики