AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Strings anderer Anwendungen verändern ?
Thema durchsuchen
Ansicht
Themen-Optionen

Strings anderer Anwendungen verändern ?

Ein Thema von PierreB · begonnen am 31. Mär 2005 · letzter Beitrag vom 1. Apr 2005
 
Benutzerbild von mael
mael

Registriert seit: 13. Jan 2005
391 Beiträge
 
Delphi XE3 Professional
 
#4

Re: Strings anderer Anwendungen verändern ?

  Alt 31. Mär 2005, 23:21
Zitat von Airblader:
@mael
ich seh ja, dass es zweifellos möglich ist, aber hieß es nicht deletzt hier irgendwo, dass labels kein handle haben? *verwirrt ist*
Doch, schon richtig, Labels haben kein Handle.
Die Idee ist: Finde die Form auf der das Label ist z.B. mit
RealChildWindowFromPoint(GetDesktopWindow, Point); wobei Point die Bildschirm-Koordinaten der Maus wären.

Danach muß man ObjectFromHWnd verwenden um das dazu passende TForm-Objekt zu bekommen und per ReadProcessMemory die Felder in einen record einlesen. Dort ist besonders FComponents interessant, da sich dort die Liste der Komponenten und ihre Dimensionen bzw. Positionen befinden.
Es läßt sich also rausfinden welcher Punkt sich in welchem VCL-Control befindet.

Delphi-Quellcode:
  TComponentFieldsVCL3_VCL5 = record
  //private
    FSelf: Pointer;
    FOwner: TComponent;
    FName: TComponentName;
    FTag: Longint;
    FComponents: TList;
    FFreeNotifies: TList;
    FDesignInfo: Longint;
    FVCLComObject: Pointer;
    FComponentState: TComponentState;
  //protected
    FComponentStyle: TComponentStyle;
  end;
Das mit dem record ist notwendig da leider Klassen je nach Delphi-Version etwas andere Speicherausrichtung haben und TForm selbst z.B. sich in der Felderreihenfolge und Anordnung auch von der Version abhängig ist. (daher auch VCL3_VCL5)

Um die Caption auszulesen habe ich den folgenden record verwendet (man muß noch ein bisschen mehr machen

Delphi-Quellcode:
  {$ALIGN 2}
  TControlFieldsVCL3 = record
  //private
    FParent: TWinControl;
    FWindowProc: TWndMethod;
    FLeft: Integer;
    FTop: Integer;
    FWidth: Integer;
    FHeight: Integer;
    FControlStyle: Word;
    FControlState: Byte;
    FDesktopFont: Boolean;
    FVisible: Boolean;
    FEnabled: Boolean;
    FParentFont: Boolean;
    FParentColor: Boolean;
    FAlign: TAlign;
    FDragMode: TDragMode;
    FIsControl: Boolean;
    FText: PChar;
    FFont: TFont;
    FColor: TColor;
    FCursor: TCursor;
    FDragCursor: TCursor;
    FPopupMenu: TPopupMenu;
    FHint: string;
    FFontHeight: Integer;
    FScalingFlags: TScalingFlags;
    FShowHint: Boolean;
    FParentShowHint: Boolean;
    FOnMouseDown: TMouseEvent;
    FOnMouseMove: TMouseMoveEvent;
    FOnMouseUp: TMouseEvent;
    FOnDragDrop: TDragDropEvent;
    FOnDragOver: TDragOverEvent;
    FOnStartDrag: TStartDragEvent;
    FOnEndDrag: TEndDragEvent;
    FOnClick: TNotifyEvent;
    FOnDblClick: TNotifyEvent;
  end;
Etwas tricky ist noch die Behandlung von Listen (wie FComponents), da alle dort vorkommenden Pointer auch wiederrum nur in der Fremdanwendung gültig sind, man also nicht die Objekte normal verwenden, sondern ReadProcessMemory einsetzen muß.

HTH,
Maël
HxD, schneller Hexeditor:
http://mh-nexus.de/hxd
  Mit Zitat antworten Zitat
 


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 10:33 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