Как не допустить запуск второй копии программы 9
|
Можно ли программу, написанную под 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.
|
|