![]() |
Benutzer definierte Messages Handling
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:
In dem Hauptprogramm (Deklaration und Handling der Message):
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.
Delphi-Quellcode:
[...]
const UM_RISEANDSHINE = WM_USER + 100; [...] procedure RiseAndShine(var Msg: TMessage); message UM_RISEANDSHINE;
Delphi-Quellcode:
Ich hoffe ihr koennt heraufinden, warum die Message nie ankommt :)
procedure TMainForm.RiseAndShine(var Msg: TMessage);
begin ShowMessage('Test'); MainForm.Show; Msg.Result := 1; end; Danke schonmal, Thomas |
Re: Benutzer definierte Messages Handling
Delphi-Quellcode:
FindWindow sucht nicht nach der Application sondern nach der Fenstercaption.
SendMessage(FindWindow(nil, pchar('MainForm')), UM_RISEANDSHINE, 0, 0);
|
Re: Benutzer definierte Messages Handling
Zitat:
Aber meine Fenstercaption ist die gleiche, wie der Application name ("Alarm Clock by Tarry91"). :gruebel: Gibt es eine Moeglichkeit zu checken ob FindWindow, das Fenster gefunden hat ? Danke, Thomas |
Re: Benutzer definierte Messages Handling
Liste der Anhänge anzeigen (Anzahl: 1)
Ja, der Rückgabewert von FindWindow muss <> 0 sein.
|
Re: Benutzer definierte Messages Handling
Zitat:
der Rueckgabewert ist <> 0 (2229586 um genau zu sein). Kann es sein das die Message gesendet wird, aber nicht ankommt ? Wie kann ich das testen ? Gruss, Thomas |
Re: Benutzer definierte Messages Handling
Das Beispiel, das ich oben angehängt habe, funktioniert bei mir.
|
Re: Benutzer definierte Messages Handling
Programmübergreifende Messages sollte man auch nicht einfach so definieren.
Dafür gibt es ![]() ein Beispiel ist z.B. in dem ![]() oder in der DP ![]() OK, ich weiß daß die Suche da nix findet (das Wort ist zu lang), aber [google]RegisterWindowMessage site:delphipraxis.net[/google] |
Re: Benutzer definierte Messages Handling
Liste der Anhänge anzeigen (Anzahl: 1)
Neues Beispiel
|
Re: Benutzer definierte Messages Handling
Zitat:
Ich kann einfach keinen Unterschied zwischen deiner und meiner Version finden :gruebel: Koennte es daran liegen, dass ich die Komponente CoolTrayIcon benutze ? Gruss, Thomas |
Re: Benutzer definierte Messages Handling
Funktioniert das Beispiel bei dir?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz