Сидить програміст в їдальні, обідає, суп їсть. В окулярах такий, замислений, програму думає. Народу нікого, все вже поїли, пішли. Підходить до нього офіціантка і заграє:
- Якщо Ви хочете добре провести час, то мене звуть Маша!
Програміст повільно повертається на землю і дивиться на офіціантку відчуженим поглядом і на автопілоті запитує:
- А якщо не хочу, то як Вас звати.
Інший спосіб - за списком завантажених додатків
Даний приклад не завжди застосуємо - часто заголовок додатка змінюється при кожному старті, тому розглянемо більш надійний спосіб - через FileMapping
Справа в тому, що можна в пам'яті створювати тимчасові файли. При перезавантаженні вони губляться, а так існують. До речі, цей метод можна використовувати і для обміну інформацією між вашими додатками. Приклад з використанням FileMapping:
Часто при роботі у користувача може бути відкрито 5-20 вікон і повідомлення про те, що програма вже запущено призводить до того, що він змушений півгодини шукати раніше запущену копію. Вихід зі становища - знайшовши копію програми активувати її, для чого в останньому прикладі перед HALT необхідно додати рядок. SetForegroundWindow (Wnd);
Блокування запуску другої копії за допомогою Mutex На мій погляд, це один з найпростіших і надійних способів.
В даному прикладі при старті додатка створюється м'ютекс з деяким унікальним ім'ям (у кожної програми воно повинно бять своє.). Якщо хоч одна копія додатку запущена, то в системі вже буде м'ютекс з таким ім'ям і виникне помилка ERROR_ALREADY_EXISTS. В іншому випадку м'ютекс створюється і існує, поки працює ця копія додатка Задати питання