Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.13;
Скачать: CL | DM;

Вниз

Второй запуск программы   Найти похожие ветки 

 
killer ©   (2003-10-27 13:18) [0]

Как при запуске программы моей определить, запущена ли моя программа уже или нет?


 
Yakudza ©   (2003-10-27 13:28) [1]

...
var
UniqueMapping : THandle;
FirstWindow : THandle;

...

UniqueMapping := CreateFileMapping($ffffffff, nil, PAGE_READONLY, 0, 32, "DispacherMap");
if UniqueMapping = 0 then
begin
ShowMessage(SysErrorMessage(GetLastError));
Halt;
end
else if GetLastError = ERROR_ALREADY_EXISTS then
begin
FirstWindow := FindWindowEx(0,0,TfrmMain.ClassInfo,nil);
if FirstWindow <> 0 then
SetForegroundWindow(FirstWindow);
FlashWindow(FirstWindow,True);
Halt;
end;


 
panov ©   (2003-10-27 13:43) [2]

function isRunning(aUniqueString:String): Boolean;
var
hMutex: THandle;
begin
Result := False;
hMutex := CreateMutex(nil,False,PChar(aUniqueString));
if GetLastError = ERROR_ALREADY_EXISTS then
begin
Result := True;
CloseHandle(hMutex);
end;
end;


 
Amoeba   (2003-10-27 14:20) [3]

В целом ряде библиотек (LMDTools, ABF) есть специальные компоненты, предотвращающие запуск второго экземпляра программы.


 
killer ©   (2003-10-27 14:35) [4]

panov:
вот в твоем примере надо еще подставить в
var
Result: boolean;

я подставил.... а теперь выдает ошибку в этой строчке
hMutex := CreateMutex(nil,False,PChar(aUniqueString));

[Error] Unit1.pas(32): Undeclared identifier: "aUniqueString"

чего делать?


 
Yakudza ©   (2003-10-27 14:39) [5]

2killer © (27.10.03 14:35) [4]
>вот в твоем примере надо еще подставить в
>var
>Result: boolean;

Нафига ?


 
panov ©   (2003-10-27 14:39) [6]

Ты вообще с программированием в Паскале знаком( в частности - в Delphi)? - это логичный вопрос после твоей фразы -
panov:
вот в твоем примере надо еще подставить в
var
Result: boolean;


на слове function нажми F1 и почитай про функции.


 
Yakudza ©   (2003-10-27 14:50) [7]

>на слове function нажми F1 и почитай про функции.
Вслух и с выражением :)


 
killer ©   (2003-10-27 16:27) [8]

а в какое событие написать эту функцию? или вообще куда?


 
panov ©   (2003-10-27 17:23) [9]

Определение функции в модуле основной формы(здесь - ufMain.pas),
причем после слова implementation добавляешь полное определение функции, а перед ним строчку

function isRunning(aUniqueString:String): Boolean;

В файл проекта .DPR добавляешь вызов функции

program Sample;

uses
Forms,
ufMain in "ufMain.pas" {fMain};

{$R *.RES}

begin
if isRunning("Моя супер-прога.") then Exit;
Application.Initialize;
Application.CreateForm(TfMain, fMain);
Application.Run;
end.


 
Anatol   (2003-10-27 17:35) [10]

panov © (27.10.03 17:23) [9]:
неплохо бы после Application.Run; закрыть hMutex - CloseHandle(hMutex); ?


 
panov ©   (2003-10-27 17:38) [11]

>Anatol (27.10.03 17:35) [10]
неплохо бы после Application.Run; закрыть hMutex - CloseHandle(hMutex);

Будет закрыт вместе с приложением.


 
dataMaster ©   (2003-10-27 17:40) [12]

Вот, обошло наверное кучу факов:

Отредактируйте *.DPR файл следующим образом:


program Project1;
uses
Windows, // Обязательно
Forms,
Unit1 in "Unit1.pas" {Form1};

{$R *.RES}
Const
MemFileSize = 1;
MemFileName = "one_inst_demo_memfile";// укажите имя файла(например, также, как и имя проекта)
Var
MemHnd : HWND;
begin
{ Попытаемся создать файл в памяти }
MemHnd := CreateFileMapping(HWND($FFFFFFFF),
nil,
PAGE_READWRITE,
0,
MemFileSize,
MemFileName);
{ Если файл не существовал запускаем приложение }
if GetLastError<>ERROR_ALREADY_EXISTS then
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
CloseHandle(MemHnd);
end.



Страницы: 1 вся ветка

Текущий архив: 2003.11.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.032 c
7-42201
ksa2002
2003-08-27 11:37
2003.11.13
МОДЕМЫ


1-41621
Senti
2003-10-25 20:23
2003.11.13
проблема с отображением Gif файлов


4-42293
frost
2003-08-22 08:58
2003.11.13
Добавление пункта в контекстное меню Windows


14-42027
Checist [root]
2003-10-16 16:25
2003.11.13
Исключение, блин


14-41877
ИМХО
2003-10-21 12:32
2003.11.13
Прогнозы на Локо и ДК