111、您认识
VB 的扩展名吗? 112、完全模拟【开始】中的【运行...】功能 113、模拟【网路上的芳邻】及【我的电脑】中的【连线
/ 中断网路磁盘】 114、自制 Round
函数 (取小数点几位) 115、如何找出
Windows 目录的正确路径?
111、您认识 VB 的扩展名吗?
我不知道您已经使用 VB 多久时间了,但是今天当您面对一堆乱七八糟的文件时,您能由扩展名来判断那一个文件是属於 VB
的文件吗?恐怕不是每一个人都可以?
您知道以下这些扩展名都是 VB 指定给【设计阶段文件】的扩展名吗?
扩展名 |
用於 |
VB6 |
VB5 |
VB4-32 |
VB4-16 |
VB3 |
.bas |
Basic 模组 |
* |
* |
* |
* |
* |
.cls |
物件类别模组 |
* |
* |
* |
* |
|
.ctl |
使用者控制项文件 |
* |
* |
|
|
|
.ctx |
使用者控制项二进位文件 |
* |
* |
|
|
|
.dca |
现用设计师快取文件 |
* |
* |
|
|
|
.dep |
安装精灵附属文件 |
* |
* |
|
|
|
.dob |
使用者文件表单 |
* |
* |
|
|
|
.dox |
使用者文件二进位表单文件 |
* |
* |
|
|
|
.dsr |
现用设计师文件 |
* |
* |
|
|
|
.dsx |
现用设计师二进位文件 |
* |
* |
|
|
|
.frm |
表单文件 |
* |
* |
* |
* |
* |
.frx |
二进位表单文件 |
* |
* |
* |
* |
* |
.log |
载入错误的记录档 |
* |
* |
* |
* |
* |
.oca |
控制项 Typelib 文件 |
* |
* |
* |
* |
|
.pag |
属性页文件 |
* |
* |
|
|
|
.pgx |
二进位属性页文件 |
* |
* |
|
|
|
.res |
资源档 |
* |
* |
* |
* |
|
.swt |
Visual Basic
安装精灵范本文件 |
* |
* |
|
|
|
.tlb |
Remote Automation Typelib
文件 |
* |
* |
|
|
|
.vbg |
Visual Basic 群组专案 |
* |
* |
|
|
|
.vbl |
使用者控制项授权文件 |
* |
* |
|
|
|
.vbp |
Visual Basic 专案 |
* |
* |
* |
* |
|
.vbr |
Remote Automation
注册文件 |
* |
* |
* |
* |
|
.vbw |
Visual Basic 专案工作区 |
* |
* |
|
|
|
.vbz |
精灵启动文件 |
* |
* |
* |
* |
* |
.wct |
Webclass 范本文件 |
* |
|
|
|
|
.ocx |
控制项文件 |
* |
* |
* |
* |
|
.vbx |
控制项文件 |
|
|
|
* |
* |
.mak |
Visual Basic 专案 |
* |
* |
* |
* |
* |
112、完全模拟【开始】中的【运行...】功能
请您现在按下【开始】中的【运行...】,看看【运行...】问话框中的说明,是不是如下:
请输入程序、资料夹、文件或 Internet 资源的名称,Windows 会自动开启。
如果说您我也可以做到这种功能,只要是可开启的、可执行的,通通可以做到,您相信吗?不要怀疑!不但可以做到,而且更让您惊讶的,是程序竟然这么短,只要一行就可以了!
您一定认为要用 API,喔!不是!先别乱猜,这次不用声明 API!直接来看一个例子:
在 Form 中放一个 TextBox,名称为 Text1
Private Sub Command1_Click() Call Shell("rundll32.exe
url.dll,FileProtocolHandler " & Text1, 1) End Sub
而其中的 Text1 可以输入程序、资料夹、文件或 Internet 资源的名称,也可以输入快捷方式 (shortcut
file),都可以正确执行!
113、模拟【网路上的芳邻】及【我的电脑】中的【连线 / 中断网路磁盘】
在【网路上的芳邻】及【我的电脑】中都有提供【连线网路磁盘】及【中断网路磁盘】的功能,在 VB 的程序中我们一样可以轻易做到。
'请在声明区中加入以下声明及模组:
Declare Function WNetAddConnection Lib "mpr.dll" Alias
"WNetAddConnectionA" (ByVal lpszNetPath As String, ByVal lpszPassword As
String, ByVal lpszLocalName As String) As Long
Declare Function WNetCancelConnection Lib "mpr.dll" Alias
"WNetCancelConnectionA" _ (ByVal lpszName As String, ByVal bForce As
Long) As Long
Function AddConnection(MyShareName As String, MyPWD As String,
UseLetter As String) As Integer On Local Error GoTo
AddConnection1_Err AddConnection = WNetAddConnection(MyShareName,
MyPWD, UseLetter)
AddConnection_End: Exit Function
AddConnection1_Err: AddConnection = Err MsgBox Error$ Resume
AddConnection_End End Function
Function CancelConnection(DriveLetter As String, Force As Integer)
As Integer On Local Error GoTo CancelConnection_Err CancelConnection
= WNetCancelConnection(DriveLetter,
Force)
CancelConnection_End: Exit Function
CancelConnection_Err: CancelConnection = Err MsgBox
Error$ Resume CancelConnection_End End Function
呼叫的方法如下:
连线网路磁盘:传回值 = AddConnection(<共享的路径>, <密码>, <磁盘代号>)
中断网路磁盘:传回值 = CancelConnection(<磁盘代号>, <强迫中断?>)
呼叫实例:
连线网路磁盘:X = AddConnection("\\IO\io_c", "", "H:")
中断网路磁盘:X = CancelConnection("H:", True)
注:这个范例实际执行,连线时,NT 及 Novell 之速度相若,但是,在中断时,Novell 之速度明显较慢!
注:以上的方式乃是由程序中直接指定,另外的一个方法是显示问话框由使用者自行设定,这个方法我们在以后将再说明!
114、自制 Round 函数 (取小数点几位)
这一个问题,有网友反应在某些情形下,会造成误差 ( 连 VB6.0 提供的 Round 函数都会造成误差
),我针对多种情形实际测试,结果很令人惊讶,让人怀疑如何做才会百分之百完全正确,根据测试结果,我原本想拿掉这个单元,但後来我重新写了一个比较笨,但是在有限小数位数内仍然会正确的式子,可是这个功能只支援小数点,不再支援整数以上的
Round 功能,如下:
'传入的参数和之前相同,第一个是要判断的数字,第二个是要取小数几位。
Public Function round(num As Double, pos As Integer) As
Double '整数以上不处理 If pos <= 0 Then round = Format(num,
"#") Exit Function End If
Dim i As Integer Dim formatstr
As String '拼凑 Format 的格式 formatstr = "#." For i = 1 To
pos formatstr = formatstr & "0" Next round = Format(num,
formatstr) End Function
115、如何找出 Windows 目录的正确路径?
有时候我们在程序中必须用到 Windows 的目录,以存取 Windows 目录下的文件,照理说,这应该是最简单的功能,前提是每个人在
Setup Windows 必须采用 Windows 的预设目录名称,也就是
C:\Windows,但是常常不是这样,有时候由於要使新旧版本共存,或者其他原因,有人会将 Windows 目录改成
c:\win95、c:\win98、Windows95 或 Windows98......
若是程序中必须用到 Windows 目录,要找到正确的路径,做法如下:
'在声明区中加入以下声明:
Const MAX_PATH = 260
Private Declare Function GetWindowsDirectory Lib "kernel32" Alias
"GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As
Long
Public Function GetWinPath() Dim strFolder As String Dim
lngResult As Long strFolder = String(MAX_PATH, 0) lngResult =
GetWindowsDirectory(strFolder, MAX_PATH) If lngResult <> 0
Then GetWinPath = Left(strFolder, InStr(strFolder, Chr(0)) -
1) Else GetWinPath = "" End If End Function
'在程序中使用方法如下:
Private Sub Command1_Click() Call MsgBox("您电脑中 Windows 目录的正确路径是: "
& GetWinPath, vbInformation) End
Sub |