Den Text einer Messagebox ermitteln

#1561896
Lesenswert?

Guten Tag allerseits

Eine Web applikation (javascript) popt mit window.alert eine Mitteilung 
ein. Z.Bsp. "Die Eingabe muss mindestens 3 Zeichen enthalten".
Aus meinem Windows-Programm (Visual FoxPro) will ich nun diese 
Mitteilung lesen.

Mit FindWindow finde ich die Handle auf dieses Fenster.
Mit FindWindowEx finde ich den Handle auf den (einzigen) Button.
Mit GetWindowTextLength ermittle ich die Grösse des Arrays und
mit GetWindowText kann ich die Caption des Buttons lesen.

Aber wie komme ich an den Text ran? Versuche mit 'Label' haben nichts 
gebracht.

(Wenn ich die Web-Applikation mit FireFox starte, dann komme ich zwar 
bis zum Handle des Alert-Windows, aber dort ist Ende der Fahnenstange. 
FindWindowEx gibt 0 zurück. Aber dies nur so nebenbei)

Dank im voraus.
Persönliche Seite #1562123
Lesenswert?

Der Klassenname ist nicht das, was Du suchst, sondern die Ressourcen-ID. 
Jedes Dialogelement hat eine Ressourcen-ID und kann über diese 
angesprochen werden, ein Fensterhandle kann aus dieser Ressourcen-ID mit 
der Win32-API-Funktion

  GetDlgItem(hDlg, nIDDlgItem)

bestimmt werden. hDlg ist das Fensterhandle des Dialogs (hier also der 
Messagebox), nIDDlgItem eben jene Ressourcen-ID.

Mit dem so ermittelten Fensterhandle des Static-Controls kannst Du nun 
GetWindowText aufrufen.
#1562174
Lesenswert?

Ich muss meine obige Aussage korrigieren: FindWindowEx gibt mir die 
Handle korrekt zurück.
Mit Spy++ sehe ich, dass die Alertbox 2 static's hat.

1. Schritt:
nHwnd = FindWindowEx(nHandle, 0,"Static",  0) gibt mir die Handle auf 
die 1. leere Static.

2. Schritt
Mit GetWindow(nHwnd , GW_NEXT ) ermittle ich den naechsten Handle. Und 
korrekt erhalte ich den Handle auf die Static, die meinen gesuchten Text 
enthaelt.

3. Aber GetWindowText gibt mir nur einen leeren String zurück.

=======================

Bezugnehmend auf Dein letztes Schreiben:
Ressourcen-ID habe in WinSpy++ nicht gefunden.
Instance-Handle kam mir der Sache am naechsten  :)  aber damit gab mir 
GetDlgItem eine Null zurück.
Angehängte Dateien:
#1562290
Lesenswert?

O Mann o Mann.
Das sind so die peinlichen Augenblicke im Leben, wo man auf die Bühne 
treten muss und mit flüsternder Stimme "mea culpa" sagen muss.

Also meine Vorgehensweise war korrekt. Aber wenn man der Function 
GetWindowText das Array, worin er den Text zurückgeben soll, nicht als 
Referenz sondern als Value übergibt, tja .....
... ich sag' jetzt mal nicht, wieviele Stunden mich das gekostet hat.

Hier noch der korrekte Code. Ist zwar Visual FoxPro, sollte aber 
verstaendlich genug sein:
1
LPARAMETERS nHandle
2
#DEFINE GW_NEXT 2
3
LOCAL cTxt, nLng
4

5
IF nHandle != 0
6
  nHandle = FindWindowEx(nHandle, 0,"Static",  0)
7
  DO WHILE nHandle != 0
8
    nLng = GetWindowTextLength(nHandle)
9
    cTxt = REPLICATE(CHR(0) , nLng +1)
10
    nLng = GetWindowText( nHandle,@cTxt, nLng +1)
11
    cTxt =  IIF(nLng=0, "", LEFT(cTxt,nLng))
12
    IF !EMPTY(cTxt)
13
      THISFORM.text1.VALUE = cTxt
14
    ENDIF
15
    nHandle= GetWindow(nHandle, GW_NEXT )
16
  ENDDO
17
ENDIF
Gast #1563038
Lesenswert?

Grusel, per Windows API die Fenster vom Browser einlesen um eine 
Webseite fernzusteuern.

Schon mal überlegt was passiert wenn Patches in den Browser eingespielt 
werden müssen ?

Bekommst du Geld dafür ?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren