Подскажите пожалуйста, как лучше всего проверить не запущено ли уже приложение и не дать запустить копию.
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