1.1k Aufrufe
Gefragt in Anwendungen(Java,C++...) von
Hi zusammen,

vielleicht könnt ihr mir bei einem vb6 problem helfen.

ich möchte gern den text einer messagebox eines anderen programmes heraus bekommen. dies kann in c++, delphi und vb geschrieben sein.

ich bekomme den titel des aktiven fensters mit GetWinText() aber bin nicht in der lage den text der box zu ermitteln.

kann ich hier eine funktion anwenden?
hat wer einen lösungsansatz oder beispielcode?

gruss

1 Antwort

0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Ich habe hier nur VBS in Excel, daher müsstest du es für VB6 eventuell noch modifizieren. Siehe alle Kommentare im Quellcode:


Private Declare Function GetForegroundWindow Lib "user32.dll" () As Long
Private Declare Function FindWindowEx Lib "user32.dll" _
Alias "FindWindowExA" ( _
ByVal hwndParent As Long, _
ByVal hwndChildAfter As Long, _
ByVal lpszClass As String, _
ByVal lpszWindow As String) As Long
Private Declare Function GetWindowText Lib "user32" _
Alias "GetWindowTextA" ( _
ByVal hwnd As Long, _
ByVal lpString As String, _
ByVal cch As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32" _
Alias "GetWindowTextLengthA" ( _
ByVal hwnd As Long) As Long
Private Declare Function GetWindow Lib "user32.dll" ( _
ByVal hwnd As Long, _
ByVal wCmd As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

' Vorbereitung: Notepad (Editor) öffnen, ein paar Zeichen eintippen, STRG+F4 drücken.
' Daraufhin erscheint eine handelsübliche MessageBox. Diese nicht schließen.

Private Sub CommandButton1_Click()
Dim h1 As Long, i1 As Long, i2 As Long, p1 As String

' Ich starte diese Prozedur, wechsle anschließend zu Notepad und seiner MessageBox.
' 3 Sekunden sollten dafür reichen
Sleep (3000)

h1 = GetForegroundWindow ' Fenster mit aktuellem Fokus ermitteln
h1 = FindWindowEx(h1, 0&, "Static", vbNullString) ' Dort das erste STATIC-Kontrollelement ermitteln

For i2 = 1 To 2
i1 = GetWindowTextLength(h1) + 1 ' Länge des Kontrollelementtextes ermitteln
If i1 > 1 Then ' Ist es der Text oder ein Icon? (Icons haben keinen Text)
p1 = Space(i1) ' Nötigen Platz reserveren
i1 = GetWindowText(h1, p1, i1) ' Text auslesen
Debug.Print "Text: " & Left$(p1$, i1) ' ...und ausgeben

Exit For ' Geschafft! Schleife verlassen
Else
h1 = GetWindow(h1, 2) ' Nächstes Kontrollelement ermitteln, dieses sollte endgültig den Text enthalten
End If
Next i2
End Sub
...