Ich habe das ganze jetzt mal mit Windows Messages versucht, scheint auch alles zu klappen.
Projekt Datei:
Delphi-Quellcode:
program tab;
uses
Forms,
Windows,
uMain
in '
uMain.pas'
{frmMain},
uGlobal
in '
uGlobal.pas',
...;
{$R *.res}
var
//dwMessage : DWORD; in uGlobal.pas Deklariert.
dwMutex : DWORD;
hWindow : THandle;
begin
//Ermitteln in welchem Modus das Programm läuft
glPrgMode := fGetProgMode;
//glProgMode ist ein Integer-Wert
// Eigene Message erzeugen
dwMessage := RegisterWindowMessage('
{110E0C4D-A63F-4B36-829D-3847E28636AF}');
//Mutex erzeugen
dwmutex := CreateMutex(
nil, True, '
{B2662A89-1938-4799-9F8D-11FBD5179EA9}');
try
//prüfen ob die Anwendung bereits läuft...
if GetLastError <> ERROR_ALREADY_EXISTS
then begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.Title := '
';
Application.CreateForm(TfrmMain, frmMain);
Application.CreateForm(TfrmSplashScreen, frmSplashScreen);
Application.OnMessage := frmMain.OnAppMsg;
Application.Run;
end
else begin
//Windows Botschaft an alle Fenster schicken...
PostMessage(HWND_BROADCAST, dwMessage, glPrgMode, 0);
end;
{else}
finally
//Mutex freigeben
if dwMutex <> 0
then ReleaseMutex(dwMutex);
end;
end.
Und hier die Application.OnMessage Prozedur:
Delphi-Quellcode:
procedure TfrmMain.OnAppMsg(var Msg: TMsg; var Handled: Boolean);
begin
Handled := False;
if Msg.message = dwMessage then begin
if Msg.wParam = glPrgMode then begin
//ShowWindow(Application.MainFormHandle, SW_NORMAL);
Application.Restore;
SetForegroundWindow(Application.MainFormHandle);
end;
Handled := True;
end;
end;
Jedoch habe ich an der Stelle noch das Problem, das ich mein Fenster bzw.
meine Anwendung nicht vernüftig wiederhergestellt bekomme.