用過瑞星殺毒軟件的朋友都知道,他可以定時關閉詢問對話框。詢問對話框的實現很簡單,調用vb中提供的msgbox就可以實現了,可是問題是詢問對話框是模式對話框,不關閉它的話,下面的代碼無法繼續執行,這一點也多多少少給朋友們造成了一些困饒。那么怎么解決呢,我的方案是調用api函數messagebox代替msgbox,結合timer控件實現自動關閉,閑話少說,看代碼,下面的代碼演示了如何在10秒中之后關閉對話框(窗體上一個按鈕,一個timer控件):
Option Explicit
Const MB_DEFBUTTON1 = &H0&
Const MB_DEFBUTTON2 = &H100&
Const MB_DEFBUTTON3 = &H200&
Const MB_ICONASTERISK = &H40&
Const MB_ICONEXCLAMATION = &H30&
Const MB_ICONHAND = &H10&
Const MB_ICONINFORMATION = MB_ICONASTERISK
Const MB_ICONQUESTION = &H20&
Const MB_ICONSTOP = MB_ICONHAND
Const MB_OK = &H0&
Const MB_OKCANCEL = &H1&
Const MB_YESNO = &H4&
Const MB_YESNOCANCEL = &H3&
Const MB_ABORTRETRYIGNORE = &H2&
Const MB_RETRYCANCEL = &H5&
Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetDlgItem Lib "user32" (ByVal hDlg As Long, ByVal nIDDlgItem 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 BM_CLICK = &HF5
Dim i As Long
Private Sub Command1_Click()
Timer1.Enabled = True
MessageBox Me.hwnd, "this is test", App.Title, MB_OK
Timer1.Enabled = False
End Sub
Private Sub Form_Load()
Timer1.Enabled = False
Timer1.Interval = 1000
End Sub
Private Sub Timer1_Timer()
i = i + 1
If i >= 10 Then
Dim dlghwnd As Long
Dim buttonhwnd As Long
dlghwnd = FindWindow("#32770", App.Title)
buttonhwnd = GetDlgItem(dlghwnd, 2) ´其中的2,用spy++獲得
SendMessage buttonhwnd, BM_CLICK, 0&, ByVal 0&
End If
End Sub
原文轉自:http://www.anti-gravitydesign.com