Hi,
Ich moechte, dass wenn jemand mein Program zum zweiten mal oeffnet (Eine Instanz schon laeuft) sich die erste Instanz aus dem System Tray wiederherstellt.
Ich versuche dies mit der Hilfe von Windows Messages durchzusetzen, aber es funktioniert einfach nicht.
Entweder wird meine Message nicht gesendet oder nicht empfangen. Der Code wird nicht ausgefuert.
Ich bin mit meinem Latein am Ende...
Hier sind die betroffenen Code Schnipsel.
Beim Starten des Programms (Senden der Message):
Delphi-Quellcode:
uses
[..]
Messages
[..]
const tAlreadyRunning = 'The program is already running !';
AppName = 'Alarm Clock by Tarry91';
[b]UM_RISEANDSHINE = WM_USER + 100;[/b]
var mHandle: THandle; // Mutexhandle
begin
mHandle := CreateMutex(nil,True,AppName);
If GetLastError = ERROR_ALREADY_EXISTS
Then begin
// application.MessageBox(tAlreadyRunning, AppName, mb_ok+MB_ICONINFORMATION);
[b]SendMessage(FindWindow(nil,pchar(AppName)),UM_RISEANDSHINE,0,0);[/b]
end
Else Begin
Application.Initialize;
Application.Title:= 'Alarm Clock by Tarry91';
Application.CreateForm(TMainForm, MainForm);
Application.Run;
End;
If mHandle <> 0 Then CloseHandle(mHandle);
end.
In dem Hauptprogramm (Deklaration und Handling der Message):
Delphi-Quellcode:
[...]
const UM_RISEANDSHINE = WM_USER + 100;
[...]
procedure RiseAndShine(var Msg: TMessage); message UM_RISEANDSHINE;
Delphi-Quellcode:
procedure TMainForm.RiseAndShine(var Msg: TMessage);
begin
ShowMessage('Test');
MainForm.Show;
Msg.Result := 1;
end;
Ich hoffe ihr koennt heraufinden, warum die Message nie ankommt
Danke schonmal,
Thomas