Delphi программа уже запущена

Подскажите пожалуйста, как лучше всего проверить не запущено ли уже приложение и не дать запустить копию.

Re: Builder, запущена ли уже программа

От: Slava Antonov http://deadbeef.narod.ru
Дата: 13.10.06 00:04
Оценка:

Hello Mobil1, you wrote:

> Подскажите пожалуйста, как лучше всего проверить не запущено ли уже приложение и не дать запустить копию.

Создать какой-нить глобальный объект ядра и проверять его наличие. Например Mutex.


Всего хорошего, Слава.
Если в вопросе нет никакого смысла, то не стоит его искать и в ответе.
http://deadbeef.narod.ru (ICQ: 197577902)

Posted via RSDN NNTP Server 2.0
Re: Builder, запущена ли уже программа

От: Rius
Дата: 13.10.06 01:18
Оценка:

Здравствуйте, Mobil1, Вы писали:

Change Autocom or Delphi ComPort settings for VCI [Working 100%]



M>Подскажите пожалуйста, как лучше всего проверить не запущено ли уже приложение и не дать запустить копию.
Как избежать запуска нескольких экземпляров приложения

Автор(ы): Dr. Joseph M. Newcomer
Дата: 17.02.2001

В статье подробно рассматриваются различные способы ограничения числа запущенных копий приложения одной. Указываются недостатки и даже ошибки во многих известных методах решения задачи, которые постоянно фигурируют в конференциях и в Сети. Кроме того, указывает на различные трактовки понятия «одна копия приложения» и демонстрирует правильное решение для каждого из случаев.

Re: Builder, запущена ли уже программа

От: Аноним
Дата: 13.10.06 10:25
Оценка:

M>Подскажите пожалуйста, как лучше всего проверить не запущено ли уже приложение и не дать запустить копию.

Источник: www.rsdn.org

Как сделать исключение повторного запуска программы в Delphi?

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

Читайте также:
Пример цикла с постусловием в программе изображен

Отслеживать

51.1k 83 83 золотых знака 263 263 серебряных знака 501 501 бронзовый знак

задан 20 окт 2011 в 15:04

1 1 1 серебряный знак 1 1 бронзовый знак

4 ответа 4

Сортировка: Сброс на вариант по умолчанию

Я обычно делаю так:

implementation var g_hAppMutex: THandle; function OneInstance: boolean; var g_hAppCritSecMutex: THandle; dw: Longint; begin g_hAppCritSecMutex := CreateMutex( nil, true, PChar(Application.Title + ‘.OneInstance32.CriticalSection’) ); g_hAppMutex := CreateMutex( nil, false, PChar(Application.Title + ‘OneInstance32.Default’) ); dw := WaitForSingleObject( g_hAppMutex, 0 ); Result := (dw <> WAIT_TIMEOUT); ReleaseMutex( g_hAppCritSecMutex ); CloseHandle( g_hAppCritSecMutex ); end; procedure TForm1.FormCreate(Sender: TObject); begin if not OneInstance then begin MessageBoxEx(Application.Handle, PChar(‘Приложение уже открыто! Запуск второго экземпляра запрещен.’), PChar(‘. ‘), MB_ICONSTOP + MB_OK, $0419); Application.Terminate; end end;
initialization g_hAppMutex := 0; finalization if LongBool( g_hAppMutex ) then begin ReleaseMutex( g_hAppMutex); CloseHandle( g_hAppMutex ); end; end.

Источник: ru.stackoverflow.com

Delphi 2014.1 Install and Activation

Как мы можем определить, что программа уже запущена в delphi

Я хочу запустить программу (exe) из моего приложения delphi. Я могу это сделать, но я хочу проверить, запущена ли программа или нет, прежде чем запускать ее. Есть ли способ сделать это. Спасибо заранее.

Лучший ответ:

Следующая функция проверяет, выполняется ли процесс. Добавьте “TlHelp32” в раздел uses.

function ProcessRunning (sExeName: String) : Boolean; < ->sExeName : Name of the EXE without path. Does not have to be the full EXE name. > var hSnapShot : THandle; ProcessEntry32 : TProcessEntry32; begin Result := false; hSnapShot := CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0); Win32Check (hSnapShot <> INVALID_HANDLE_VALUE); sExeName := LowerCase (sExeName); FillChar (ProcessEntry32, SizeOf (TProcessEntry32), #0); ProcessEntry32.dwSize := SizeOf (TProcessEntry32); if (Process32First (hSnapShot, ProcessEntry32)) then repeat if (Pos (sExeName, LowerCase (ProcessEntry32.szExeFile)) = 1) then begin Result := true; Break; end; < if >until (Process32Next (hSnapShot, ProcessEntry32) = false); CloseHandle (hSnapShot); end;

Читайте также:
Не могу удалить предыдущую версию программы

Источник: techarks.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru