Запуск внешнего exe в MFC, как я могу вывести exe на фронт, если он уже открыт? - PullRequest
1 голос
/ 08 февраля 2010

Мне нужно открыть внешнюю программу в своем приложении MFC, которая работает, но если я уже нажал кнопку, я не хочу, чтобы она открывала другой экземпляр, а просто выводила его на передний план. Документы говорят, что параметр SW_SHOWNORMAL делает это, но он не работает для меня. Должна ли вызываемая программа также настраиваться на это?

ShellExecute(NULL, "open", "C:\Test\blahblah.exe", NULL, NULL, SW_SHOWNORMAL);

Спасибо, CP

1 Ответ

4 голосов
/ 08 февраля 2010

Документация немного неясна, что могло вас смущать. При назначении исполняемой программы ShellExecute() всегда запускает новый процесс. Что касается документации, когда упоминается восстановление свернутого окна, так это то, что если вы нацелены на документ (например, документ Word), и приложение, зарегистрированное для отображения документа, уже запущено.

Лучше всего:

  • Измените внешнюю программу так, чтобы она поддерживала шаблон Singleton , и чтобы она была впереди и в центре, если вы попытаетесь запустить вторую копию, или
  • Используйте FindWindow() в приложении MFC, чтобы попытаться найти внешнее приложение, а затем запускайте ShellExecute(), только если оно еще не существует, в противном случае активируйте существующее окно.
...