关于定时关闭询问对话框的一点体会

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 在LabVIEW中,要实现对话框延时自动关闭,可以通过以下步骤进行操作: 1. 首先,进入LabVIEW,并创建一个新的VI。 2. 在Block Diagram面板上,拖放一个"Dialog"(对话框)的VI组件。 3. 连接该对话框组件的输出线到"Wait(ms)"(等待毫秒)的输入端。 4. 在"Wait(ms)"的输入端,设置一个适当的等待时间,即希望对话框显示的时间。 5. 连接"Wait(ms)"的输出线到"Dialog"组件的输入端。 6. 在"Dialog"组件的属性中,设置对话框的样式、标题、提示信息等等。 7. 连接"Dialog"组件的输出线到Block Diagram面板上的其他控件或处理结构,以定义对话框弹出后的操作或逻辑。 8. 编译并运行该VI。 通过以上步骤,LabVIEW中的对话框将会在指定的等待时间后自动关闭。这种方法可以在需要延时自动关闭对话框的LabVIEW程序中使用,以改善用户界面和用户体验。 ### 回答2: 在LabVIEW中,可以使用以下步骤实现对话框的延时自动关闭: 1. 首先,创建一个VI(虚拟仪器)来实现这个功能。在VI中,将需要弹出对话框的代码放置在“While循环”中。 2. 在开始之前,我们需要定义一个记数器变量来计算延时时间。可以使用“计时器”或“循环计数”组件来实现该功能。 3. 在对话框弹出的前面,添加一个判断语句来检查记数器的值是否达到了预定的延时时间。 4. 如果记数器没有达到预设时间,就将记数器加一,然后继续循环。 5. 如果记数器达到了预定时间,就自动关闭对话框。可以使用“关闭VI”函数或“取消显示对话框”函数来关闭对话框。 6. 在循环结束之后,需要释放内存和关闭VI。 通过以上步骤,可以实现LabVIEW对话框延时自动关闭的功能。这样,在弹出对话框后,它将会自动关闭,而不需要用户手动关闭。这对于需要在一定时间后自动关闭对话框的应用场景非常有用。 ### 回答3: 在LabVIEW中,可以利用Timed Loop结构和Dialog Timeout Express VI实现对话框的延时自动关闭。 首先,将对话框控件放置在主VI的界面上。然后,在Timed Loop结构内部创建一个子VI,用于执行一个定时的延时操作。在子VI内部,使用Dialog Timeout Express VI来实现对话框的自动关闭。这个VI的输入参数包括对话框及其ID、延时时间等。在子VI中,将延时时间作为输入传递给Dialog Timeout Express VI,并将对话框及其ID连接到该VI的相应输入终端。这样,当子VI被启动后,对话框会在指定的延时时间后自动关闭。 在主VI中,将子VI的输出结果与对话框控件的输入终端连接起来,以实现对话框的显示。通过控制子VI的启动和停止,可以控制对话框的出现和关闭。 需要注意的是,Timed Loop结构的定时器设置应与子VI的延时时间相同,以保证对话框在正确的时间后关闭。 以上是一种基于LabVIEW的实现方式,通过Timed Loop结构和Dialog Timeout Express VI可以实现对话框的延时自动关闭
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值