`
isiqi
  • 浏览: 16466925 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

VB调用Shell函数顺序处理

阅读更多

当你使用Shell函数的时候,在VB程序里运行另一个可执行程序是很容易的。在本篇文章里,我将向你演示如何通过一种简单的方式来改进Shell的功能。

Shell接受两个自变量。第一个是将要运行的EXE文件的名称,包括其路径。第二个自变量用来指定程序的窗口样式。这个自变量是可选的;如果省略掉的话,程序就会以最小化的形式运行。这里所展现的技术在工作的时候不会理会程序的窗口样式,甚至程序没有窗口都可以。(关于窗口样式自变量的更多信息,请参考VB的帮助。)

Shell会异步地运行目标程序,这就意味着执行可以在第二个程序执行完之前就返回VB程序。在很多情况下,这没有问题;但是在有的情况下,这可能就是问题了。一个例子是,当你的VB程序在某种程度上要依靠外壳程序完成其操作的结果。在这种情况下,你就需要某种方式来暂停VB程序,直到另一个程序结束。

第一步是取得外壳程序的句柄。Shell函数会返回其程序的ID,或者PID。一旦有了这个,你就可以使用OpenProcess API函数来取得句柄:

Public Declare Function OpenProcess Lib "kernel32" _
(ByValdwDesiredAccess As Long, _
ByValbInheritHandle As Long, _
ByValdwProcessId As Long) As Long

&H100000(通常由常量SYNCHRONIZE来表示)这个值传递给第一个自变量,将0(作为一个长型)传递给第二个自变量。第三个自变量是Shell函数返回的PID。函数所返回的值是代表外壳程序的Windows进程的句柄。有了这个句柄,你可以使用WaitForSingleObject API函数来暂停VB程序,直到外壳程序被终止。声明是:

Private Declare Function WaitForSingleObject Lib _
"kernel32" (ByValhHandle As Long, _
ByValdwMilliseconds As Long) As Long

第一个自变量是程序所等待的句柄,它从OpenProcess函数获得。第二个自变量是等待时间。如果你传递了一个毫秒值,那么函数就会在外壳程序结束的时候,或者在指定的时间间隔用完的时候返回,这取决于哪一种情况先发生。如果你想要函数一直等到外壳程序结束,那么就要传递&HFFFF(常常由常数INFINITE表示)这个值。

下面的示例代码显示了如何使用这些API来给程序设定外壳,并等待其完成。

Const SYNCHRONIZE = &H100000
Const INFINITE = &HFFFF

Private Sub ShellProgramAndWait(ProgramName As String)

Dim hHandle As Long, pid As Long
txtStatus.Text = "Processing"
txtStatus.Refresh
pid = Shell(ProgramName, vbNormalFocus)
If pid <> 0 Then
hHandle = OpenProcess(SYNCHRONIZE, 0&, pid)
WaitForSingleObject hHandle, INFINITE
txtStatus.Text = "Finished"
Else
txtStatus.Text = "Error shelling " & ProgramName
End If

End Sub

WaitForSingleObject函数会有效地冻结你的VB程序,这是你需要注意的事情,这样用户就不会认为出了问题。例如在这段代码里,一个Text Box(文本框)控件向用户显示了一条消息。要注意,Refresh(刷新)方法的使用确保了该消息在程序进入等待状态之前被显示出来。然后,当外壳程序终止的时候,一个已完成(Finished的消息就显示出来了。

来源:www.cncfan.com

分享到:
评论

相关推荐

    调用Shell 执行exe 等待返回例子(VB)

    本篇文章将深入探讨如何在VB中调用Shell执行exe,并等待其返回结果,帮助开发者更好地理解和应用这一技术。 首先,我们需要了解VB中的Shell函数。Shell函数是VB提供的一个内置函数,用于启动一个新的进程或执行一个...

    VB中shell函数实例——大学生最需要的七类网站

    例如,可以创建一个表单(Form1),在按钮点击事件中调用Shell函数打开求职网站: ```vb Private Sub Command1_Click() Shell "C:\Program Files\Google\Chrome\Application\chrome.exe --new-window ...

    vb SHELL函数实例

    在VB6.0版本中,SHELL函数是一个非常重要的功能,它允许我们从Visual Basic程序中调用外部应用程序,执行命令行操作或者打开特定的文件。这个实例可能涉及到如何使用SHELL函数来实现串口通信。 串口通信是计算机...

    VB 调用API函数设计关于窗体.rar

    VB 调用API函数设计关于窗体,看第一眼,我还以为是调用Windows系统的关于窗口,仔细看,定义了自己的信息,这个例子可看作是VB使用API函数的例子,了解一些用法,关于本例子中的API用法,可看以下代码:  API函数...

    VB Shell调用后等待程序运行结束

    为了实现这个需求,我们需要掌握如何让VB等待`Shell`调用的程序运行结束。 首先,让我们深入理解`Shell`函数的基本用法。`Shell`函数的语法如下: ```vb Public Declare Function Shell Lib "kernel32" Alias ...

    VB 中SHELL用法详解

    VB 中,常以Shell指令来执行外部程式,然而它在Create该外部process 後,立刻 就会回到vb 的下一行程式,无法做到等待该Process结束时,才执行下一行指令, 或是说,无法得知该Process是否已结束,甚者,该...

    vb调用vbs脚本

    首先,VB调用VBS脚本的主要目的是利用VBS的灵活性和简洁性来执行一些特定任务,如系统管理、文件操作或自动化流程。VBS脚本易于编写,且支持Windows API调用,这使得它在系统级任务中非常实用。 **调用VBS脚本的...

    vbshell

    此外,正确处理进程的结束和错误处理也是使用Shell函数时应考虑的关键点。 总结来说,VBShell和Run Shell VB是VB编程中用于交互操作系统的强大工具,它们极大地扩展了VB程序的功能,使开发者能灵活地控制和整合系统...

    VB Shell外壳实例附源码.rar

    1. **Shell函数**:理解如何使用VB的Shell函数来启动外部程序。Shell函数的基本语法是`Shell("path\to\program", [WindowStyle])`,其中`path\to\program`是需要启动的应用程序路径,`WindowStyle`参数可以设置程序...

    调用浏览器程序(VB6.0源代码)

    首先,VB6.0中的"Shell"函数是调用外部程序的关键。`Shell`函数允许我们启动一个操作系统外壳程序,例如浏览器。在VB6.0中,你可以使用以下代码来启动默认的浏览器并导航到特定的URL: ```vb Private Sub Command1_...

    VB 调用记事本

    总结来说,VB调用记事本主要通过Shell函数或WScript.Shell对象的Run方法来实现,它们都能有效地启动记事本程序,并可选地打开指定的文本文件。这些技术在编写VB应用程序时十分实用,能够帮助用户处理文本或进行其他...

    C# 编写DLL 让VB调用

    在.NET框架下,C#和VB.NET都是微软...以上就是关于"C#编写DLL让VB调用"的知识点,涵盖了创建C# DLL、接口设计、VB引用和调用DLL的方法。通过理解这些概念,开发者可以有效地在不同.NET语言之间实现代码共享和互操作。

    调用浏览器程序(VB6.0源代码)调用浏览器

    1. **声明API函数**:VB6.0本身并不直接提供调用浏览器的内置函数,所以需要借助Windows API。在VB的模块(Module)中声明`ShellExecute`函数。`ShellExecute`函数位于`shell32.dll`库中,声明如下: ```vb ...

    VB调用windows图片浏览器

    总之,通过VB调用Windows图片浏览器是一项基础但重要的技能,对于开发桌面应用程序,尤其是涉及图片处理和展示的软件,具有极大的实用价值。掌握这一技巧,不仅可以提升程序的功能性,还能增强用户体验,是每一个VB...

    vb调用其他应用程序

    总结,VB调用其他应用程序主要通过`Shell`函数实现,结合Timer控件可以实现定时启动。在实际应用中,需注意程序路径的正确性,以及根据实际需求调整启动间隔和等待时间。对于开机延时启动,可以通过VB代码或Windows...

    VB调用 示例VB调用 示例

    【VB调用 示例】是一个关于如何在Visual Basic (VB)环境中进行函数调用和程序交互的教程。VB是一种流行的编程语言,尤其适用于开发Windows应用程序。在这个示例中,我们可能会探讨如何利用VB来调用外部代码,如DLL...

    VB调用“运行”对话框

    首先,VB调用“运行”对话框主要依赖于`ShellExecute` API函数,该函数是Windows API的一部分,可以用来执行各种与文件相关的操作,包括启动程序。`ShellExecute`函数的语法如下: ```vb Declare Function ...

    调用API函数设计About窗口...

    本文将深入探讨如何使用Visual Basic(简称VB)通过调用API函数来设计一个“关于”窗口(About窗口),这不仅能够增强应用程序的专业性,还能提供额外的信息给用户,如系统状态、应用程序版本等。 ### 核心知识点...

Global site tag (gtag.js) - Google Analytics