Thema: Delphi Datenbank Superbase ?

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Datenbank Superbase ?

  Alt 5. Aug 2025, 18:29
Jupp, hier und überall sollten sich Millionen Beispiele finden lassen.


Erstmal das Suchen:

* Es gibt dutzende Programme, für sowas, wie z.B. Bei Google suchenWinSpy oder [GOOGLE]Spy++[/GOOGLE]
und ich bin mir fast sicher, dass sich auch in der DP mindestens ein Programm finden lässt.

* Aber es geht auch selbst:
Ein TEdit, zwei TMemo und ein TTimer (z.B. mit 100 ms Interval)
Delphi-Quellcode:
procedure TForm2.Timer1Timer(Sender: TObject);
var
  P: TPoint;
  H: HWND;
  S: string;
  L: Integer;
begin
  GetCursorPos(P);
  H := WindowFromPoint(P);
  if H <> 0 then begin
    SetLength(S, 256);
    L := GetClassName(H, PChar(S), Length(S) + 1);
    SetLength(S, L);
    Edit1.Text := S;

    L := GetWindowTextLength(H);
    SetLength(S, L);
    if L > 0 then
      GetWindowText(H, PChar(S), L + 1);
    Memo1.Text := S;

    SetLength(S, 256); // ja, nachfolgend bin ich mal bissl schlampig (zeige auch nur den ClassName ohne die Caption/ComponentName, welche man aber für die Suche gebrauchen könnte, aber z.B. einfach die Maus auf die TitelLeiste ...)
    Memo2.Lines.BeginUpdate;
    Memo2.Clear;
    while H <> 0 do begin
      GetClassName(H, PChar(S), 256);
      Memo2.Lines.Add(PChar(S));
      H := GetParent(H);
    end;
    Memo2.Lines.EndUpdate;
  end else begin
    Edit1.Text := '(none)';
    Memo1.Clear;
    Memo2.Clear;
  end;
end;
Und nun die Maus über den Bildschirm flutschen lassen.


Bezüglich dem Auslesen steckt oben schon der Code mit drin, für die Vorschau.

Man braucht nun also nur noch die Handle der gwEdit-Controls.
HWND = Window Handle

Für die Suche wurde das HWND des Controls unter dem Mauszeiger genommen,
aber jetzt nutzen wir den gefundenen Namen/Text, um damit das Control zu suchen.

MSDN-Library durchsuchenFindWindow
MSDN-Library durchsuchenFindWindowEx / Hier im Forum suchenFindWindowEx
MSDN-Library durchsuchenEnumWindows / Hier im Forum suchenEnumWindows

Einmal lässt sich damit das gewünschte Fenster finden
und dann auf diesem Fenster auch die entsprechenden Edit-Controls.

Rate mal, warum Windows Windows heißt?
OK, eigentlich wegen der Fenster,
aber in Wirklichkeit ist zufällig alles ein Fenster (Window) ... egal ob Fenster, Panel, PageControl, aber eben auch die einzelnen Edit-Controls und Buttons.
(außer die Anwendung malt alles selbst, wie z.B. im FireMonkey oder Java)


Und hat man z.B. einen Button gefunden, so läßt er sich auch drücken.
MSDN-Library durchsuchenSendMessage/MSDN-Library durchsuchenPostMessage
mit BM_CLICK
oder WM_LBUTTONDOWN und WM_LBUTTONUP
oder WM_KEYDOWN und WM_KEYUP (VK_SPACE oder VK_RETURN).


PS: Delphi-TLabel sind keine "echten" WinControls, drum lässt sich so ihr Text nicht auslesen.
Das "echte" TEXT-Control wäre Delphi-Referenz durchsuchenTStaticText.

Außerdem lassen sich disablete Controls nicht suchen, da sie nicht auf Messages reagieren und WindowFromPoint durch sie hindurch guckt, auf deren Parent.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 5. Aug 2025 um 18:44 Uhr)
  Mit Zitat antworten Zitat