Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Какими путями можно предотвратить запуск второй копии программы на Win32-совместимой

6.8K
09 сентября 2004 года
VoldemarS
8 / / 09.09.2004
Какими путями можно предотвратить запуск второй копии программы на Win32-совместимой ОС
3
09 сентября 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by VoldemarS
Какими путями можно предотвратить запуск второй копии программы на Win32-совместимой ОС



Созданием глобального именнованного объекта.
Например, мьютекса (см. CreateMutex)

246
09 сентября 2004 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by VoldemarS
Какими путями можно предотвратить запуск второй копии программы на Win32-совместимой ОС


Код:
#include <vcl.h>
#pragma hdrstop
USERES("Project1.res");
USEFORM("Main.cpp", Form1);

WINAPI WinMain(
  HINSTANCE, HINSTANCE, LPSTR cmdLine, int)
{
  try {
    // попытка открыть Mutex
    HANDLE hMutex = OpenMutex(
      MUTEX_ALL_ACCESS, 0, "Mutex1.0");
     
    if (!hMutex)//если прогр. запускается первый раз, то создаем Mutex
      hMutex = CreateMutex(0, 0, "Project1.0");
    else {
      // если это вторая копия
      // находим первую, ее на передний план
      HWND hWnd = FindWindow(
        0, "Project1.0");
      SetForegroundWindow(hWnd);

      // если передан параметр в ком. стр.
      // пошлем первую копию на... через WM_COPYDATA.
      if (strlen(cmdLine) != 0) {
        COPYDATASTRUCT cds;
        cds.cbData = strlen(cmdLine);
        cds.lpData = cmdLine;
        SendMessage(
          hWnd, WM_COPYDATA, 0, (LPARAM)&cds);
      }
      //и завершаем работу второй копии...
      return 0;
    }
    //здесь понеслась первая копия...
    Application->Initialize();
    Application->CreateForm(
      __classid(TForm1), &Form1);
    Application->Run();

    ReleaseMutex(hMutex);
  }
  catch (Exception &exception) {
    Application->ShowException(&exception);
  }
  return 0;
}


Имя Mutex-a лучше сгенерить как GUID (в редакторе BCB нажать Crtl+G), для поиска окна тоже самое + искать по имени класса, а не заголовка.
6.3K
09 сентября 2004 года
xTrim
38 / / 11.06.2004
я тут даже оберточку нарисовал для этого дела

использование:
#include "sys_single.h"
const AnsiString guid = "My Cool Programm";// тут уникальный идентификатор программмы, можно получить нажав ctrl+shift+g в IDE;
...
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
single guard(guid);
guard.silient(); // без этого выводиться предупреждение что программа уже запущена
guard.change_title(); // менять заголовок программы (берется из Version Info)
if (!guard()) return 1; // проверка и выход если есть копия
...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог