用过瑞星杀毒软件的朋友都知道,他可以定时关闭询问对话框。询问对话框的实现很简单,调用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
没有相关教程
|