VB 5/6-Tipp 0756: Inhalt fremder Messageboxen auslesen
von Dario
Beschreibung
Ja - Es ist möglich, den Inhalt einer fremden MessageBox auszulesen!
Die üblichen Fenster-API's genügen.
Hier wird eine MessageBox über ihren Titel identifiziert und ihr Inhalt ausgelesen, aber letztendlich muss nur ihr hWnd bekannt sein.
Zu diesem Tipp existieren im Tippupload die folgende(n) Aktualisierung(en):
[VB 5/6 Tippvorschlag 0446] Verbesserug von Tipp 756: Inhalt fremder Messageboxen auslesen
Schwierigkeitsgrad: | Verwendete API-Aufrufe: FindWindowA (FindWindow), FindWindowExA (FindWindowEx), GetWindowTextA (GetWindowText) | Download: |
' Dieser Quellcode stammt von http://www.activevb.de ' und kann frei verwendet werden. Für eventuelle Schäden ' wird nicht gehaftet. ' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. ' Ansonsten viel Spaß und Erfolg mit diesem Source! ' ------------- Anfang Projektdatei Projekt1.vbp ------------- ' --------- Anfang Modul "Module1" alias Module1.bas --------- Option Explicit Declare Function FindWindow Lib "user32" _ Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long Declare Function FindWindowEx Lib "user32" _ Alias "FindWindowExA" ( _ ByVal hWnd1 As Long, _ ByVal hWnd2 As Long, _ ByVal lpsz1 As String, _ ByVal lpsz2 As String) As Long Declare Function GetWindowText Lib "user32" _ Alias "GetWindowTextA" ( _ ByVal hWnd As Long, _ ByVal lpString As String, _ ByVal cch As Long) As Long Const MaxLen As Long = 2048 Sub Main() Dim Success As Boolean Dim Title As String Call MsgBox("Wir lesen den Inhalt einer MessageBox aus, die ""foo"" " & _ "als Titel hat" & vbCrLf & "Erstellt diese ggf. vor dem " & _ "Fortschreiten", vbInformation) Title = ReadMessageBoxContents("foo", Success) If Success Then Call MsgBox("Inhalt der fremden Messagebox: """ & Title & """", _ vbInformation) Else Call MsgBox("Keine nichtleere Messagebox diesen Titels " & _ "vorhanden!", vbExclamation) End If End Sub Public Function ReadMessageBoxContents(ByVal Title As String, Optional ByRef _ Success As Boolean) As String Dim hWndMessage As Long Dim hWndSub As Long Dim Buffer As String ' Messagebox suchen hWndMessage = FindWindow(vbNullString, Title) ' Hmm - keine da If hWndMessage = 0 Then Success = False Exit Function Else ' Erstes Fenster der Klasse STATIC suchen hWndSub = FindWindowEx(hWndMessage, 0&, "STATIC", vbNullString) ' Hmm - keines da If hWndSub = 0 Then Success = False Exit Function Else ' Text lesen Buffer = ReadWindowText(hWndSub, MaxLen) End If ' Wir haben versucht, das Icon zu lesen; das ist auch in Static If Buffer = "" Then ' Neuer Versuch hWndSub = FindWindowEx(hWndMessage, hWndSub, "STATIC", _ vbNullString) ' Hmm - immernoch keines da If hWndSub = 0 Then Success = False Exit Function Else ' Text lesen - jetzt aber! Buffer = ReadWindowText(hWndSub, MaxLen) End If End If End If Success = True ' Jetzt ging's ReadMessageBoxContents = Buffer End Function Public Function ReadWindowText(ByVal hWnd As Long, Optional ByVal MaxLength _ As Long = 1024) As String Dim Buffer As String Buffer = String$(MaxLen, Chr$(0)) Call GetWindowText(hWnd, Buffer, MaxLength) Buffer = Left$(Buffer, InStr(Buffer, Chr$(0)) - 1) ReadWindowText = Buffer End Function ' ---------- Ende Modul "Module1" alias Module1.bas ---------- ' -------------- Ende Projektdatei Projekt1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.