AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

CodeRedirect von Protected-Methoden

Ein Thema von freedy · begonnen am 3. Apr 2012 · letzter Beitrag vom 4. Apr 2012
Antwort Antwort
freedy

Registriert seit: 16. Apr 2007
Ort: Göttingen
11 Beiträge
 
Delphi XE Professional
 
#1

CodeRedirect von Protected-Methoden

  Alt 3. Apr 2012, 08:44
Delphi-Version: XE
Hallo Forum,

in meinem aktuellen Projekt möchte ich eine Überwachung des Properties "Enabled" von allen Ableitungen von TControl überwachen. Das Setzen auch aus dem Programmablauf heraus soll nur dann möglich sein, wenn die notwendigen Rechte vorliegen respektive meine Anwendung das Okay dafür gibt. Allerdings stoße ich hier auf die Schwierigkeit, dass ich eine Methode einer Klasse umleiten muss.

Ich habe nun verschiedene Vorgehen ausprobiert, um auf das "TControl.SetEnabled" zuzugreifen. Leider ohne großen Erfolg. Ein Code-Redirect durch Einfügen eines Jumps an der Originaladresse schien mir sinnvoll. Ich konnte aber nicht mehr zurück auf die Ursprungsadresse verweisen, um dort den Originalcode auszuführen.

Gibt es eine Möglichkeit, einen Programmteil in solche Grundklassen einzuschleusen, so dass ein Aufruf des inherited in abgeleiteten Klassen automatisch auch auf diesen Code geleitet und anschließend der ursprüngliche Code ausgeführt wird?

Vielen Dank für Eure Hilfe.

Michael.
Michael
  Mit Zitat antworten Zitat
freedy

Registriert seit: 16. Apr 2007
Ort: Göttingen
11 Beiträge
 
Delphi XE Professional
 
#2

AW: CodeRedirect von Protected-Methoden

  Alt 3. Apr 2012, 18:21
Hallo,

ich hab's nun nach einigen Versuchen geschafft. Für meine Lösung habe ich mir die CPU-Ansicht in der IDE während der Laufzeit ohne Redirect angeschaut. Dort habe ich die nötigen Assembler-Befehle entsprechend übernommen. So habe ich Zugriff auf die jeweilige Instanz und die übergebenen Parameter bekommen.

Bis auf den Fehler, dass der JZ-Befehl im Original-Code auf eine falsche Adresse zeigt, klappt alles super. Dieser Fehler kann aber durch eine einfache Überprüfung in der aufrufenden Funktion umgangen werden.

Trotzdem Danke für's Nachdenken.

Viele Grüße
Michael
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#3

AW: CodeRedirect von Protected-Methoden

  Alt 3. Apr 2012, 21:08
Das Parsen uebernehmen einige Units für dich z.b. Flocke ( http://www.delphipraxis.net/54339-ge...code-hook.html ) oder mit ( http://uall.cheat-project.net/uallCollection )
  Mit Zitat antworten Zitat
freedy

Registriert seit: 16. Apr 2007
Ort: Göttingen
11 Beiträge
 
Delphi XE Professional
 
#4

AW: CodeRedirect von Protected-Methoden

  Alt 3. Apr 2012, 21:24
Hallo brechi,

vielen Dank für den Hinweis. Ich werde das morgen noch einmal ausprobieren. Ich muss mich in die ganzen Möglichkeiten dieser Hooks noch richtig einarbeiten. So richtig fit fühle ich mich da noch nicht.

Grüße
Michael
Michael
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: CodeRedirect von Protected-Methoden

  Alt 3. Apr 2012, 22:21
Gibt es nicht in XE oder XE2 eine hauseigene Lösung?

Mir ist so, als hatte ich das vor 'ner Weile hier mal gesehn.
Ich glaub da wird intern ein generisches Objekt erstellt, worüber die Umleitung geregelt wird und dann wird die RTTI auf die neue Klasse umgeleitet, bzw. der Typ wird im gewünschten Objekt ersetzt, so daß ab nun alles über die neue Klasse abläuft, oder irgendwie so.



SetEnabled ist ja virtual, also könnte man auch einfach die VMT ändern.



TApplicationEvents.OnMessage und dort auf CM_ENABLEDCHANGED mit dem Handle deiner Komponente warten. [edit]alle[/edit]
PS: Du hast dir nicht umsonst den VCL-Quellcode gekauft ... ich an deiner Stelle würde dort öfters mal nachsehn.



Ab XE2 könnte man eventuell auch das DataBinding für sowas verwenden.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 3. Apr 2012 um 22:31 Uhr)
  Mit Zitat antworten Zitat
freedy

Registriert seit: 16. Apr 2007
Ort: Göttingen
11 Beiträge
 
Delphi XE Professional
 
#6

AW: CodeRedirect von Protected-Methoden

  Alt 3. Apr 2012, 22:35
Gibt es nicht in XE oder XE2 eine hauseigene Lösung?

Mir ist so, als hatte ich das vor 'ner Weile hier mal gesehn.
Ich glaub da wird intern ein generisches Objekt erstellt, worüber die Umleitung geregelt wird und dann wird die RTTI auf die neue Klasse umgeleitet, bzw. der Typ wird im gewünschten Objekt ersetzt, so daß ab nun alles über die neue Klasse abläuft, oder irgendwie so.
Hallo Himitsu,

eine hauseigene Lösung kenne ich hier nicht.


SetEnabled ist ja virtual, also könnte man auch einfach die VMT ändern.
Sollen dann alle Nutzer meiner Rechteverwaltung die VCL neu erstellen? Das halte ich für nicht sinnvoll und wird bei anderen höchst wahrscheinlich auch auf Ablehnung stoßen.

TApplicationEvents.OnMessage und dort auf CM_ENABLEDCHANGED mit dem Handle deiner Komponente warten. [edit]alle[/edit]
PS: Du hast dir nicht umsonst den VCL-Quellcode gekauft ... ich an deiner Stelle würde dort öfters mal nachsehn.
An der Stelle, wo die Message ausgelöst wird, bin ich bereits zu spät. Nach meinem Konzept muss ich mir merken, ob aus dem Programmverlauf heraus das Control deaktiviert ist oder ob es durch die Rechteverwaltung deaktiviert wurde. Beides zusammen ergibt dann den Zustand von Enabled. Bei meinen Versuchen die Message abzufangen, fingen die Controls an leicht zu flackern.
Michael
  Mit Zitat antworten Zitat
Antwort Antwort

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 18:42 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