AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Subclassing/Superclassing zurückverfolgen
Thema durchsuchen
Ansicht
Themen-Optionen

Subclassing/Superclassing zurückverfolgen

Ein Thema von himitsu · begonnen am 6. Dez 2015 · letzter Beitrag vom 6. Dez 2015
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#1

Subclassing/Superclassing zurückverfolgen

  Alt 6. Dez 2015, 01:58
Morschn,

wenn ich per MSDN-Library durchsuchenGetClassName einen Namen bekomme, wie kann ich dann rausfinden auf welche Klasse(n) diese Klasse aufbaut?
Also vorallem würde ich gern die zugrundeliegende Standardklasse von Windows erfahren.

z.B. Delphi-Referenz durchsuchenTEdit -> MSDN-Library durchsuchenEDIT

Grund ist vorallem, wie man die Parameter eines HWND auswerten könnte.
z.B. GWL_STYLE -> ES_NOHIDESEL
Dieses Bit könnte ja auch was ganz Anderes bedeuten, wenn es kein EDIT wäre.
z.B. SS_NOTIFY -> TLabel TStaticText

https://msdn.microsoft.com/en-us/lib.../bb773183.aspx
http://winapi.foosyerdoos.org.uk/inf...superclass.php
$2B or not $2B

Geändert von himitsu ( 6. Dez 2015 um 02:12 Uhr)
  Mit Zitat antworten Zitat
SMO

Registriert seit: 20. Jul 2005
178 Beiträge
 
Delphi XE6 Professional
 
#2

AW: Subclassing/Superclassing zurückverfolgen

  Alt 6. Dez 2015, 15:26
Gute Frage.

Delphi benutzt wohl die "alte" Methode (per deinen Links, also nicht die ComCtl-v6-Methode), um Subklassen zu erstellen.
Siehe TWinControl.CreateSubClass (in Vcl.Controls). Dort wird einfach GetClassInfo aufgerufen, um Params.WindowClass mit den Standardwerten für "BUTTON", "EDIT", usw. zu füllen. Am wichtigsten dabei wohl Params.WindowClass.lpfnWndProc, die in der Property DefWndProc der Delphi-Klasse gespeichert wird.
Denn Subclassing bedeutet hier ja nichts anderes, als eine neue Window-Klasse zu registrieren (z.B. "TEdit"), die intern auf die WndProc einer existierenden Klasse (z.B. "EDIT") zurückgreift, um zumindest Teile deren Verhalten zu "erben".

Du könntest vermutlich per GetClassInfo die WndProc-Adressen aller Standardklassen (BUTTON, EDIT, ...) abfragen, dann mit dem DefWndProc-Wert einer Delphi-Klasse vergleichen, um herauszufinden, was sie benutzt.

Lass uns wissen wenn du einen besseren Weg findest.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: Subclassing/Superclassing zurückverfolgen

  Alt 6. Dez 2015, 16:24
Jupp, hatte ich schon gesehn, aber das Problem ist, daß ich eigentlich das Programm allgemein halten und möglichst nichts Delphi-Spezifisches einbinden wollte.
(abgesehn von der Quellcodegenerierung, die man noch auf andere Sprachen ausweiten könnte)
Und das beim Auslesen "fremder" Prozesse und nicht des Eigenen,
wobei ich keine manuelle Übersetzungsliste wollte, denn TEdit, TLabeledEdit und dann die Edits anderer VCL-Bibliotheken. (DevExpress uvw.)

Wollte endlich mal ein altes Projekt fortsetzen (neu aufsetzen), welches ich grade gebrauchen konnte.
Unicode und demnächst 64-Bit (32 Bit/64 Bit-Bridge) hab ich so weit unter Kontrolle, aber Subclassing/Superclassing ist noch ein Problem, damit ich die Eigenschaften der "Basisklassen" anzeigen kann.

GetWindowLong, GetClassLong und SendMessage/PostMessage sollen nur die Grundwerte anzeigen und dann jeweils typabhängig noch die Eigenschaften der Basisklassen.

Hatte erst an GetWindowLong/GetClassInfo gedacht und hoffte da die innere Klasse auslesen zu können.
Eventuell könnte man auch spezifische Messages senden und das Ergebnis auswerten?
Angehängte Dateien
Dateityp: 7z WinSpy2.exe.7z (1,36 MB, 4x aufgerufen)
$2B or not $2B

Geändert von himitsu ( 6. Dez 2015 um 16:34 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:26 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