Autor |
Beitrag |
Rupert
      
Beiträge: 47
Erhaltene Danke: 1
Netware, Linux, WIN A-Z, DOS
Delphi 2005- Delphi 2009
|
Verfasst: Do 17.11.11 14:03
Problem:
Es läuft eine Software, die mir eine Zahlentabelle (siehe Bild) liefert. Diese Werte will ich aber auslesen und weiter verarbeiten.
Durch X-Spy sehe ich, dass das Fenster ein TBGrid ist.
(Die Software wurde von jemanden in Delphi programmiert).
Ich bin so weit, dass ich mir das Fenster in eine Position schiebe und die Felder fokussiere.
Mir ist aber nicht klar, wie ich die Inhalte lesen kann. Klickt man auf die Tabellenfelder, dann sind sie selektiert und grün hinterlegt.
Hier die Routine, die mir das Fenster positioniert und die Schleife, die eine Zeile selektiert. Das Kommando zum Auslesen der Werte fehlt noch.
Weiß jemand wie das geht?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| procedure TForm1.Button1Click(Sender: TObject);
begin begin hFenster :=FindWindow('TfrmStatistics', 'Statistik'); if hFenster <> 0 then MoveWindow(hFenster, -1600, 0, 698, 478, true) else halt; end; randomize;
x:=mouse.CursorPos.X; y:=mouse.CursorPos.Y;
hFenster :=FindWindow('TdxDBGrid', 'Statistik');
for i:=0 to 17 do begin Klicke_auf (-1490+(i*30),376); getWindowText(hfenster,pchar(StringGrid1.Cells[1+i,1]),10); end; SetCursorPos(x,y);
AssignFile(Exportfile,'D:\_Delphi5\Statistiken\report.txt'); rewrite(Exportfile); end; |
Einloggen, um Attachments anzusehen!
_________________ Grüße Rupert
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Do 17.11.11 14:16
Ich habe leider gerade keine Zeit, aber ein TdxDBGrid ist kein Stringgrid .....
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 17.11.11 14:16
Ich werde aus deinem Quelltext nicht so ganz schlau. Du suchst dir ein Fenster X mit FindWindow. OK. Dann verschiebst du es an eine feste Position. Warum auch immer, aber OK. Dann klickst du in das Fenster rein. Warum auch immer, aber OK. Und dann kopierst du den Fenstertitel des Fensters X in Zellen deines Stringrinds. Im Stringgrid hast du dann alo 17 mal den Fenstertitel von Fenster X stehen. In deinem Fall also 17 mal das Wort "Statistik". Was soll das?
eventuell Hilft es die Hilfe zu GetWindowText zu lesen: msdn.microsoft.com/e...20%28v=vs.85%29.aspx Insbesondere:
Zitat: | However, GetWindowText cannot retrieve the text of a control in another application. |
Was willst du denn eigentlich machen?
|
|
Rupert 
      
Beiträge: 47
Erhaltene Danke: 1
Netware, Linux, WIN A-Z, DOS
Delphi 2005- Delphi 2009
|
Verfasst: Do 17.11.11 15:20
Danke - GetWindowText cannot retrieve the text of a control in another application
Ich dachte, dass ich die Inhalte der Tabelle mit Getwindowstext erhalte - falsch
Ich will die Tabelleninhalte auslesen.
_________________ Grüße Rupert
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 17.11.11 16:09
Dann musst du es aber erst mal finden. Mit FindWindow, bekommt man nur das Handle eines Toplevel-Fensters und nicht von Child-Fenstern. Steht auch in der Hilfe. Die Frage ist nur, ob die Komponente überhaupt ein handle hat. Es scheint ja eine Delphi-Komponente zu sein, ein Stringgrid und ob das ein Handle hat, weiß ich nicht. Es kann auch so sein wie beim Label, welches auch kein Handle hat. stellt sich zusätzlich die Frage, wie man an die einzelnen Zellen kommt.
|
|
Rupert 
      
Beiträge: 47
Erhaltene Danke: 1
Netware, Linux, WIN A-Z, DOS
Delphi 2005- Delphi 2009
|
Verfasst: Do 17.11.11 16:33
Mit Strg+C kann ich die Werte jedenfalls nicht herauskopieren.
_________________ Grüße Rupert
|
|
Xion
      

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)
|
Verfasst: Fr 18.11.11 09:31
www.delphi-library.d...iewtopic.php?t=97738
In Kapitel 3 (3.SourceCode-Block) lese ich aus einem Memo mit WM_GETTEXT und FindWindowEx. Das brauchst du auch. Was du bei WM_GETTEXT bekommst musst du mal ausprobieren. Wenn du Glück hast, dann den Zelleninhalt 
_________________ 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)
|
|
Rupert 
      
Beiträge: 47
Erhaltene Danke: 1
Netware, Linux, WIN A-Z, DOS
Delphi 2005- Delphi 2009
|
Verfasst: Do 24.11.11 19:03
Ich habe nun intensiv getestet - leider kein poitives Ergebnis.
Das Fenster
Delphi-Quelltext 1:
| hFenster :=FindWindowEX(hFenster,0,'TfrmStatistics',NIL); |
liefert mir keine Textinformationen. In der Anwendung - ich habe es schon zuvor gepostet - ist der rechte Mausclick umgeleitet und auch Strg-C ist wirkungslos.
Das dürfte möglicherweise der Grund für die leeren Strings bei der Botschaft WM_GETTEXT sein.
Interessant ist, dass es dieses Thema mehrmals im WEB zu finden gibt, aber nirgends eine Lösung gefunden wurde - vielleicht gibt es auch gar keine, das würde aber eine wahnsinns Arbeit für mich bedeuten.
Zur Zeit versuchen wir mittels IBM Rational Functional Tester die Geheimnisse der Tabelle zu lüften - es kann doch nicht sein, dass man etwas, was am Bildschirm sichtbar ist, nicht auslesen kann.....
Ich bleib d'ran 
_________________ Grüße Rupert
|
|
Xion
      

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)
|
Verfasst: Do 24.11.11 20:49
Rupert hat folgendes geschrieben : | Das Fenster
Delphi-Quelltext 1:
| hFenster :=FindWindowEX(hFenster,0,'TfrmStatistics',NIL); |
liefert mir keine Textinformationen. In der Anwendung - ich habe es schon zuvor gepostet - ist der rechte Mausclick umgeleitet und auch Strg-C ist wirkungslos.
Das dürfte möglicherweise der Grund für die leeren Strings bei der Botschaft WM_GETTEXT sein. |
D.h. du wolltest mal den Fenstertitel auslesen?
Quick & Dirty:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var h: THandle; S: String; TextLength: DWord; begin h:=FindWindow(nil,'TfrmStatistics');
TextLength := SendMessage(H, WM_GETTEXTLENGTH, 0, 0) ; SetLength(S,TextLength+1); SendMessage(H,WM_GETTEXT,TextLength+1,Integer(Pointer(S)));
ShowMessage(S); end; |
Rupert hat folgendes geschrieben : | Zur Zeit versuchen wir mittels IBM Rational Functional Tester die Geheimnisse der Tabelle zu lüften - es kann doch nicht sein, dass man etwas, was am Bildschirm sichtbar ist, nicht auslesen kann..... |
Natürlich kann das sein, Labels kann man auch nicht auslesen (zumindest nicht über ein Handle).
Was mich etwas wundert ist, dass ich garkein Handle zu dem StringGrid/DBGrid kriege...obwohl der Winspector mir eins sagen kann.
Delphi-Quelltext 1:
| h := FindWindowEx(h, 0, 'TdxDBGrid' , nil); |
Auch über die "Suche" kriege ich bei mir immer 0 (außer wenn ich z.B. ein Memo mit platziere, das findet er problemlos).
Delphi-Quelltext 1:
| h := FindWindowEx(h, 0, nil , nil); |
PS: Hab eben noch EnumChildWindows gefunden. Habs auf die Schnelle aber nicht zum arbeiten gebracht  Vielleicht kommst du damit an das Handle.
www.swissdelphicente.../showcode.php?id=727
_________________ 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)
|
|
|