![]() |
AW: Prozedur weiterleiten
IMHO: Message ist Message
Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin Canclose := False; end; procedure TForm1.SpeedButton1Click(Sender: TObject); begin Sendmessage(Application.Handle,WM_Endsession,0,0) end; |
AW: Prozedur weiterleiten
Eben. Da man kein Zielfenster angeben kann, reagieren alle Fenster, die diese Nachricht behandeln auf die Nachricht und beenden sich.
|
AW: Prozedur weiterleiten
Zitat:
Andere Anwendungen bekommen aber von der Message nichts mit. |
AW: Prozedur weiterleiten
Ich habe auf die Schnelle auch keinen Weg gefunden an das "Application"-Handle von z.B. Notepad zu kommen.
Ein Weg wäre auch:
Delphi-Quellcode:
Procedure TerminateProcessByClassname(ClassName:String);
//TW 2010 var hWindow, processHandle: hWnd; hprocessID: Integer; begin hWindow := FindWindow(PWChar(ClassName), nil); if hWindow > 0 then begin GetWindowThreadProcessID(hWindow, @hprocessID); if hprocessID <> 0 then begin processHandle := OpenProcess (PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION, False, hprocessID); if processHandle <> 0 then begin TerminateProcess(processHandle, 0); CloseHandle(processHandle); end; end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin TerminateProcessByClassname('Notepad'); end; |
AW: Prozedur weiterleiten
@Uwe: Also du schickst von dem Updater ein WM_ENDSESSION. da man diese Nachricht nicht gezielt an ein Fenster verschicken kann, bekommen alle Fenster diese Nachricht. Also auch mein Wordfenster in, dem ich gerade einen Brief schreibe. Dieses reagiert auch auf die Nachricht und beendet sich. Prima. Und was ist jetzt mit meinem Brief an dem ich gerade arbeite? Bestenfalls kommt noch ein Dialog, der mich zum Speichern auffordert. Aber nichts desto trotz, darf ich Woprd neu startet und alle andern Anwendungen, die ich auf hatte eventuell auch. Und das findest du in Ordnung? Kann ich mir nicht vorstellen.
|
AW: Prozedur weiterleiten
@Luckie
Wenn Uwe das Handle der jeweiligen Application hat funktioniert es genau so wie es gewünscht ist. Ich weiß nur noch nicht wie er an das Handle kommt. |
AW: Prozedur weiterleiten
Mit FindWindow?
|
AW: Prozedur weiterleiten
Ich habe versucht mich durchzuhangeln...
Findwindow findet mein Mainform, wenn ich Sendmessage(fHandle,WM_Endsession,0,0) mit den Handle des Mainforms abschicke passiert nichts, ich müsste bei Delphi zumindest an das Application.handle kommen, dort wird die Message richtig verarbeitet. Ein Aufruf an das Fensterhandle von Notepad funktioniert ebenfalls nicht, ich habe versucht über die ProcessId ein gültiges Handle zu ergattern, bis jetzt Fehlanzeige. |
AW: Prozedur weiterleiten
Um mal wieder auf die Ausgangsfrage zurückzukommen ;)
Wozu überhaupt mit WM_QUIT oder sonstigen Nachrichten arbeiten? Die Klasse ist doch direkt im Programm eingebunden ... Baue in jedes deiner Programme eine Funktion ein, mit der die Anwendung beendet werden kann. Diese Funktion übergibst du dann der Klasse und die Klasse ruft einfach diese Funktion auf, fertig.
Delphi-Quellcode:
Unit UpdateKlasse;
interface type TQuitFunc = function : boolean; TUpdateKlasse = class ... Property QuitFunc : TQuitFunc Read FQuitFunc Write FQuitFunc; ... end; ... procedure TUpdateClass.UpdateExecute; begin if Assigned( FQuitFunc ) then if FQuitFunc then RunUpdateProg; end; |
AW: Prozedur weiterleiten
Zitat:
bitte alles vergessen was ich geschrieben habe... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:22 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