![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
опишите пожалуйста, как сделать так, чтобы при запуске программы проверялось запущен ли процесс и если запущен, чтобы программа автоматически закрывалась
|
|
#2
|
||||
|
||||
|
если ищется процесс раз и два (дальше гугл), если не допустить повторный запуск
Провожу тренинги по пользованию гуглом, первое занятие бесплатно, ваше первое занятие окончено |
| Этот пользователь сказал Спасибо cotseec за это полезное сообщение: | ||
iisyyyys (02.08.2012)
| ||
|
#3
|
|||
|
|||
|
но у меня нету формы, именно процесс
|
|
#4
|
||||
|
||||
|
изучай внимательней!
|
|
#5
|
||||
|
||||
|
Гугл весьчь хорошая, но есть ешьчо и Рамблер сиречь Яндекс, там тоже первый ван бесплатно
Способов не запуска второй копии навалом, можно и атомом, можно и мьютексом проверять, но возможен и простой способ - это поиск запущенного приложения в среде по имени, если оно есть, то закрываем двойника принудительно. Энто всё прописывается в файле проекта (*.dpr), до старта проги:Код:
program Project1;
uses
Forms,
Windows, SysUtils, // Эти юниты нужно добавить
Unit1 in 'Unit1.pas' {Form1};
var
HwndPrev:HWND;
{$R *.res}
begin
Application.Initialize;
// Сначало ищем в системе главную форму по имени
HwndPrev := FindWindow('TForm1','Form1'); // в кавычках прописываем имя формы и её заголовок
if HwndPrev <= 0 then // и если её нет, то...
begin
Application.CreateForm(TForm1, Form1);
Application.Run;
// запускаем приложение,
end else // а если оно уже запущено, то грохаем двойника:
begin
SetForegroundWindow(HwndPrev); // тут передаём фокус мастеру, можно это и не делать
Application.Terminate;
end;
end. |
|
#6
|
||||
|
||||
|
предлагаешь одно:
Цитата:
Цитата:
Цитата:
читай внимательней!) |
|
#7
|
||||
|
||||
|
Код:
uses
SyncObjs;
procedure CheckDbl;
begin
CheckEvent := TEvent.Create(nil, false, true, 'MYPROGRAM_CHECKEXIST');
if CheckEvent.WaitFor(10) <> wrSignaled then
begin
MessageBox(0,'Программа будет закрыта','Инфа',0);
end;
end; |
|
#8
|
||||
|
||||
|
УК RusMaXXX, подскажи пжлст, SyncObjs из какого пакета?
|
|
#9
|
||||
|
||||
|
\Rtl\Common\
|
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Alegun (02.08.2012)
| ||
|
#10
|
|||
|
|||
|
нужно добавить
var CheckEvent: TEvent; |
|
#11
|
|||
|
|||
|
Код:
uses SyncObjs; procedure CheckDbl; var CheckEvent: TEvent; begin CheckEvent:= TEvent.Create(nil, false, true, 'MYPROGRAM_CHECKEXIST'); if CheckEvent.WaitFor(10) <> wrSignaled then halt; end; |