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"
要声明一个DLL过程,首先需要在代码窗口的"通用(General)"部分增加一个Declare语句。如果该过程返回一个值,应将其声明为\x0d\Function:\x0d\DeclareFunctionpublicnameLib"libname"[Alias"alias"][([[ByVal]variable[Astype][,[ByVal]variable[Astype]]])]AsType\x0d\如果过程没有返回值,可将其声明为Sub:\x0d\DeclareSubpublicnameLib"libname"[Alias"alias"][([[ByVal]variable[Astype][,[ByVal]variable[Astype]]])]\x0d\缺省情况下,在标准模块中声明的DLL过程,可以在应用程序的任何地方调用它。在其它类型的模块中定义的DLL过程则是模块私有的,必须在它们前面声明Private关键字,以示区分。下面分别介绍声明语句的各个组成部分。\x0d\(一)、指定动态库:\x0d\Declare语句中的Lib子句用来告诉VisualBasic如何找到包含过程的dll文件。如果引用的过程属于Windows核心库(User32、Kernel32或GDI32),则可以不包含文件扩展名,如:\x0d\DeclareFunctionGetTickCountLib"kernel32"Alias"GetTickCount"()AsLong\x0d\对于其它动态连接库,可以在Lib子句指定文件的路径:\x0d\DeclareFunctionlzCopyLib"c:/windows/lzexpanddll"_\x0d\(ByValSAsInteger,ByValDAsInteger)AsLong\x0d\如果未指定libname的路径,VisualBasic将按照下列顺序查找该文件:\x0d\①exe文件所在的目录\x0d\②当前目录\x0d\③Windows系统目录\x0d\④Windows目录\x0d\⑤Path环境变量中的目录\x0d\下表中列出了常用的 *** 作系统环境库文件。\x0d\动态链接库描述\x0d\Advapi32dll高级API服务,支持大量的API(其中包括许多安全与注册方面的调用)\x0d\Comdlg32dll通用对话框API库\x0d\Gdi32dll图形设备接口API库\x0d\Kernel32dllWindows32位核心的API支持\x0d\Lz32dll32位压缩例程\x0d\Mprdll多接口路由器库\x0d\Netapi32dll32位网络API库\x0d\Shell32dll32位ShellAPI库\x0d\User32dll用户接口例程库\x0d\Versiondll版本库\x0d\WinmmdllWindows多媒体库\x0d\Winspooldrv后台打印接口,包含后台打印API调用。\x0d\对于Windows的系统API函数,可以利用VB提供的工具APIViewer查找某一函数及其相关数据结构和常数的声明,并复制到自己的程序中。
就用shell函数 足够了
shell "cmdexe",vbhide
如果不加vbhide的ua会闪过一个黑屏 不爽
如果要执行cmd命令 shell "cmd /c net user>c:\1txt",vbhide
执行了net user命令 回显输出到了c:\1txt里
private function checkexeisrun(byval exename as string) as boolean
dim ps
'枚举进程
For Each ps In GetObject("winmgmts:\\\root\cimv2:win32_process")instances_
'循环进程
If ucase(psname) = ucase(exename) then
checkexeisrunning = True
exit function
end If
next
end function
private sub command1_click()
shell "Aexe" '调用Aexe
timer1enabled=true '启动计时器
end sub
private sub timer1_timer()
if checkexeisrun("aexe")=false then '"aexe"就是程序名
'你要执行的命令
end if
end sub
'计时器interval属性越小响应时间就越快,但不要调太小,否则可能会无响应。
以上就是关于VB列队调用外部程序运行文件全部的内容,包括:VB列队调用外部程序运行文件、如何让VB调用外部的DLL、VB中如何调用外部程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)