在VB中怎样打开外部程序

在VB中怎样打开外部程序,第1张

shell "程序地址"

如果需要用程序打开文件,比如说用播放器打开一个视频文件 那么写成

shell "c:\program files\kmplayer\kmplayerexe d:\movie\1rm"

这样就可用调用kmplayer播放器播放位于d盘 movie文件夹里面的1rm视频文件了

Visual Basic 语言参考

Shell 函数

运行一个可执行程序,并且如果该程序仍然在运行,则返回一个包含该程序的进程 ID 的整数。

Public Function Shell( _

ByVal Pathname As String, _

Optional ByVal Style As AppWinStyle = AppWinStyleMinimizedFocus, _

Optional ByVal Wait As Boolean = False, _

Optional ByVal Timeout As Integer = -1 _

) As Integer

参数

Pathname

必选项。字符串。要执行的程序名以及任何需要的参数和命令行开关。Pathname 还可以包括驱动器和目录路径或文件夹。

Style

可选项。AppWinStyle。从 AppWinStyle 枚举中选择的值,该枚举与要在其中运行程序的窗口样式相对应。如果省略 Style,则 Shell 使用 AppWinStyleMinimizedFocus,这将使程序以最小化启动并具有焦点。

Style 参数可以有以下设置之一:

枚举值 说明

AppWinStyleHide 隐藏窗口并为隐藏的窗口提供焦点。

AppWinStyleNormalFocus 为窗口提供焦点,并以最近的大小和位置显示窗口。

AppWinStyleMinimizedFocus 为窗口提供焦点,并以图标的形式显示窗口。

AppWinStyleMaximizedFocus 为窗口提供焦点,并以全屏方式显示窗口。

AppWinStyleNormalNoFocus 将窗口设置为最近的大小和位置。当前活动窗口保持焦点。

AppWinStyleMinimizedNoFocus 以图标的形式显示窗口。当前活动窗口保持焦点。

Wait

可选项。Boolean。指示 Shell 函数是否应等待程序完成的值。如果省略 Wait,则 Shell 使用 False。

Timeout

可选项。Integer。Wait 为 True 时等待完成的毫秒数。如果省略 Timeout,则 Shell 使用 -1,表示没有超时,Shell 直到程序完成时才返回。因此,如果省略 Timeout 或将它设置为 -1,则 Shell 可能永远不会将控制返回给程序。

异常/错误

异常类型 错误号 条件

ArgumentException 5 Style 不在 0 到 9(包含 0 和 9)范围内。

FileNotFoundException 53 Shell 无法启动指定的程序。

备注

Shell 函数的返回值取决于 Pathname 中指定的程序在 Shell 返回时是否仍在执行。如果将 Wait 设置为 True 并且程序在超时过期前结束,Shell 返回零。如果超时过期或者省略 Wait 或将它设置为 False,则 Shell 返回程序的进程 ID。进程 ID 是标识正在运行的程序的唯一数字。

如果 Shell 函数无法启动指定的程序,则出现 SystemIOFileNotFoundException 错误。例如,当试图从使用 SystemWindowsForms 的应用程序运行 16 位程序(如 commandcom)时,可能会发生这种情况。解决办法是运行将调用所需的 16 位程序的 32 位程序。如果是 commandcom,则可以将运行 cmdexe 作为另一种选择。

默认情况下,Shell 函数异步运行程序。这意味着用 Shell 函数启动的程序在 Shell 函数后面的语句执行前可能没有结束执行。如果想等待程序结束后再继续,请将 Wait 设置为 True。

整个路径和文件规范应该始终用引号引起来,如以下示例所示:

ID = Shell("""C:\Program Files\MyFileexe"" -a -q", , True, 100000)

字符串内每对相邻的双引号 ("") 被解释为字符串中的一个双引号字符。因此,前面的示例表示 Shell 函数的下列字符串:

"C:\Program Files\MyFileexe" -a -q

如果路径没有用引号引起来,Windows 就会在 C:\ 目录中查找名为 Programexe 的文件,而不是在 C:\Program Files 目录中查找 MyFileexe 文件。

安全说明 如果路径和文件规范没有用引号引起来,那么当文件名或路径节点包含空格时,就会出现安全风险。在上面的示例中,路径节点 \Program Files 包含一个空格。如果规范不在引号中,并且名为 Programexe 的程序(例如通过非法的破坏)安装在 C:\ 中,Windows 就会执行 Programexe 程序而不是 MyFileexe。

安全说明 Shell 函数需要非托管代码权限,这可能会对它在部分信任情况下的执行产生影响。有关更多信息,请参见 SecurityPermission 类和代码访问权限。

示例

本示例使用 Shell 函数运行一个用户指定的应用程序。通过将 AppWinStyleNormalFocus 指定为第二个参数,以正常大小打开应用程序并为它提供焦点。

Dim ProcID As Integer

' Run Calculator

ProcID = Shell("C:\Windows\system32\calcexe", AppWinStyleNormalFocus)

' The preceding path is for Windows XP;

' The Windows 2000 path is C:\WINNT\system32\calcexe

    Const SYNCHRONIZE = &H100000

    Const INFINITE = &HFFFF

    Private Declare Function OpenProcess Lib "kernel32" (ByVal 

dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId

 As Long) As Long

    Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

    

    Sub RunExe(strCmd as string)

        Dim lProcessID As Long

        Dim lHandleID As Long

        Dim lReturVal As Long

        

        lProcessID = Shell(strCmd , vbNormalFocus)

        If lProcessID <> 0 Then

            lHandleID = OpenProcess(SYNCHRONIZE, 0, lProcessID)

            If lHandleID <> 0 Then

                lReturVal = WaitForSingleObject(lHandleID, INFINITE)

                CloseHandle(lHandleID)

            End If

        End If

    End Sub

调用这个函数即可,参数为一次执行的完整命令行

函数的功能是执行命令行,并等待其运行完毕

RunExe "C:\Procomm Plus\PROGRAMS\PW5exe C:\Procomm Plus\Aspect\Scripts_Temp\1was"

RunExe "C:\Procomm Plus\PROGRAMS\PW5exe C:\Procomm Plus\Aspect\Scripts_Temp\2was"

简单情况:

'shell "程序全路径 参数"

示例:

Shell "C:\123\456exe -789"

复杂情况:

可以使用ShellExecute这个API函数:

ShellExecute(

HWND hwnd, //父窗口句柄

LPCSTR lpOperation, // *** 作类型

LPCSTR lpFile, //要进行 *** 作的文件或路径

LPCSTR lpParameters, //当lpOperation为“explore”时指定要传递的参数,通常设为NULL

LPCSTR lpDirectory, //指定默认目录,通常设为NULL

INT nShowCmd //文件打开的方式,以通常方式还是最大化或最小化显示

)

用法:

新建一个窗口,放入一个command按钮,复制下面代码到代码窗口中,其中:F:\游戏\Cs16中文版\cstrikeexe为游戏路径。后边的那个为参数 -console 。

Private Declare Function ShellExecute Lib "shell32dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Sub Command1_Click()

ShellExecute Mehwnd, "open", "F:\游戏\Cs16中文版\cstrikeexe", "-console", "", 1

End Sub

要声明一个DLL过程,首先需要在代码窗口的"通用(General)"部分增加一个Declare语句。如果该过程返回一个值,应将其声明为

Function:

Declare Function publicname Lib "libname" [Alias "alias"] [([[ByVal] variable [As type] [,[ByVal] variable [As type]]])] As Type

如果过程没有返回值,可将其声明为Sub:

Declare Sub publicname Lib "libname" [Alias "alias"] [([[ByVal] variable [As type] [,[ByVal] variable [As type]]])]

缺省情况下,在标准模块中声明的DLL过程,可以在应用程序的任何地方调用它。在其它类型的模块中定义的DLL过程则是模块私有的,必须在它们前面声明Private关键字,以示区分。下面分别介绍声明语句的各个组成部分。

(一)、指定动态库:

Declare语句中的Lib子句用来告诉Visual Basic如何找到包含过程的dll文件。 如果引用的过程属于Windows核心库(User32、Kernel32或GDI32),则可以不包含文件扩展名,如:

Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount" () As Long

对于其它动态连接库,可以在Lib子句指定文件的路径:

Declare Function lzCopy Lib "c:/windows/lzexpanddll" _

(ByVal S As Integer, ByVal D As Integer) As Long

如果未指定libname的路径,Visual Basic将按照下列顺序查找该文件:

①exe文件所在的目录

②当前目录

③Windows系统目录

④Windows目录

⑤Path环境变量中的目录

下表中列出了常用的 *** 作系统环境库文件。

动态链接库描述

Advapi32dll高级API服务,支持大量的API(其中包括许多安全与注册方面的调用)

Comdlg32dll通用对话框API库

Gdi32dll图形设备接口API库

Kernel32dllWindows32位核心的API支持

Lz32dll32位压缩例程

Mprdll多接口路由器库

Netapi32dll32位网络API库

Shell32dll32位ShellAPI库

User32dll用户接口例程库

Versiondll版本库

WinmmdllWindows多媒体库

Winspooldrv后台打印接口,包含后台打印API调用。

对于Windows的系统API函数,可以利用VB提供的工具API Viewer查找某一函数及其相 关数据结构和常数的声明,并复制到自己的程序中。

以上就是关于在VB中怎样打开外部程序全部的内容,包括:在VB中怎样打开外部程序、如何在VB中怎样运行外部程序、VB列队调用外部程序运行文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9979042.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存