AW: Windows "Hinweis" in IE10 unterbinden
19.10.2022 13:33:44
volti
Hallo Jürgen,
falls Msgboxen weggeklickt werden müssen, nutze ich immer einige API-Befehle dazu.
Da der Code bei MsgBoxen ja nicht weiterläuft, setzt man vorher einen Timer mit Ziel einer Callback-Sub. In dieser wird dann periodisch das Auftauchen der Msgbox abgefragt, und wenn das passiert, etwas gemacht. Z.B. das Schließen eben dieser MsgBox mit DestroyWindow, dem Senden einer Button-Click-Message oder eben die Schließen-Message WM_CLOSE.
Danach wird der Timer gelöscht. Funktioniert in der Regel einwandfrei.
Voraussetzung ist die korrekte Ermittlung des Handle zur MsgBox. Hierfür braucht man den Captiontest und/oder die Klasse. Leider taucht bei mir die besagte Windows-Meldung nicht (mehr) auf, so dass ich den Captiontext oder die Klasse nicht ermitteln kann und den Code nicht testen kann. Grundsätziches Vorgehensbeispiel siehe nachfolgenden Code.
PS: Das Senden der Enter-Taste ist m.E. hier nur schlecht oder gar nicht möglich, da dieses immer an die Vordergrundanwendung geht, und das kann m.E. hier nicht sicher gestellt werden. U. Umständen wird an die falsche Anwendung oder zum falschen Zeitpunkt gesendet.
Code:
Private Declare PtrSafe Function PostMessageA Lib "user32" ( _
ByVal hwnd As LongPtr, ByVal wMsg As Long, _
ByVal wParam As LongPtr, ByVal lParam As LongPtr) As Long
Private Declare PtrSafe Function FindWindowA Lib "user32" ( _
ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function SetTimer Lib "user32" ( _
ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr, _
ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As LongPtr
Private Declare PtrSafe Function KillTimer Lib "user32" ( _
ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr) As Long
Const WM_CLOSE As Long = &H10
Dim hTimer As LongPtr
Sub Test()
Set ie = New InternetExplorer
ie.Visible = True
hTimer = SetTimer(0&, 0&, 100, AddressOf MsgBoxCallback)
ie.Navigate Url
Do While ie.ReadyState < 3
If q < 100000 Then
DoEvents
Else
Exit Do
End If
q = q + 1
Loop
If hTimer > 0 Then KillTimer 0&, hTimer ' Timer löschen
Set html = ie.Document
Set element = html.getElementById("ID")
Inhalt = element.innerText
End Sub
Private Sub MsgBoxCallback()
hDlg = FindWindowA("#32770", "Msg-Captiontext")
If hDlg > 0 Then
KillTimer 0&, hTimer: hTimer = 0 ' Timer löschen
PostMessageA hDlg, WM_CLOSE, 0, 0
End If
End Sub
_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz