我要多次利用vb调用同一个外部程序,并使二者能够交互操作!但是每次调用时都要重新启动,也就是说每次调用都会出现一个新的tecplot窗口!我想能不能在启动起来之后,再用的时候就不用重新启动了,从而节省内存和缩短运行时间啊!
我已经利用: shell("c:\",vbHide)做到隐藏窗口了,
但是因为每次调用的tecplot软件时都有加载封面的一个过程(比如你启动vb.exe时要等待vb界面出现之前有一个与版本相关的软件封面) 这个封面是不能消除的.
因此,本人希望在vb下启动后,在以后的调用过程中就不用再次启动了.也就是说:vb和tecplot的交互操作中,只需要启动一次便始终可用,直至结束程序.
请各位高手多多帮忙啊!小妹不胜感激阿!
shell("c:\",vbHide) 在隐藏状态,当使用的时候使用
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
来显示外部程序界面,然后再做你的事情
使用调用外部程序函数实现API函数高级功能
作者:曹首光
摘要 本文以Visual Basic 为例,介绍了在使用调用外部程序的办法实现以下五种功能的方法:1)关机和重新启动;2)使用缺省(默认)的程序打开文件或链接; 3)调用"资源管理器"; 4)复制和移动文件夹;5)把DOS程序的屏幕显示信息写入文件。
关键词 Visual Basic, Shell 函数,外部程序
调用调用API 函数可直接使用Windows 底层资源,因此功能强大。然而API函数使用较复杂,易出错。本文将以Visual Basic 6.0中的shell 函数为例,详细说明调用外部程序实现一些windows 高级功能的方法。
一、关机和重新启动Windows
在"开始-运行"对话框或DOS窗口中输入 ,exitwindowsexec命令,Windows 就会重新启动;输入 ,exitwindows,机器关闭。
所以您在Visual Basic 中使用下面两个命令来实现重起和关机:
Shell " ,exitwindowsexec", vbHide 注释:重新启动
Shell " ,exitwindows", vbHide 注释:关闭
二、使用缺省(默认)的程序打开文件或链接
在Windows的Command子目录中有一个, 在这个命令后加上一个文件名参数,该文件即可用缺省程序打开。所以在Visual Basic 中可使用下面的代码:
Dim FiletoOpen$
FiletoOpen= "system.ini"
Shell " " & FiletoOpen, vbHide
注意:1)如果变量FiletoOpen的值为包含长文件名的字符串,以上第三行应为
Shell " " & Chr(34) & FiletoOpen & Chr(34) 注释: Chr(34) 为双引号。
这是因为当参数中的长文件名含有空格时,程序会认为空格以前的部分子符串为一个参数,所
以会产生不到文件的错误。例如要用 打开"C:my documentsmydoc.doc" 时,如果在 "运行"对话框中输入 c:my documentsmydoc.doc, 系统寻的文件是 c:my 和 documentsmydoc.doc两个文件,所以会出错。正确的命令应当是 "c:my documentsmydoc.doc"
2)在上面第三行中, 后别忘了留空格。
另外程序员也常常希望用户能点击软件上的链接而直接打开自己的主页或给自己写信。用下面的方法可以不另外添加控件而实现这种功能。
Dim url$,email$
url="nwdonkey.uhome"
email="mailto:nwdonkey@371"
shell " " & url, vbHide
shell " " & email, vbHide
三、调用"资源管理器"
用下面的命令可调用Windows资源管理器,并打开指定的文件夹:
Dim PathtoOpen$
PathtoOpen = "c:my documents"
Shell " " & PathtoOpen, vbNormalFocus
四、复制和移动文件夹
是不是很怀念强大的DOS命令?其实所有的DOS外部命令所能实现的功能,您都能在VB中通过Shell函数来实现。比如您要把一个子目录的包含下一级目录的所有文件复制到另一个位置,可使用下面的代码:
If Dir$("c:mydos", vbDirectory) = "" Then MkDir "c:mydos" 注释:在硬盘上新建一个c:mydos的文件夹。
Shell " c:windowscommand*.* c:mydos/s/e", vbHide
Shell " " & "c:mydos", vbNormalFocus
同样我们也以用shell 来调用来实现来实现文件或文件夹的移动。
说明:此方法仅限于外部DOS命令,并需要把参数中的长文件名转换为8.3制文件名,转换似乎可以用API函数实现,我们自己编写了不调用API函数实现这一功能的函数,您如果需要请到go.163/
~nwdonkey/vb/ 去下载。
Contributor: NorthWest Donkey
五、把DOS程序的屏幕显示信息写入文件
Shell函数不支持DOS内部命令,要想在VB 中使用DOS内部命令,就得使用迂回的办法:先把DOS命令写到一个BAT文件中,然后再用Shell函数调用该BAT文件。如果您是编写DOS批处理的高手,则完全可以先编写好BAT文件,然后再用Shell 函数来调用。另外,大家还记得DOS命令中的管道命令符吧? 例如〈和〉号可以把一个文件的内容传递到另一个程序中去,也可把DOS应用程序的屏幕输出写到一个文件中去。例如用下列代码可把DOS命令copy的帮助信息写到一个文件中去。
Open "c: est.bat" For Output As #1 注释:建立批处理文件
Print #1, "copy/?>"
Print #1, "@exit"
Close #1
Shell "c: est.bat", vbHide
Shell " ", vbHide
注意:注释:test.bat 中最后一句必须是@exit,不然经Shell调用后的批处理文件无法从内存中退出。
这种方法可以把dos 程序中显示在屏幕上的信息写入一个文件,因此对编写一些dos应用程序的wind
ows 版本特别有用。
以上以Visual Basic 为例,讲述了巧用Shell函数实现一些一般不容易实现的功能的方法。一般情况下,其他编程语言也都提供了类似的函数接口,在这些编程环境下也可以轻易实现上述功能。对本文,您如有什么问题请寄信到 nwdonkey@371 或到我的主页nwdonkey.uhome/ 上留言。
河南省洛阳市解放军外国语学院第三系 曹首光
批处理文件注释我用Matlab已经制作好了exe文件
请问如何用vb调用它
简单一些就行:一个窗口和一个按钮调用一个exe文件
我刚刚接触vb,请把步骤介绍一下
谢谢 函数:Call Shell(PathName,WindowStyle)
或 a = Shell(PathName,WindowStyle) ,不需要声明.
注解:PathName 可以是程序路径(如相对路径 App.path +"\...\*.exe")、Windows 内置代号(如控制面板选项:Appwiz.cpl 即为添加删除程序,不过要结合 RunDLL32);WindowStyle 是窗口初始样式,如最大化、最小化等。
示例:
Private Sub Command1_Click()
Call Shell("c:\", vbNormalFocus)
End Sub
假如exe文件在c:\ 中. C:\
一个窗口和一个按钮 command1
Private Sub Command1_Click()
Shell "C:\"
End Sub
一个名为aa.exe的文件,在dos下需要加参数才能运行,如下:c:\aa.exe 参数a 参数b 。现在想用VB实现对aa.exe的调用,并且要把参数a和参数b也加进去应该怎样实现?请各位大虾指教!谢谢! 有三种方法 :)
ShellExecute函数
WinExec函数
Shell函数
1.ShellExecute
VB声明
Declare Function ShellExecute Lib "shell32.dll" 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
说明
查与指定文件关联在一起的程序的文件名
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
[参数表]
参数 类型及说明
hwnd Long,指定一个窗口的句柄,有时候,windows程序有必要在创建自己的主窗口前显示一个消
息框
lpOperation String,指定字串“open”来打开lpFlie文档,或指定“Print”来打印它
lpFile String,想用关联程序打印或打开一个程序名或文件名
lpParameters String,如lpszFlie是可执行文件,则这个字串包含传递给执行程序的参数
lpDirectory String,想使用的完整路径
nShowCmd Long,定义了如何显示启动程序的常数值。参考ShowWindow函数的nCmdShow参数
2.WinExec
VB声明
Declare Function WinExec Lib "kernel32" Alias "WinExec" (ByVal lpC
mdLine As String, ByVal nCmdShow As Long) As Long
说明
运行指定的程序
返回值
Long,大于32表示成功,请参考FindExecutable函数
[参数表]
参数 类型及说明
lpCmdLine String,包含要执行的命令行
nCmdShow Long,定义了以怎样的形式启动程序的常数值。参考ShowWindow函数的nCmdShow参数
注解
请参考对CreateProcess函数的说明,了解在目录中查指定文件的顺序
3.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 函数不能打开命名的程序,则会产生错误。
注意 缺省情况下,Shell 函数是以异步方式来执行其它程序的。也就是说,用 Shell 启动的程序可能还没有完成执行过程,就已经执行到 Shell 函数之后的语句。
就是:Shell "c:\aa.exe 参数a 参数b"
MSDN:
Shell 函数
执行一个可执行文件,返回一个 Variant (Double),如果成功的话,代表这个程序的任务 ID,若不成功,则会返回 0。
语法
Shell(pathname[,windowstyle])
Shell 函数的语法含有下面这些命名参数:
部分 描述
pathname 必要参数。Varia
nt (String),要执行的程序名,以及任何必需的参数或命令行变量,可能还包括目录或文件夹,以及驱动器。
Windowstyle 可选参数。Variant (Integer),表示在程序运行时窗口的样式。如果 windowstyle 省略,
则程序是以具有焦点的最小化窗口来执行的。
windowstyle 命名参数有以下这些值:
常量 值 描述
vbHide 0 窗口被隐藏,且焦点会移到隐式窗口。
VbNormalFocus 1 窗口具有焦点,且会还原到它原来的大小和位置。
VbMinimizedFocus 2 窗口会以一个具有焦点的图标来显示。
VbMaximizedFocus 3 窗口是一个具有焦点的最大化窗口。
VbNormalNoFocus 4 窗口会被还原到最近使用的大小和位置,而当前活动的窗口仍然保持活动。
VbMinimizedNoFocus 6 窗口会以一个图标来显示。而当前活动的的窗口仍然保持活动。
说明
如果 Shell 函数成功地执行了所要执行的文件,则它会返回程序的任务 ID。任务 ID 是一个唯一的数值,用来指明正在运行的程序。如果 Shell 函数不能打开命名的程序,则会产生错误。
注意 缺省情况下,Shell 函数是以异步方式来执行其它程序的。也就是说,用 Shell 启动的程序可能还没有完成执行过程,就已经执行到 Shell 函数之后的语句。
Private Sub Command1_Click()
Dim i
i = Shell("d:\2.bat", 1) 'i = Shell("D:\WINNT\", 1)
If i <> 0 Then MsgBox "你成功了"
End Sub
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论