Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Programm beenden ohne sichbares Fenster (https://www.delphipraxis.net/1157-programm-beenden-ohne-sichbares-fenster.html)

andi_hauser 25. Okt 2002 23:42


Programm beenden ohne sichbares Fenster
 
Hallo, ich schon wieder.

Ich wollte nur nochmal nachfragen wie ich GENAU ich das Programm (Prog.exe) schließen kann obwohl ich kein Fenster sehe...

Sagen wir das Programm ist unter "C:\prog.exe" und läuft gerade.

Habe zwar schon Infos bekommen... aber ganz klar ist mir das noch nicht.

FindWindow( ??? , ??? );
SendMessage( ??? );

tut mir leid, dass ich solche Fragen stelle, aber in meiner Online Hilfe finde ich nichts brauchbares. Hab ausserdem das erste mal damit was zu tun...

Hoffe Ihr verzeiht mir...

[Edit=FuckRacism] Thema umbenannt, beim nächsten Mal bitte den Namen des Themas auf die Frage hin bezogen benennen, damit jeder vom Namenen her schon sieht ob das was für ihn ist![/edit]

Daniel B 25. Okt 2002 23:50

Hallo Du schon wieder...

FindVCLWindow gibt das fensterorientierte Steuerelement an der angegebenen Position zurück.

Unit
Controls

Kategorie
Maussteuerung

function FindVCLWindow(const Pos: TPoint): TWinControl;
Beschreibung

Mit FindVCLWindow können Sie das fensterorientierte Steuerelement, das sich an einer bestimmten Position befindet, ermitteln. Beispielsweise läßt sich mit FindVCLWindow das fensterorientierte Steuerelement ermitteln, auf dem sich der Mauszeiger befindet, wenn ein anderes Steuerelement aktuell alle Mausbotschaften abfängt. Der Parameter Pos bezeichnet die Position, innerhalb derer sich das zurückgegebene Steuerelement befinden muß. Wenn sich an dieser Stelle kein fensterorientiertes Steuerelement befindet, liefert FindVCLWindow den Wert nil zurück.



SendAppMessage sendet eine Windows-Botschaft an die Anwendung.

Unit
Controls

Kategorie
Windows-Steuerelemente

function SendAppMessage(Msg: Cardinal; WParam, LParam: Longint): Longint;
Beschreibung

Mit SendAppMessage können Sie eine Windows-Botschaft an das globale Anwendungsobjekt senden.
Msg enthält den Windows-Botschaftscode.
WParam enthät die W-Parameter der Botschaft. Deren Interpretation ist von dem Wert in Msg abhängig.
LParam enthät die L-Parameter der Botschaft. Deren Interpretation ist von dem Wert in Msg abhängig.
SendAppMessage gibt das von der Fensterprozedur der Anwendung bereitgestellte Ergebnis zurück. Wenn die Anwendung die Botschaft nicht behandelt, liefert SendAppMessage 0.

Grüsse, Daniel :hi:

Christian Seehase 25. Okt 2002 23:56

Moin Andi,

FindWindow und SendMessage sind Windows API Funktionen.
SendMessage ist zwar in Form der Methode Perform auch bei vielen VCL Controls zu finden, funktioniert aber erfahrungsgemäss nicht immer richtig.
In der Delphi Hilfe findest Du die, wenn Du den Namen in der IDE eingibst, und dann mal F1 drückst. Es wird dann die Hilfe aus dem bei Delphi mitgelieferten, antiquarischen, SDK von Microsoft angezeigt.
Such' doch mal hier im Forum nach PSDK. Das sollte einige Fundstellen erbringen.

FindWindow erwartet als ersten Parameter den Namen der Klasse des zu suchenden Fensters, im zweiten die Caption, wobei auch je einer dieser Parameter durch nil ersetzt werden kann.
Die Caption dürfte klar sein. Die Klasse wäre in Delphi standardmässig TForm1. Hängt davon ab, ob Du dem Formular einen neuen Namen gegeben hast, dann ändert sich dieser Wert.
Rückgabewert ist das Handle des Fensters, oder 0 falls es nicht gefunden werden konnte
Wichtig:
Das Fenster muss nicht zu sehen sein, sondern nur existieren.

SendMessage kennt vier Parameter, von denen allerdings nur zwei immer erforderlich sind.
Der erste ist das Handle des Fensters an das die Meldung geschickt werden soll, der zweite ist die Meldung.
Der dritte und vierte Parameter hängen von der Meldung ab, die geschickt werden soll.
Im Falle von WM_SYSCOMMAND sähe das so aus:

SendMessage(dwHandle,WM_SYSCOMMAND,SC_CLOSE,0);

Hier wird der vierte Parameter nicht benötigt.

Bei WM_CLOSE dann so:

SendMessage(dwHandle,WM_CLOSE,0,0);

Hier werden die letzten beiden Parameter nicht gebraucht.

Näheres zu SendMessage und FindWindow kannst Du bestimmt hier im Forum finden, oder im PSDK (s.o.), ohne das Du über kurz oder lang nicht wirst auskommen können ;-), oder aber bei Microsoft msdn.microsoft.com.

Christian Seehase 26. Okt 2002 00:03

Moin Daniel B,

heute haben wir's aber :mrgreen:

FindVCLWindow dürfte dem WindowFromPoint der Windows API entsprechen (so einigermassen), und erfordert die Mausposition.
Ich fürchte mal, dass es kein Fenster ausserhalb der eigenen Applikation finden kann.

SendAppMessage gibt's erst ab D6 (kannst Du ja nicht wissen).
Ich hoffe es funktioniert zuverlässiger als Perform.
Ausserdem funktioniert das nur innerhalb der eigenen Application.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz