- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
Var
h : THandle;
procedure TMain.FormCreate(Sender: TObject);
begin
begin
h := CreateMutex(nil, True, PChar(ExtractFileName(Application.ExeName)));
if WaitForSingleObject(h, 0)<>0 then
begin
ShowMessage(‘Программа уже запущена!’);
Application.Terminate;
CloseHandle(h);
end;
end;
kipar 05.05.2014 11:01 # +1
bormand 05.05.2014 11:14 # +1
А в остальном (если дать мутексу более уникальное имя) - вроде как нормальный способ. Ну разве что WaitForSingleObject можно убрать, т.к. у CreateMutex был какой-то способ выяснить, запилил ли он новый мутех или вернул существующий.
P.S. Ну и вместо выхода с сообщением, если есть возможность, лучше найти окно от той самой уже запущенной программы и кинуть ему какую-нибудь команду - например чтобы показалось или просто всплыло наверх...
Vasiliy 05.05.2014 11:17 # −3
bormand 05.05.2014 11:18 # +1
brutushafens 06.05.2014 09:58 # −4
brutushafens 07.05.2014 00:13 # −3
brutushafens 07.05.2014 10:24 # 0
Vasiliy 07.05.2014 14:26 # +1
dunmaksim 07.05.2014 09:43 # 0
bormand 07.05.2014 10:11 # −1
brutushafens 07.05.2014 10:14 # 0
bormand 07.05.2014 11:01 # 0
guest 06.06.2014 07:41 # 0
var Wnd: hWnd;
buff: array[0.. 127] of Char;
begin
//Получили указатель на первое окно
Wnd:=GetWindow(fmMain.Handle, gw_HWndFirst);
// Поиск
while Wnd<>0 do begin
// Это окно предыдущей копии ?
if (Wnd<>Application.Handle) and (GetWindow(Wnd, gw_Owner)=0) then begin
GetWindowText(Wnd, buff, SizeOf(buff));
if StrPas(buff)=Application.Title then begin
SendMessage(Wnd, WM_SHOWWINDOW, 0, 0);
SetWindowPos(Wnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
Windows.ExitProcess(0);
SetWindowPos(Wnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
Application.Terminate;
Exit;
end;
end;
Wnd:=GetWindow(Wnd, gw_hWndNext);
end;
end;
bormand 06.06.2014 09:35 # +1
> Application.Terminate;
> Exit;
Лол ;)
Кстати, а почему окно ищется перебором, а не банальным FindWindowEx?
brutushafens 06.06.2014 11:42 # +1
brutushafens 06.06.2014 11:37 # 0
betking1 27.11.2014 15:51 # 0