Werte aus einem Fenster auslesen
spacer
Autor Nachricht
Rupert
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31
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 markieren
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);

// export
AssignFile(Exportfile,'D:\_Delphi5\Statistiken\report.txt');
rewrite(Exportfile);
end;
Einloggen, um Attachments anzusehen!
_________________
Grüße Rupert
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 979
Erhaltene Danke: 124

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
DRY DRY KISS
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Luckie
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 11803
Erhaltene Danke: 146

WindowsXP Professional SP2
BDS2006, VS C++ Express, Eclipse (Java), Flex (Flash, AS)
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?

_________________
Gruß Michael
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Rupert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31
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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Luckie
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 11803
Erhaltene Danke: 146

WindowsXP Professional SP2
BDS2006, VS C++ Express, Eclipse (Java), Flex (Flash, AS)
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.

_________________
Gruß Michael
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Rupert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31
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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
EE-Maler
Beiträge: 1754
Erhaltene Danke: 62

Windows XP
Delphi (2005 Bug Edition), Java (Eclipse), Haskell (ghci), C++ (Visual Studio 2010, Qt Creator)
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
Jen, [this computer] is infected. If this was a human being, I'd shoot it in the face. (IT Crowd)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Rupert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31
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 markieren
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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
EE-Maler
Beiträge: 1754
Erhaltene Danke: 62

Windows XP
Delphi (2005 Bug Edition), Java (Eclipse), Haskell (ghci), C++ (Visual Studio 2010, Qt Creator)
BeitragVerfasst: Do 24.11.11 20:49 
user profile iconRupert hat folgendes geschrieben Zum zitierten Posting springen:
Das Fenster
ausblenden Delphi-Quelltext markieren
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 markieren
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;


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 markieren
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 markieren
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
Jen, [this computer] is infected. If this was a human being, I'd shoot it in the face. (IT Crowd)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home