Autor Beitrag
Rupert
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47
Erhaltene Danke: 1

Netware, Linux, WIN A-Z, DOS
Delphi 2005- Delphi 2009
BeitragVerfasst: 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?

ausblenden 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, -16000698478, 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);

  // export
  AssignFile(Exportfile,'D:\_Delphi5\Statistiken\report.txt');
  rewrite(Exportfile);
end;
Einloggen, um Attachments anzusehen!
_________________
Grüße Rupert
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47
Erhaltene Danke: 1

Netware, Linux, WIN A-Z, DOS
Delphi 2005- Delphi 2009
BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47
Erhaltene Danke: 1

Netware, Linux, WIN A-Z, DOS
Delphi 2005- Delphi 2009
BeitragVerfasst: Do 17.11.11 16:33 
Mit Strg+C kann ich die Werte jedenfalls nicht herauskopieren.

_________________
Grüße Rupert
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 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47
Erhaltene Danke: 1

Netware, Linux, WIN A-Z, DOS
Delphi 2005- Delphi 2009
BeitragVerfasst: Do 24.11.11 19:03 
Ich habe nun intensiv getestet - leider kein poitives Ergebnis.

Das Fenster
ausblenden 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
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: Do 24.11.11 20:49 
user profile iconRupert hat folgendes geschrieben Zum zitierten Posting springen:
Das Fenster
ausblenden 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:
ausblenden 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, 00) ; 
 SetLength(S,TextLength+1);
 SendMessage(H,WM_GETTEXT,TextLength+1,Integer(Pointer(S)));

 ShowMessage(S);
end;


user profile iconRupert hat folgendes geschrieben Zum zitierten Posting springen:
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.

ausblenden 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).
ausblenden Delphi-Quelltext
1:
 h := FindWindowEx(h, 0nil , 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)