要声明一个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查找某一函数及其相 关数据结构和常数的声明,并复制到自己的程序中。
使用shell语句,例子:
Sub RAR()Shell "C:\Program Files\WinRAR\WinRARexe", vbNormalFocus
End Sub
用VB的内部函数
SHELL
用法
:SHELL
(
"文件路径<注意:必须是EXE文件,当然要有完整的文件名>",参数<该参数主要是设置初始化状态>)
如果想打开其他文件(不是EXE文件)的话就要用到API函数SHELLEX
例如打开计算器:(计算器这个程序本身在C:\WINDOWS\SYSTEM32\文件夹下
所以可以不用输入完整的路径及文件名
只需要用CALC就行了)
shell
"calc"(参数可以省略)
再例如打开D盘DOWNLOAD文件夹下的VBEXE则用
SHELL
"D:\DOWNLOAD\VBEXE"
在SHELL
函数的文件名后加空格那么后面的字串则为命令行参数,假如D盘下的VB6EXE就是VB的主程序
,而在C盘有一个文件名为"工程1VBP"那么使用
SHELL
"D:\VB6EXE
C:\工程1VBP"则在VB6EXE启动的时候他自动加载"工程1VBP"文件
命令按钮为command1,
bat文件
为c:\tempbat,这些都改成你程序里的名字和位置就行了,通过shell可以直接调用bat,代码如下
Private
Sub
Command1_Click()
Shell
"c:\tempbat",
vbNormalFocus
End
Sub
有问题消息我
shell不行!
首先你要用搞好路径,如果是和你的程序在同一个程序包内的,要用相对路径,即AppPath 。比如你要打开VB所在路径的abcdoc。那么你可以这样:
Dim xx As String
xx = AppPath & "\" & "abcdoc"
i = ShellExecute(hwnd, "open", xx, vbNullString, vbNullString, 1)
只要在某个事件中加入这个就可以了。
如果不是同一个程序包内,要知道它的路径,用绝对路径。比如C盘的某的文件abcexe
把上面的xx=改为:
xx="c:\abcexe"
就可以了!
提示一下,上面用了API函数。这里不能直接用shell函数,因为shell函数只能直接打开com等等这样的。对于doc等等这样的如果要用shell函数必须要告诉它的关联文件的路径,而对不同的计算机,关联文件的安装是不同的,所以不好实现。而API函数ShellExecute则会自动找到关联文件,并打开。
Shell "notepadexe c:\1txt", vbNormalFocus
或
i=Shell( "notepadexe c:\1txt", vbNormalFocus)得到返回值
'SHELL外部程序:
Shell "1exe"
form1hiden
lngHand=GetForegroundWindow() '获得1EXE的窗口句柄
'十秒钟后:
form1show
form1hide
Call ShowWindow(ByVal lngHand, SW_SHOWNORMAL) '将1EXE窗口还原显示
Call SetForegroundWindow(ByVal lngHand) '设置焦点
这里用到了GetForegroundWindow,ShowWindow,SetForegroundWindow三个API函数以及一个常量SW_SHOWNORMAL,我想你应该知道怎么调用吧。
Public Declare Function GetForegroundWindow Lib "user32" Alias "GetForegroundWindow" () As Long
Public Declare Function ShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Public Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Long) As Long
Public Const SW_SHOWNORMAL = 1
以上就是关于如何让VB调用外部的DLL全部的内容,包括:如何让VB调用外部的DLL、如何在excel中使用VBA调用其它外部程序、如何在VB中调用“计算器”“运行”和其他应用程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)