unit UIApp;
interface
implementation
uses
Windows, SysUtils, Forms, Dialogs, Messages, Unit1;
const
sMutex = '10D73234-C9F7-4C2D-BC7E-39B5820AF456';
sActivar = '3F154732-CCDE-4BC7-9439-AFCD3BCFA84D';
var
mActivar : Cardinal;
Mutex : Cardinal;
PrevWndProc : TFarProc;
function AppWndProc(Handle: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LongInt; stdcall;
var
FgThreadId : DWORD;
AppThreadId : DWORD;
begin
if Msg = mActivar then
begin
Form1.close;
end
else
Result := CallWindowProc(PrevWndProc, Handle, Msg, wParam, lParam);
end;
procedure Activar;
begin
SendMessage(HWND_BROADCAST, mActivar, 0, 0);
end;
procedure Registrar;
begin
mActivar := RegisterWindowMessage(sActivar);
Mutex := CreateMutex(nil, true, sMutex);
if GetLastError = ERROR_ALREADY_EXISTS then
begin
Activar;
PrevWndProc := TFarProc(GetWindowLong(Application.Handle, GWL_WNDPROC));
SetWindowLong(Application.Handle, GWL_WNDPROC, LongWord(@AppWndProc));
end
else
begin
PrevWndProc := TFarProc(GetWindowLong(Application.Handle, GWL_WNDPROC));
SetWindowLong(Application.Handle, GWL_WNDPROC, LongWord(@AppWndProc));
end;
end;
initialization
try
Registrar;
except
Halt;
end;
finalization
if Mutex <> 0 then ReleaseMutex(Mutex);
end.