Как не допустить запуск второй копии программы 9

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Можно ли программу, написанную под Windоws, называть подоконником?

var

MutexHandle: THandle;

var

UniqueKey: string;

function IsNextInstance: BOOLEAN;

begin

Result := FALSE;

MutexHandle := 0;

MutexHandle := CREATEMUTEX(nil, TRUE, UniqueKey);

if MutexHandle 0 then

begin

if GetLastError = ERROR_ALREADY_EXISTS then

begin

Result := TRUE;

CLOSEHANDLE(MutexHandle);

MutexHandle := 0;

end;

end;

end;

begin

CmdShow := SW_HIDE;

MessageId := RegisterWindowMessage(zAppName);

Application.Initialize;

if IsNextInstance then

PostMessage(HWND_BROADCAST, MessageId, 0, 0)

else

begin

Application.ShowMainForm := FALSE;

Application.CreateForm(TMainForm, MainForm);

MainForm.StartTimer.Enabled := TRUE;

Application.Run;

end;

if MutexHandle 0 then

CLOSEHANDLE(MutexHandle);

end.

В MainForm вам необходимо вставить обработчик внутреннего сообщения

procedure TMainForm.OnAppMessage(var M: TMSG; var Ret: BOOLEAN);

begin

if M.Message = MessageId then

begin

Ret := TRUE;

// Поместить окно наверх !!!!!!!!

end;

end;

initialization

ShowWindow(Application.Handle, SW_Hide);

end.

{/codecitation}

Добавить комментарий