Aunque el hilo es viejo. Dejo una solución que puede servir a alguien:
Código vb:
Ver originalOption Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Private Declare Function CloseWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_COMMAND = &H111
Private msgTitle As String
Public Sub TimerProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)
KillTimer hwnd, idEvent
Dim hMessageBox As Long
hMessageBox = FindWindow("#32770", msgTitle)
If hMessageBox Then
SendMessage hMessageBox, WM_COMMAND, 6&, 0&
End If
End Sub
Public Function MsgBoxEx(hwnd As Long, Prompt, Optional cSeconds As Long = 1, Optional Buttons As VbMsgBoxStyle = vbOKOnly, Optional Title, Optional HelpFile, Optional Context) As VbMsgBoxResult
Dim cMSeconds As Long
cMSeconds = cSeconds * 1000
Title = IIf(Title = "", App.Title, Title)
msgTitle = Title
SetTimer hwnd, 0&, cMSeconds&, AddressOf TimerProc
MsgBoxEx = MsgBox(Prompt, Buttons, Title, HelpFile, Context)
End Function
Para llamarlo:
Código vb:
Ver originalMsgBoxEx Me.hwnd, "Se cierra en 5 segundos", 5, vbOKOnly + vbInformation, "Título"