![]() |
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? |
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:
den Text zu holen.
var buffer: array[1..255] of char;
begin GetWindowText(WindowHandle, buffer, sizeof(buffer)); end; |
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. |
Re: Werte aus der Statuszeile auslesen
Danke, aber ich kenne mich leider kaum mit der API aus. Kannst du vielleicht ein kleines Beispiel zusammenbasteln?
|
Re: Werte aus der Statuszeile auslesen
Die LuckieDips sind das Beispiel.
|
Re: Werte aus der Statuszeile auslesen
Zitat:
|
Re: Werte aus der Statuszeile auslesen
Ja, das kannst du als Beispiel nehmen.
|
Re: Werte aus der Statuszeile auslesen
|
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