Deutsch
Forum

Das Herunterfahren abfangen...

 
Hallo Profaner...

Ich habe folgendes Problem:
Auf den Versuch Windows herunterzufahren muß ein Programm von mir entsprechend reagieren.

Ich weiß, das Windows beim Herunterfahren die Message WM_QUERYENDSESSION an jedes Programm sendet und auf eine positive Rückmeldung wartet. Wie kann ich diese Message mit Profan abfangen und entsprechend behandeln? Hat jemand eine Idee???

Profan 7.5 => Windows2000/XP
 
20.02.2005  
 




Frank
Abbing
Hallo Andeas,

mit XProfan könntest du das sicher über ein Subclassing realisieren
Aber auch mit niedrigeren Profanversion sollte das möglich sein. Auf meiner Webpage findest du die kleine Freeware Message.dll. Damit kannst du jede Message empfangen. In jedem Fenster und ab Profan 5.
 
20.02.2005  
 



Sagen wir mal so - es wäre auch sinnvoll wenn Roland diese ok-killme nicht generell sendet - sondern vielleicht die Abhandlung dessen einer XProfan-Proc überlässt.

Salve, iF
 
20.02.2005  
 



Hallo IF...

Das sehe ich genauso, leider hilft mir das jetzt nicht weiter. Gibt es keine API die Messages abfängt und eine beliebige Rückmeldung an Windows sendet?...

Ich habe hier mal einen Quellcode in Delphi - habe leider zu wenig Ahnung um den komplett zu verstehen und umzusetzen.
Kann jemand [...]  was anfangen?

@Frank: Ich habe leider keine Idee, wie mir deine DLL da weiterhelfen kann. Was kann die alles?
 
21.02.2005  
 



Hallo...

OK, ich glaube den Quelltext habe ich jetzt verstanden:
An Offset GWL_WNDPROC des Fensters befindet sich die Adresse einer Prozedur. Diese Prozedur ist dafür zuständig Messages, die an das Fenster gesendet werden, zu verarbeiten.
Um Messages, die an das Fenster gendet werden, nicht zuerst von dieser Prozedur behandeln zu lassen, setzt man einfach mit SetWindowlong den Wert bei GWL_WNDPROC auf die Adresse einer anderen Prozedur und merkt sich die Adresse der alten Prozedur. In meinem Fall müßte diese Prozedur bei der ankommenden Message WM_QUERYENDSESSION eigentlich nur den Wert 0 zurückgeben - oder 1 wenn das System heruntergefahren werden soll. Alle anderen Messages müßten dann mit CallWindowProc innerhalb dieser Prozedur auf die gemerkte, alte Adresse umgeleitet werden.

Mit Profan, jedenfalls mit Version 7.5, komme ich - soweit ich weiß - nicht an eine Adresse einer in meinem Programm stehenden Prozedur.
Wenn ich aber ein DLL hätte, könnte ich die Adresse einer dort stehenden Prozedur mit GetProcAddress herausfinden und diese für das SubClassing verwenden.

Habe ich jetzt totalen Mist verzapft oder stimmt das in etwa so???
~?~
 
21.02.2005  
 




Frank
Abbing
Hi,

ziemlicher Mist, ja.
Denke daran, Profan ist und bleibt eine Interpretersprache.
Du hast meine Dll, die listet dir jede Message auf. Ob du so das Herunterfahren abfangen kannst, weiss ich nicht. Das mußt du selber harausfinden, ich hab momentan einfach viel zuwenig Zeit...
 
21.02.2005  
 



Macht nichts, Frank - gibt ja auch noch andere.
Es klappt - so wie ich das möchte - mit deiner DLL leider nicht.

An alle anderen: Kann mir als unwissendem sonsteiner mal erklären, was Subclassing genau ist? Was genau ist ziemlicher Mist an meinen Überlegungen???

Ziel der Sache ist in etwa ein Verhalten wie es Notepad zeigt:
Wenn Windows heruntergefahren wird und eine Datei gerade bearbeitet, aber noch nicht abgespeichert wurde, gibt Notepad eine Messagebox aus. Wenn hier abbrechen gedrückt wird, wird das System nicht heruntergefahren.
 
21.02.2005  
 




CB
Hi, Andreas!

Direkt weiterhelfen kann ich Dir leider nicht, aber schau Dir das mal näher an:
[...] 
Ist ein ziemlich geniales Programm mit ein paar dlls, die allerdings mit ResourceHacker nicht zu öffnen sind (ASM-Dlls?). Vielleicht hast Du da ne Möglichkeit dazu - oder Frank, falls er mal weniger Überfluß an Arbeit hat?

Gruß, Christian
 
XProfan 8/9.1, Win XP, AMD 64/3200
21.02.2005  
 



Hallo Christian...

Das Programm werde ich mir auf jeden Fall ansehen - leider wird es mir bei meinem Problem nicht helfen.
Windows sendet beim Herunterfahren die Message WM_QUERYENDSESION an jedes Toplevelfenster. Jedes Fenster gibt, bedingt durch seine Klasse (wenn ich das richtig verstehe), eine Wert (entweder 1 oder 0) an Windows zurück. 1=Windows darf heruntergefahren werden 0=Windows darf nicht heruntergefahren werden. Erst wenn alle Fenster eine 1 zurückliefern, wird Windows beendet und die Message WM_ENDSESSION an jedes Toplevelfenster gesendet => siehe Notepad.

Die Message WM_QUERYENDSESION kann ich unter bestimmten Bedingungen auch mit Profan empfangen => vorausgesetzt ich arbeite mit Windows98, da dort das Herunterfahren etwas anders abläuft als unter WindowsNT.
Da mein Programm - wohl bedingt durch das, was ich als Fensterklasse verstehe - aber sofort nach dem Empfang der Message gekillt wird, bringt mir das nichts.

Ich muß also irgendwie an die Klasse meines Hauptfensters ran, um dort etwas zu verändern.
Mit Profan alleine geht das wohl nicht - jedenfalls nicht mit 7.5, denn dazu brauche ich die Adresse einer Art Ersatzprozedur.

Meine Frage: Kann ich mit XProfan Subclassing realisieren? Gibt es eine Möglichkeit Subclassing über externe DLLs zu regeln? Habe ich den Begriff Subclassing überhaupt richtig verstanden???
 
21.02.2005  
 




Frank
Abbing
Hi,

Subclassing ist das Einfügen eines eigenen Codes in die Windows-Message Prozedur. Wird eine Message ausgelöst, dann wird diese eigene Routine angesprungen, bevor in der Windows-Message Prozedur die ankommende Message weiter bearbeitet wird. Dieser eigene Code kann jetzt Messages verändern, entfernen oder selber welche erzeugen. Du könntest hier also deine gewünschte Message einfach löschen oder entsprechend darauf reagieren. Etwa so:
KompilierenMarkierenSeparieren
Proc NewWindowCallBack

    Parameters wnd&,msg&,wparam&,lparam&

    If msg&=~WM_QUERYENDSESION

        Return 0

    Endif

    RETURN ~CallWindowProc(OldWindowCallBack&,wnd&,msg&,wparam&,lparam&)

EndProc


Schau doch mal bei Andreas Miethe vorbei. Der hat schon einige XProfancodes erstellt, die Profans Windowsprozedur subclassen. Ich selber pflege das immer nur in eine Dll verpackt mit Assembler zu machen.

@Christian: Vielleicht sind die Dlls gepackt?
 
21.02.2005  
 




CB
[quote:7658e6b148=Frank Abbing]@Christian: Vielleicht sind die Dlls gepackt?[/quote:7658e6b148]
ResourceHacker zeigt nur ein leeres Feld, keinerlei Einträge.
Ich habe dann mal mit einem speziellen Editor (eigentlich ein Plugin vom Total Commander) hineingeschaut:

FILE CHARACTERISTICS :
File is executable (i.e. no unresolved external references)
COFF line numbers have been removed
COFF symbol table entries for local symbols have been removed
Machine based on 32-bit-word architecture
File is a DLL

Ach was - das Prog. ist Freeware. Ich schick Euch mal die dlls einfach mit. Vielleicht könnt Ihr ja was damit anfangen.

Gruß, Christian

370 kB
Hochgeladen:21.02.2005
Ladeanzahl40
Herunterladen
 
XProfan 8/9.1, Win XP, AMD 64/3200
21.02.2005  
 




Frank
Abbing
Gerade gefunden: [...] 
Andreas hat sowas schon geschrieben
 
22.02.2005  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

14.949 Betrachtungen

Unbenanntvor 0 min.
Stefan M. Caillet28.07.2011
Unbenannt27.06.2011
iF21.06.2011

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie