Autor Beitrag
r4in
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 06.08.10 17:17 
Hi Leute,

hat jemand ein Script zum auslesen einer fremden MessageBox wenn der Titel der Messagebox bekannt ist?
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Fr 06.08.10 17:26 
Sollte eigentlich auch mit Suche im MSDN FINDWINDOW funktionieren. Grad mit 2 Programmen getestet (in einem mit Showmessage ein Fenster erzeugt mit dem titel 'findmich', und im anderen das fenster mit dem titel 'findmich' geschlossen).

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
r4in Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 06.08.10 17:30 
hmm wenn ich mir die msgbox mit WinSpector anschaue, bekomm ich den Text niht ausgegeben, nur die Überschrift...
kann man eine msgbox vorm auslesen präzise schützen?
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 06.08.10 17:56 
Hmm, also an den Button komm ich ran:


ausblenden Delphi-Quelltext
1:
2:
3:
  h:=FindWindow(nil,'Fernsehzeitung');
  h:=FindWindowEx(h,0,'TButton',nil);  
  ShowMessage(GetText(h));


Die GetText Funktion hab ich von forum.delphi-treff.d...lieber-GetWindowText

Man kriegt den FindWindowEx vielleicht auch dazu dass er alle "Komponenten" der Reihe nach liefert, durch mehrmaliges aufrufen...aber ich habs nicht geschafft auf Anhieb.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 07.08.10 04:40 
Ich glaube nicht, dass die Messageboxen von Windows irgendwelche visuelle Komponenten zur Textdarstellung benutzen. Deshalb wird man da über die Standardwege zum Auslesen von Komponenten nicht weiterkommen.

Wenn also die Messagebox nicht auf WM_GETTEXT reagiert, wird es schwieriger.

// EDIT:
Gerade getestet:
Bei einem ShowMessage ist z.B. nur der Button im Fenster, der Text wird direkt gezeichnet wie vermutet.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Sa 07.08.10 07:05 
Würde eigentlich der Text an einer fixen stelle im Speicher des Fensters stehen (als String muss er ja irgendwie gespeichert sein im RAM)? Weil dann könnte man ja eigentlich zum Anfang vom Speicher des Fensters einfach das Offset dazuaddieren und den String auslesen, oder mach ich mir da grad das etwas zu einfach?

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 07.08.10 07:52 
Sowas funktioniert schon, aber da es je nach Programmiersprache usw. unterschiedlich ist funktioniert das nur, wenn das Zielprogramm bekannt ist und man dort schauen kann wo es steht.

Ich habe im Quelltext von Delphi aber einmal geschaut. Da wird ein Label mit Namen Message erstellt. Dieses zeigt WinSpy aber nicht an (danach war ich gegangen). Dennoch sollte man da herankommen. Ich habe es nicht weiter ausprobiert.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Sa 07.08.10 08:56 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var h: THandle; A,x: integer; aName: array [0..255of Char;
begin
  h:=FindWindow(nil,'Fernsehzeitung');
  x:=0;
  for A:= 0 to 10 do
    begin
      aName:='';
      x:=FindWindowEx(h,x,nil ,nil);
      GetClassName(x, aName, 256);
      ShowMessage(GetText(x)+' - '+string(aName));
    end;
end;


So hab ich mir das vorgestellt (man kommt aber trotzdem nicht an das Label ran) ;)


Hier ist übrigens ein toller Code zum aufspüren von Klassennamen:
www.delphitricks.com...rrent_mouse_pos.html

Der zeigt auch, dass es dort kein Label gibt, denn alles dort heißt "TMessageForm".

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 07.08.10 09:00 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe im Quelltext von Delphi aber einmal geschaut. Da wird ein Label mit Namen Message erstellt. Dieses zeigt WinSpy aber nicht an (danach war ich gegangen). Dennoch sollte man da herankommen. Ich habe es nicht weiter ausprobiert.

Dann kann das aber nur ein VCL-Dialog gewesen sein. Darunter fällt auch der ShowMessage-Dialog aus der Unit Dialogs der VCL. Eine normale Messagebox wird von Windows erzeugt und da müsste der Text in einem Fenster der Klasse STATIC stehen. Das Label gibt es nur in der VCL und da es kein Handle hat, da es von TGraphicControl abgeleitet ist und von der VCL selber gezeichnet wird, kommt man über WM_GETTEXT auch nicht an den Text dran.