Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi EnumProps liefert immer LeerProperty? (https://www.delphipraxis.net/70187-enumprops-liefert-immer-leerproperty.html)

himitsu 26. Mai 2006 14:25


EnumProps liefert immer LeerProperty?
 
Moin ihr,

ich hab da ein per MSDN-Library durchsuchenCreateWindowEx erstelltes Fenster, welchem einige Properties zugewiesen und gelöscht werden ... nur wollte ich zu Debugzwecken beim Programmende noch prüfen, ob noch welche vorhanden sind,
also hab ich versucht per MSDN-Library durchsuchenEnumProps mir die vorhanden Properties geben lassen.
Leider liefert mir diese Funktion aber auch immer einen "leeren" Property,
egal ob Properties vorhanden sind, oder nicht vorhanden sein sollten.

Alle von mir per MSDN-Library durchsuchenSetProp erstellten Properties werden auch per MSDN-Library durchsuchenRemoveProp wieder gelöscht.

Es sollte also kein Property vorhanden sein ... erst Recht keines ohn Name.

Die Werte des "angelichen" Properties sind:
Code:
hWnd    = aktuelles Handle des Windows
PropName = ''
Data    = $FFFFFFFF

[add]
Hab gerede gemerkt, daß PopName doch nicht auf nil steht, sondern auf $A918, wobei dort doch kein Pointer liegen kann (also bei kleiner als $00010000).

Dabei hat die MessageBox und auch Delphi nur einen LeerString angezeigt, also auch keine Fehlermeldung wegen falschem Pointer, oder so.

Delphi-Quellcode:
Function EnumProps(HWnd: HWND; PropName: PWideChar; Data: THandle): LongBool; StdCall;
  Begin
    Result := True;
    MessageBoxExW(0, PropName, '', 0, 0);
  End;

EnumPropsW(MessageWindow, EnumProps);

Olli 1. Jun 2006 00:38

Re: EnumProps liefert immer LeerProperty?
 
Zitat:

Zitat von himitsu
Hab gerede gemerkt, daß PopName doch nicht auf nil steht, sondern auf $A918, wobei dort doch kein Pointer liegen kann (also bei kleiner als $00010000).

Dürfte sich um ein MSDN-Library durchsuchenAtom handeln. Wenn ich mich recht entsinne, ist genau dieses welches du beschreibst in irgendeiner Art und Weise bei fast jedem Fenster zu finden. Ich entsinne mich jedenfalls des Wertes $A918. Kann das eventuell etwas mit Theme Support unter XP zu tun haben?

himitsu 1. Jun 2006 12:36

Re: EnumProps liefert immer LeerProperty?
 
Hmmm, dabei hab ich nichtmal den XP-Style im Programm aktiviert -.-''

Und das Fenster ist auch nichtmal sichtbar (is halt ein "Unsichtbares" für Verwaltungszwecke) und das Teil is ja auch in 'nem total jungfräulichen Fenster schon da, drum hatte ich mich ja gewundert.

Aber zumindestens wäre das mal 'ne Erklärung ... vielleicht mach ich demnächst mal 'nen kleineres Testprogramm dafür und teste es auf Win98, oder laß es in 'nem Win2K testen ... die sollten ja dann dieses "Atom"? nicht haben, wenn's dafür da ist (hoffe ich mal) ^^


Mir ist das halt nur aufgefallen, weil ich im DebugMode am Programmende prüfen laß, ob noch was in dem Fenster ist, also ob sich auch alles braf wieder abgemeldet/freigegeben hat.

Olli 1. Jun 2006 13:40

Re: EnumProps liefert immer LeerProperty?
 
Also zwischen $0000 und $FFFF sind jedenfalls Atome. Die werden ja an vielen Stellen noch verwendet, obwohl es noch Relikte aus Win16 sind.

himitsu 1. Jun 2006 14:16

Re: EnumProps liefert immer LeerProperty?
 
Zitat:

Zitat von Olli
Also zwischen $0000 und $FFFF sind jedenfalls Atome. Die werden ja an vielen Stellen noch verwendet, obwohl es noch Relikte aus Win16 sind.

Nagut ... mit Atomen mach ich ja eh nichts und damit das programm erstmal läuft hatte ich eh kurz nach dem Auftauchen dieses "Dings" alles kleiner unter $00010000 (also $0000..$FFFF) über ein nettes If in der CallBackFunktion ignoriert ... daß meine Pointer nicht in diesem Bereich liegen können war mir schon klar (ich kann schließlich keinen SpeicherBlock an der Position $00000000 reservieren).

Ich wollte halt nur gern wissen was und warum sich da irgendwas eingenistet hat, was eigentlich hätte nicht da sein soll.

Außerdem dachte ich ja Atoms, "Longs" (Set-/GetWindowLong) und Properties werden einzeln verwaltet und mir ja die Vermutung nah ging, daß mit EnumProps nur die Properties aufgeliestet werden -.-''

Olli 1. Jun 2006 14:42

Re: EnumProps liefert immer LeerProperty?
 
Zitat:

Zitat von himitsu
Außerdem dachte ich ja Atoms, "Longs" (Set-/GetWindowLong) und Properties werden einzeln verwaltet und mir ja die Vermutung nah ging, daß mit EnumProps nur die Properties aufgeliestet werden -.-''

Das ist ja auch durchaus auch so, aber diese Relikte tauchen eben dennoch auf und taugen für bestimmte Sachen auch immernoch recht gut.

Hast du dich noch nicht gefragt, warum unter MSDN-Library durchsuchenSetProp unter anderem auf MSDN-Library durchsuchenGlobalAddAtom verwiesen wird? Versuch doch mal MSDN-Library durchsuchenGlobalGetAtomName, dann bekommst du vielleicht ein Gefühl dafür woher besagtes Atom stammt ;)

himitsu 2. Jun 2006 10:33

Re: EnumProps liefert immer LeerProperty?
 
Na ja ... versuchen kann ich's ma ... ma gucken was ich fühle (aßer dem Schmerz gerade ... seit 2 Stunden ... ~ 1,5*0,7 cm Haut vom Finger gerissen ... aber vielleicht lenkt es ja ab ^^)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:38 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