С одного форума:
Не обязательно использовать Мьютексы, можно использовать любые именованые объекты системы… Суть механизма состоит в том, что приложение при старте пытается создать именованый объект который для системы имеет уникальный идентификатор, если объект создается - значит это первая и единственная копия данного приложения, если получаем исключение, значит приложение уже запущено, посылаем ему сообщение чтобы оно “выплыло” на передний план и закрываемся.
Литература по этой теме, которая есть в инете в основной массе написана для делфи. Какие есть там способы:
1. Использование мьютексов (основан на том, что в системе может сущестоввать только один мьютекс с заданным именем)
2. Использование заголовка окна
3. Ещё используются другие объекты с уникальным идентификатор (подобно мьютексам)
4. В С++ играются с разделяемыми переменными
В модуле os есть функция getpid(), которая возвращает идентификатор процесса, но при каждом запуске приложения ID меняется…
Есть идея попробовать создавать времнный файл при запуске и смотреть существет ли он или нет…