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 Werte aus der Statuszeile auslesen (https://www.delphipraxis.net/11639-werte-aus-der-statuszeile-auslesen.html)

Cuchulainn 11. Nov 2003 07:15


Werte aus der Statuszeile auslesen
 
Morgen,

Ich habe folgendes Problem: Ich soll ein Programm schreiben, mit dem wir Tests für ein anderes Programm automatisieren können. Tastaturbefehle senden und Mausbewegungen und -klicks kann ich jetzt simulieren. Zum Testen muss ich Werte, die in der Statuszeile stehen, mit anderen Werten überprüfen.
Die Statuszeile sieht etwas folgendermaßen aus:
Zahl | Bezeichnung | Datum | Anzahl Datensätze

Ich erkläre jetzt nicht, was die einzelnen Angaben bedeuten, für mich ist nur die Anzahl der Datensätze relevant. Ich muss also auslesen, was in diesem Moment an vierter Stelle in der Statuszeile steht und das mit einem anderen Wert vergleichen. Komme ich irgendwo da dran?

Dax 11. Nov 2003 07:20

Re: Werte aus der Statuszeile auslesen
 
Kuck mal in Luckie's nonVCL Tuts(wegen der Statuszeile). da steht (glaub ich)irgendwo(ich jetzt nich genau wo) drin, wie man das mit den Statuszeilen macht. Meine Idee wäre, das Handle des entsprechenden Teiles der Zeile zu finden und mit
Delphi-Quellcode:
var buffer: array[1..255] of char;
begin
  GetWindowText(WindowHandle, buffer, sizeof(buffer));
end;
den Text zu holen.

Luckie 11. Nov 2003 10:21

Re: Werte aus der Statuszeile auslesen
 
Nein, so geht das nicht. Grund: Die Statusbar gehört zu den CommonControls und die werden unter 32-Bit Windows anders behandelt, als die "normalen" Controls. Und zwar sieht es so aus. Unter 16-Bit konnte jeder Prozess auf den Adressraum jedes anderen Prozesse zugreifen. Davon haben auch vilele Programme gebrauch gemnacht, so dass sich Microsoft gezwungen sah, solhe Nachrichten an "normale" Controls (Edits, Listboxe, etc. in einen gemeinsamen Speicherbereich zu mappen, damit diese Programme noch funktionieren. Deswegen kann man mit WM_GETTEXT das Edit eines anderen Prozesse auslesen aber nicht die Eigenschaften eines CommonControls, da Microsoft bei diesen Controls, die erst ab 32-Bit dazu kamen, diese sonder Behandlung der Nachrichten nicht implementiert hatte - man musste ja nicht abwärtskompatible sein.
Lösung für NT ff.: Speicher im fremden Prozess mit VirualAllocEx reservieren, die Sattusbar auslesen und seine mit WriteProzessMemory in diesen Speicherbereich schreiben und dann mit ReadPreocessMemory, diesen Speicherbereich in eine identische Struktur im eigenen Speicherbereich kopieren.
Diese Vorgehensweise benutze ich, um die Icons und deren Positionen Listview des Desktops, der zum Explorer-Prozess gehört, auszulesen und zu speichern, um sie dann wieder herstellen zu können. Kuck dir einfach dazu mein Programm LuckieDips an.

Cuchulainn 11. Nov 2003 11:06

Re: Werte aus der Statuszeile auslesen
 
Danke, aber ich kenne mich leider kaum mit der API aus. Kannst du vielleicht ein kleines Beispiel zusammenbasteln?

Luckie 11. Nov 2003 11:10

Re: Werte aus der Statuszeile auslesen
 
Die LuckieDips sind das Beispiel.

Cuchulainn 11. Nov 2003 12:08

Re: Werte aus der Statuszeile auslesen
 
Zitat:

Zitat von Luckie
Die LuckieDips sind das Beispiel.

Was meinst du damit?

Luckie 11. Nov 2003 12:13

Re: Werte aus der Statuszeile auslesen
 
Ja, das kannst du als Beispiel nehmen.

Matze 11. Nov 2003 12:16

Re: Werte aus der Statuszeile auslesen
 
www.luckie-online.de/downloads/LuckieDips1_3.zip

Cuchulainn 11. Nov 2003 13:29

Re: Werte aus der Statuszeile auslesen
 
Danke. Ich sehe es mir mal an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:51 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 by Thomas Breitkreuz