有时程序中要用msgbox弹出对话框,如果没有点击确定,就会卡在那里。
我想msgbox一个对话框,如果用户在一段时间内没有点击。就自动关闭这个提示框?
除了findwindow,sendmessage之外,还有没有别的方法?

解决方案 »

  1.   

    自己做个msgbox想怎么控制都行
      

  2.   

    加个时间判断
    DateDiff("s", time1, Now()) >= 30 
        
      

  3.   

    微软标准的做法是:
    MessageBoxIndirect()
    传递一个结构体,包含一个窗口的函数,然后在WM_INIT里面设置定时器,并且控制关闭。但是对于初学者,建议自己做一个窗口算了。
      

  4.   

    timer控件的事件不受msgbox的影响,可以在timer控件的事件里用sendkeys发送回关闭msgbox。
    编译以下程序后,测试:Private Sub Command1_Click()
       Timer1.Enabled = True
       MsgBox "xxx"
       Timer1.Enabled = False
      
    End SubPrivate Sub Form_Load()
      Timer1.Interval = 2000
    End SubPrivate Sub Timer1_Timer()
       Timer1.Enabled = False
       SendKeys "{ENTER}"
       
    End Sub
      

  5.   

    同上,自已设计一个窗口模拟MsgBox即可。
      

  6.   


    '3秒后自动关闭msgbox   3000 3秒可自行设置 
    Private Declare Function MessageBoxTimeout Lib "user32" Alias "MessageBoxTimeoutA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long, ByVal wlange As Long, ByVal dwTimeout As Long) As LongPrivate Sub Command1_Click()
    MessageBoxTimeout Me.hwnd, "Hello World", "Tips", vbInformation, 0, 3000
    End Sub
      

  7.   

    一个例子:Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
    (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
    lParam As Any) As LongPrivate Const WM_CLOSE = &H10
    Private Const MsgTitle As String = "Test Message"Private Sub Command1_Click()
    Dim nRet As Long
    Timer1.Interval = 3000
    Timer1.Enabled = True
    nRet = MsgBox("若您不回应的话,3 秒后此 MsgBox 会自动关闭", 64, MsgTitle)
    Timer1.Enabled = False
    End SubPrivate Sub Timer1_Timer()
    Dim hWnd As Long
    hWnd = FindWindow(vbNullString, MsgTitle)
    Call SendMessage(hWnd, WM_CLOSE, 0, ByVal 0&)
    End Sub注意:此方法的限制说明:1、当常数设定为 VbAbortRetryIgnore 或 VbYesNo 时,无效!
    2、在 Design Time 时,无效,必须 Make EXE 之后才有效!
      

  8.   

    Private Declare Function MessageBoxTimeout Lib "user32" Alias "MessageBoxTimeoutA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As VbMsgBoxStyle, ByVal wlange As Long, ByVal dwTimeout As Long) As Long
    Private Sub Command1_Click()
    MessageBoxTimeout Me.hwnd, "Hello World", "Tips", vbExclamation, 0, 3000
    End Sub
    6楼的好,我想知道你是怎么知道这函数的
      

  9.   


    6楼的简洁实用,wType参数完全和默认的Msgbox参数一样,好用!
      

  10.   

    支持6L,我还真没研究过除了MessageBox以外的相关函数,学习了。
      

  11.   

    SoftModalMessageBox这个没公开的API更强大,定时关闭不算什么,它甚至可以随意更改按钮个数和按钮文本,或者让信息框不显示任何按钮都可以~~
    所有消息对话框的API最终都会调用SoftModalMessageBox进行操作,当年那个俄罗斯VB论坛写的代码打不开了,晕。
      

  12.   

    Dim WsShell As Object
    Set WsShell = CreateObject("Wscript.Shell ")
    WsShell.Popup "你还在上网吗?", 1, "温馨提示 "
      

  13.   

    还是自己写个messagebox简单多了..用showdialog()来模拟msgbox