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.