先取得该MessageBox的窗口句柄。然后向该句柄发送关闭窗口的消息。你的那种模拟好像不能实现的。取得窗口句柄和发送消息要用到API。GetWindow
SendMessage
具体请查阅API使用的相关文档

解决方案 »

  1.   

    错了,是用FindWindow和SendMessage(我就楼上的那个)
      

  2.   

    由于不知道你的MSGBOX是否是同一个标题,如果不是的话,每次都要用FINDWINDOW来取得句柄太麻烦,代码又重复,所有可是在你的MSGBOX语句下面加一条
    SendKeys "{ENTER}"由于模拟按了回车键,所以MSGBOX的内容一闪而过,看不清是什么,所以可以先将程序挂起,大约二秒再用SendKeys "{ENTER}"
      

  3.   

    同意用sendkeys "{ENTER}"
    也可以用一个form模拟成msgbox,想怎么处理都成
    from2.show
    from2.hide
      

  4.   

    MsgBox的下面的程序一定要等MsgBox关闭了之后,程序才会处理的。所以在其下面加SendKey是不能达到目的的
      

  5.   

    同上,不过如果象sunmingdong那样,采用俩Form是非常不错的方法。
      

  6.   

    如果你是使用 msgbox ,那么你想的就不可行msgbox 出来时,你的进程就挂起了,包括timer也暂停要用 hook参考这个:
    http://support.microsoft.com/default.aspx?scid=kb;en-us;Q180936对你肯定有帮助
      

  7.   

    引用:msgbox 出来时,你的进程就挂起了,包括timer也暂停此言我持反对意见,我早就提出过这个问题,不过没有人愿意理睬而已
    在工程里调用MSGBOX,TIMER的解会暂停,但编绎后就不会了。不信可以试试
      

  8.   

    to: GetWindowPos(白痴)你的问题我注意过,但是我刚才又试了一下,编译后一样还是挂起。
    我的代码如下:Private Sub Timer1_Timer()
        MsgBox " dff"
        
        Delay 2000
        SendKeys "{ENTER}"End SubPublic Sub Delay(mSec As Long)
        On Error GoTo ShowErr
        
        Dim TStart  As Single
        
        TStart = Timer
        
        While (Timer - TStart) < (mSec / 1000)
            DoEvents
        Wend
        Exit Sub
    ShowErr:
        MsgBox Err.Source & "------" & Err.Description
        Exit SubEnd Sub我发现我的延时2秒是在我按了确定以后才进行的,不知道你怎么看?我不手动按确定,那msgbox永远都关闭不了
      

  9.   

    我也做了个代码,不过我这人较笨,只会做些简单的代码,新建一个LABEL控件,通过调用MSGBOX来观察TIMER是否有挂起Private Sub Command1_Click()
    MsgBox "123"
    End SubPrivate Sub Form_Load()
    Timer1.Interval = 100
    End SubPrivate Sub Timer1_Timer()
    Label1.Left = Label1.Left + 100
    End Sub
    以上代码在工程里运行,单击COMMAND控纽时可以发现,LABEL控件静止了,表未TIMER挂起了,现在再把它编绎看看然后同样单击按纽,这时会发现LABEL控件依然在移动,表示TIMER没有挂起
    代码非常简单,请一定试试,有兴趣的朋友也请试试