如何在VB中怎样运行外部程序

如何在VB中怎样运行外部程序,第1张

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

我能告诉你强制关闭程序的代码

来一个timer1,时间是1000毫秒

’代码如下

Dim procname$, rtn&, strcomputer$

Private Sub Timer1_Timer()

procname = InputBox("输入所要关闭的文件名", "请输入")

strcomputer = ""

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strcomputer & "\root\cimv2")

Set colProcessList = objWMIServiceExecQuery("Select from Win32_Process Where Name = '" & procname & "'")

If colProcessListCount = 0 Then

MsgBox procname & " 没有运行,请看清楚后再输入"

End

Else

For Each objProcess In colProcessList

rtn = MsgBox("您确定要终止 " & procname & " 吗?", vbYesNo, "强制关闭进程")

If rtn = 6 Then

objProcessTerminate

Else

End If

Next

End If

End Sub

Shell 函数

执行一个可执行文件,返回一个 Variant (Double),如果成功的话,代表这个程序的任务 ID,若不成功,则会返回 0。

语法

Shell(pathname[,windowstyle])

Shell 函数的语法含有下面这些命名参数:

pathname 必要参数。Variant (String),要执行的程序名,以及任何必需的参数或命令行变量,可能还包括目录或文件夹,以及驱动器。

Windowstyle 可选参数。Variant (Integer),表示在程序运行时窗口的样式。如果 windowstyle 省略,则程序是以具有焦点的最小化窗口来执行的。

windowstyle 命名参数有以下这些值:

常量 值 描述

vbHide 0 窗口被隐藏,且焦点会移到隐式窗口。

VbNormalFocus 1 窗口具有焦点,且会还原到它原来的大小和位置。

VbMinimizedFocus 2 窗口会以一个具有焦点的图标来显示。

VbMaximizedFocus 3 窗口是一个具有焦点的最大化窗口。

VbNormalNoFocus 4 窗口会被还原到最近使用的大小和位置,而当前活动的窗口仍然保持活动。

VbMinimizedNoFocus 6 窗口会以一个图标来显示。而当前活动的的窗口仍然保持活动。

如果 Shell 函数成功地执行了所要执行的文件,则它会返回程序的任务 ID。任务 ID 是一个唯一的数值,用来指明正在运行的程序。如果 Shell 函数不能打开命名的程序,则会产生错误

Private Sub Command1_Click()

Dim fuzhi

fuzhi = Shell("C:\qqEXE,1")

End Sub

上面语句中QQEXE的路径请改成正确路径

以下请参考如下MSDN说明:

Shell 函数

执行一个可执行文件,返回一个 Variant (Double),如果成功的话,代表这个程序的任务 ID,若不成功,则会返回 0。

语法

Shell(pathname[,windowstyle])

Shell 函数的语法含有下面这些命名参数:

部分 描述

pathname 必要参数。Variant (String),要执行的程序名,以及任何必需的参数或命令行变量,可能还包括目录或文件夹,以及驱动器。

Windowstyle 可选参数。Variant (Integer),表示在程序运行时窗口的样式。如果 windowstyle 省略,则程序是以具有焦点的最小化窗口来执行的。

windowstyle 命名参数有以下这些值:

常量 值 描述

vbHide 0 窗口被隐藏,且焦点会移到隐式窗口。

VbNormalFocus 1 窗口具有焦点,且会还原到它原来的大小和位置。

VbMinimizedFocus 2 窗口会以一个具有焦点的图标来显示。

VbMaximizedFocus 3 窗口是一个具有焦点的最大化窗口。

VbNormalNoFocus 4 窗口会被还原到最近使用的大小和位置,而当前活动的窗口仍然保持活动。

VbMinimizedNoFocus 6 窗口会以一个图标来显示。而当前活动的的窗口仍然保持活动。

说明

如果 Shell 函数成功地执行了所要执行的文件,则它会返回程序的任务 ID。任务 ID 是一个唯一的数值,用来指明正在运行的程序。如果 Shell 函数不能打开命名的程序,则会产生错误

UINT WinExec:

WinExec("C:\\Windows\\Notepadexe",SW_SHOW);

WinExec("C:\\Windows\\Notepadexe C:\\aatxt",SW_SHOW);

WinExec("C:\\\\IExplorerexe >

说不行的,太笨了。其实完全可以做得到,就是你再写个form2,在原来需要d出msgbox的地方,改为 form2show,然后在form2里设置2个按钮,分别是“确定”与“取消”,同样可以实现使用msgbox的功能。这样,就可以现实你的目的, 可以让msgbox d出时,下面的命令可以继续执行?并且不需要 Timer控件。(可以增加的“倒计时自动消失对话窗”的高级功能:在form2里放个定时器,设置倒计时,如果用户没有理会d出来的form2窗口,时间到了,form2可以自动消失。)

以下是代码:

Private Sub Form_load()

form2show

XXXX

END Sub

其中,XXXX以及后面的代码就是你原来希望的,d出消息框之后可以继续执行的代码(程序并未挂起,仍在执行)。

Form2 的代码:

在Form2中,“确定”按钮的名称为Command_sub1,“取消”按钮的名称为Command_sub2,以区别于Form1中的按钮。

Dim TimeLeft As Integer

Private Sub Form_load()

TimeLeft = 10

Timer1Interval = 1000

Timer1Enabled = True

Label_sub2Caption = "若未决定,将在" & Str$(TimeLeft) & " 秒后继续。"

End Sub

Private Sub Timer1_Timer()

TimeLeft = TimeLeft - 1

Label_sub2Caption = "若未决定,将在" & Str$(TimeLeft) & " 秒后继续。"

If TimeLeft = 0 Then

Timer1Enabled = False

DoEvents

Call Command_sub1_Click

End If

End Sub

Private Sub Command_sub1_Click()

'此段是"确定"按钮要执行的

Unload Form2

Set Form2 = Nothing

End Sub

Private Sub Command_sub2_Click()

'此段是"取消"按钮代码

Unload Form2

Set Form2 = Nothing

End Sub

你好!

VB编程软件对应用程序只能用以

二进制

方式打开EXE文件,并经处理,所见到的是如DOS下的DEBUG命令打开后看到的以16进制显示相同

VB编程软件能打开

源代码

组成的文件你可先运行VB6EXE文件,然后在

新建窗口

或文件

菜单栏

新建或打开工程文件,在其

代码

窗口修改代码或在对象窗口修改或增删

控件

VB中用Shell

函数可执行一个

可执行文件

例:

Dim

RetVal

RetVal

=

Shell("C:\Program

Files\Tencent\qq2007\qqexe",

1)

详细查看了你的问题,完全不需要使用线程sleep的方法。

在这边,我要给你引入一个概念。就是Form窗体的两个方法。

FormShow()和FormShowDialog()

第一个Show方法运行后,你的主程序还是会进行,你的代码还是会继续进行下去。此时,窗体还是d出的。

第二个ShowDialog方法运行后,此时,d出的一个窗体,你不将其关闭,那么,主程序就会一直等待这个窗体关闭后,才执行后面的代码。

所以,你只需要使用showdialog这个方法,即可达到你想要的结果。

那么,如何才能让d出的窗体不改变呢?很简单

你可以找到窗体的formcloseing事件,在这个事件中,有一个参数:e

这个e有一个属性,就是ehandle,表示是否处理过这个事件了。

这个时候,如果你不想让窗体关闭,你可以写:

ehandle=true,那么表示已经处理过窗体关闭的事件了。

注:有些情况,可能是:ecancel=true

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

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

原文地址:https://54852.com/zz/10167693.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存