当前位置:编程学习 > VB >>

问打开对话框后,程序如何继续给打开的对话框sendKeys

一个VB程序 打开一个选择文件对话框后程序就停下来了;
我想实现在打开对话框后,程序可以继续走下去,可以采用SendKeys函数给 打开的选择文件对话框 发送alt+o的信息,怎么办啊?
谢谢了。麻烦了。 --------------------编程问答-------------------- 现在论坛怎么那么少人气啊,发了好多基础知识的贴,一个回复都没有。没有以前那么活跃了。 --------------------编程问答-------------------- 用定时器或者另一个程序控制。 --------------------编程问答-------------------- 可以在打开对话框前先SETTIMER,每半秒查一次有没有新窗口弹出来,有就关了 --------------------编程问答-------------------- 在 VB 中,一旦你调用了 MsgBox,正在执行的一些后台的处理作业,例如计数器或时钟等,都会停下来。直到回应了 MsgBox 之后,一切才会恢复正常。或许你并不希望如此,这也有可能造成一些不必要的错误!
要解决这个问题,可以使用 Windows API 去调用 MessageBox Function,它的使用方法、外观和 MsgBox 的结果完全相同,但是它却不会中断一些后台的处理作业。

在以下的范例中,需要在 Form 中加入一个 Label、二个 CommandButton 及一个 Timer,不更改任何属性。

'在声明区中加入以下声明:

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 Sub Command1_Click()
MsgBox "计时器停掉了!", 64, "VB 的讯息框"
End Sub

Private Sub Command2_Click()
MessageBox Me.hwnd, "注意!计时器还在跑!", "API 的讯息框", 64
End Sub

Private Sub Form_Load()
Timer1.Interval = 1000
Label1.Caption = "目前的时间是:" & Time
End Sub

Private Sub Timer1_Timer()
Label1.Caption = "目前的时间是:" & Time
End Sub
--------------------编程问答-------------------- 二:
如何设定 MsgBox 在若干时间之后若无回应则自动关闭? 
 
在我们的印象中,VB 所提供的 MsgBox 是一个强制回应的窗口,一定要按了其中的某一个按钮之后,它才会关闭。但是在某些软件中,我们会看到,明明是使用系统的 MsgBox,可是如果不理它,几秒钟之后,它就自行关闭了。这是如何做到的呢?只要使用系统的 MsgBox 再加一个 Timer 就可以控制了。

我们都知道 MsgBox 可以设定成很多不同的样子,可以有很多不同的图示,不同的按钮,其中控制按钮的部份,可以设定的常数如下:

常数                  值 说明 
vbOKOnly               0 只显示 OK 按钮。 
VbOKCancel             1 显示 OK 及 Cancel 按钮。 
VbAbortRetryIgnore     2 显示 Abort、 Retry 及 Ignore 按钮。 
VbYesNoCancel          3 显示 Yes、No 及 Cancel 按钮。 
VbYesNo                4 显示 Yes 及 No 按钮。 
VbRetryCancel          5 显示 Retry 及 Cancel 按钮。 

为什么要特别提到 MsgBox 的常数呢?因为下面我们要告诉您的方法,还是有一点点限制的!当您设定的常数是 VbAbortRetryIgnore 或 VbYesNo 时,下面的方法也是没用的!

'在窗体的声明区中加入以下的声明

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) 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 WM_CLOSE = &H10
Private Const MsgTitle As String = "Test Message"


'在窗体中加入一个 CommandButton 及一个 Timer 控件,加入以下代码:

Private Sub Command1_Click()
Dim nRet As Long
Timer1.Interval = 3000
Timer1.Enabled = True
nRet = MsgBox("若您不回应的话,3 秒后此 MsgBox 会自动关闭", 64, MsgTitle)
Timer1.Enabled = False
End Sub

Private Sub Timer1_Timer()
Dim hWnd As Long
hWnd = FindWindow(vbNullString, MsgTitle)
Call SendMessage(hWnd, WM_CLOSE, 0, ByVal 0&)
End Sub

执行程序时,当 MsgBox 出现 3 秒之后,就会自动关闭了。

注意:此方法的限制说明:

1、当常数设定为 VbAbortRetryIgnore 或 VbYesNo 时,无效!
2、在 Design Time 时,无效,必须 Make EXE 之后才有效!

在 Timer 中加入其他代码,当然就可以执行其他后台操作了。 --------------------编程问答-------------------- 调用另外一个程序,这是最好的解决方案了。或者尝试触发定时器,延时处理看看。 不过需要说明的是你用sendkeys也不是好的解决方案,最好是使用句柄直接操作,这个功能启动另外一个进程处理。参考:
http://bbs.csdn.net/topics/390435884
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,