Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.037 c
1-41701
Nucl
2003-11-03 08:57
2003.11.13
Влияют ли модули, перечисленные в Uses на размер программы ?


1-41258
RoLeX
2003-10-31 17:29
2003.11.13
Как в DateTimePicker сравнить даты???


1-41583
AndDem
2003-10-27 12:45
2003.11.13
---|Ветка была без названия|---


14-41929
mm0
2003-10-20 18:02
2003.11.13
Помогите с кнопкой /Продолжение/Первое непомогло


3-41032
axx
2003-10-15 11:26
2003.11.13
FrozenRows в DBGgrid е





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский