Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
ВнизВторой запуск программы Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.033 c