Registriert seit: 29. Mai 2002
37.621 Beiträge
Delphi 2006 Professional
|
Re: Werte aus der Statuszeile auslesen
11. Nov 2003, 10:21
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.
Michael Ein Teil meines Codes würde euch verunsichern.
|