У меня вот такой код работает, вроде, стабильно:
Код:
function TMainForm.HookMessageProc(var Message: TMessage): Boolean;
begin
Result := False;
If Message.Msg = WndMessage Then
Begin
TrayIcon.ShowMainForm;
Application.BringToFront;
SetForegroundWindow(Self.Handle);
Result := True;
End;
end;
TrayIcon - это, на самом деле, TCoolTrayIcon.
Собственно, там есть только одна закавыка. Под Vista и 7 надо что бы второй экземпляр отдал разрешение на всплытие окна другого процесса, иначе операционка откажется его активировать.