2009-09-28 2 views
1

Что такое одобренный способ обработки второго, третьего и т. Д. Приложений в приложении Windows (C++)? В этом случае мне нужно запустить (первый) экземпляр, чтобы выполнить какое-то специальное действие (всплывающее диалоговое окно), но для завершения вторичных экземпляров.Обнаружение нескольких запусков приложения Windows

На Mac AppleEvents отправляет вам сообщение «повторно открыть» в этом сценарии. Mozilla в Windows использует DDE для проверки существующего экземпляра и передачи командной строки. Все равно это похоже на довольно неприятное решение.

ответ

1

В окнах нет решения для этого, по крайней мере, не из коробки.

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

6

Путь окон заключается в том, чтобы открыть именованный мьютекс, и, если вы его приобретете, это означает, что вы первый экземпляр, если нет, есть еще один. На этом этапе вы можете зарегистрировать сообщение Windows (функция буквально RegisterWindowsMessage), которая дает вам WM_ msg, который вы можете отправить во все окна, и только ваше приложение будет знать, чтобы поймать его, что позволяет вам сообщить исходной копии, чтобы открыть диалог коробка или w/e.

2

How to limit 32-bit applications to one instance in Visual C++

«Метод, который используется в этой статье, является тот, который описан в MSDN по теме WinMain. Он использует CreateMutex функцию, чтобы создать именованный семафор, который может быть проверен в различных процессах. Вместо того, чтобы дублировать один и тот же код для каждого приложения, которое вы будете использовать как один экземпляр, код, который вы должны иметь, находится в классе оболочки C++, который вы можете повторно использовать в каждом приложении ».

SendMessage Function

«Посылает указанное сообщение в окно или окно. Функция SendMessage вызывает оконную процедуру для указанного окна и не возвращается, пока оконная процедура не обработает сообщение.»

«Приложения, которые должны связываться с использованием HWND_BROADCAST, должны использовать функцию RegisterWindowMessage для получения уникального сообщения для взаимодействия между приложениями».

RegisterWindowMessage «Функция RegisterWindowMessage определяет новое оконное сообщение, которое гарантировано будет уникальным во всей системе. Значение сообщения может использоваться при отправке или отправке сообщений».

0

Существует одна проблема с методом CreateMutex, которую может потребоваться рассмотреть - именованный мьютекс мог быть создан третьей стороной. Теперь, большую часть времени, это не будет проблемой, не было бы причин, чтобы кто-то другой блокировал ваше приложение. Однако, если вы делаете программу, которая делает что-то важное, это может быть проблемой. Учтите, что если ваша программа была антивирусом, вирус может отключить ее, создав мьютекс.

Обычно CreateMutex должен выполнять эту работу, но вы должны знать пределы этого метода.

+0

Я думал, что вы должны запускать такие приложения безопасности, как службы или на Windows Secure Desktop. –

+0

Zan, вы правы в этом, это был просто пример. Вы можете применить эту идею к MS-Word/OpenOffice. Но они не опустились бы до таких оценок: - Если у вас есть агрессивный конкурент, они могут использовать такую ​​систему, чтобы остановить ваше приложение. – Skizz

Смежные вопросы