Hola,
Pues lo lamento mucho. En mi caso puedo acceder perfectamente a la unidad, por otro lado, tan estupenda, que no me importa copiar aquí su código fuente:
Código Delphi
[-]
unit UIApp;
interface
implementation
uses
Windows, SysUtils, Forms;
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
if IsIconic(Handle) then
ShowWindow(Handle, SW_RESTORE)
else
begin
FgThreadId := GetWindowThreadProcessId(GetForegroundWindow, nil);
AppThreadId := GetWindowThreadProcessId(Handle, nil);
AttachThreadInput(AppThreadId, FgThreadId, true);
SetForegroundWindow(Handle);
AttachThreadInput(AppThreadId, FgThreadId, false);
end;
Result := 0;
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
Mutex := 0;
abort;
end
else
begin
PrevWndProc := TFarProc(GetWindowLong(Application.Handle, GWL_WNDPROC));
SetWindowLong(Application.Handle, GWL_WNDPROC, LongWord(@AppWndProc));
end;
end;
initialization
try
Registrar;
except
Activar;
Halt;
end;
finalization
if Mutex <> 0 then ReleaseMutex(Mutex);
end.
Basta con añadirla al proyecto, directamente, en el archivo "DPR", por ejemplo, para que la aplicación en cuestión no se ejecute dos veces. Para más información, véase la
página de Román enlazada arriba.