116、让您的音乐 CD
动起来! 117、如何求出磁盘大小及剩余空间大小
(更简单的 VB6 新功能) 118、反向思考---怎样让程序跑慢一点?(二) 119、列出电脑中所有磁盘 120、模拟【网路上的芳邻】及【我的电脑】中的【连线
/ 中断网路磁盘】(二)
116、让您的音乐 CD 动起来!
之前,我们讨论过,但是只会开启及关闭,用处还不太大,今天,我们来看看要怎么让您的音乐 CD
动起来!
'请在声明区中加入以下声明: ( 和 "开启及关闭CD-Rom的门" 相同的声明)
Private
Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA"
(ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal
uReturnLength As Long, ByVal hwndCallback As Long) As Long
'在 Form
中加入二个 CommandButton,分别命名为 cmdPlay 及 cmdStop 并加入以下程序码:
Sub
cmdPlay_Click() Dim lRet As Long Dim nCurrentTrack As
Integer '开启装置 lRet = mciSendString("open cdaudio alias cd wait",
0&, 0, 0) '设定时间格式为 Tracks ( 预设值是 milliseconds ) lRet =
mciSendString("set cd time format tmsf", 0&, 0, 0) '从头开始播放 lRet
= mciSendString("play cd", 0&, 0, 0) '您也可以指定要从第几首歌 (Track)
开始播放,例如以下指定从第 3 首歌开始播放 'nCurrentTrack = 3 lRet = mciSendString("play
cd from" & Str(nCurrentTrack), 0&, 0, 0) End Sub
'
记得在播放完毕时要关闭装置 Sub cmdStop_Click() Dim lRet As Long '停止播放 lRet
= mciSendString("stop cd wait", 0&, 0, 0) DoEvents '给
Windows一点时间去处理其他事件 '关闭装置 lRet = mciSendString("close cd", 0&, 0,
0) End Sub
注:如果您想指定从第几首歌开始播放,只要将上面绿色那行程序之 Mark
拿掉,改掉数字即可!
注:原作者原来的声明是在 mmsystem.dll,现在要使用 winmm.dll
才可以!
117、如何求出磁盘大小及剩余空间大小 (更简单的 VB6 新功能)
在《问题 91》时,我们使用了 API
来求出磁盘大小及剩余空间大小,也就是下方资讯之后二项:
《在我们安装软体的时候,在安装选项的画面,常常会出现如下的一些叙述:》
选择安装项目大小..............................................10,000,000
Bytes C 磁碟总空间大小..........................................1,847,328,768
Bytes C 磁碟剩余空间大小...........................................51,707,904
Bytes
在 VB6 以前我们只能如此做,对于不熟悉 API 的人来说,很难,但是在 VB6 就变得很简单,因为在 VB6
中提供了一个新物件:FileSystemObject
让我们实№来自看例子:
Private Sub
Command1_Click() Dim fso As New FileSystemObject, drv As Drive Set
drv = fso.GetDrive(fso.GetDriveName("c:")) 剩余空间大小 =
drv.FreeSpace 磁盘大小 = drv.TotalSize End Sub
使用上面的方法算出的结果和使用
GetDiskFreeSpace API 算出的结果是完全一样的!
118、反向思考---怎样让程序跑慢一点?(二)
原来我们提到了使用 Sleep API
来达到让程序暂停的方法,方法很简单,程序码也很简短,但是美中不足的是,它只能用在 32 位元的环境中!
难道在 16
位元的环境中就没办法了吗?或者,一定要使用 API 吗?
还是有办法的,而且不用 API,最棒的是所有版本的 VB
都可使用!
'在您的程序中,加入以下的模组:
Public Sub Delay(HowLong As
Date) TempTime = DateAdd("s", HowLong, Now) While TempTime >
Now DoEvents '让 windows 去处理其他事 Wend End
Sub
'在程序中只要如下使用即可:
Private Sub Command1_Click() Delay
5 End Sub
119、列出电脑中所有磁盘
我们曾讨论过使用 GetDriveType API 再加上回圈一个一个判断磁盘的型态,再列在
ListBox
中供选择。但是在实际应用程序中,有时候我们根本不需要知道各个磁盘的型态,我们的目的只是很单纯地让使用者来挑选档案的位置而已!例如趋势科技的
Pccillin 要从磁盘 Upgrade
病毒码时,它会询问您磁盘代号,就是使用这种作法!
这时候,我们可以换一种更快的方式,(只是有人认为不能顺便列出磁盘型态仍是一种缺点)
如下:
'在声明区中加入以下声明:
Const LB_DIR = &H18D 'LB 即是 ListBox
的缩写 Const DDL_DRIVES = &H4000
Private Declare Function
SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal
wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public
Function AddDrives2ListBox(lhWnd As Long) Call SendMessage(lhWnd,
LB_DIR, DDL_DRIVES, "*") End Function
'而程序中之使用方法如下:(只有一个参数,就是
ListBox 的 hwnd)
Private Sub Form_Load() AddDrives2ListBox
List1.hwnd End Sub
有人问我,ListBox 的很多功能都和 ComboBox 很像,这个例子,可以使用
ComboBox 吗?
可以的,也不难,将声明区的声明改成:
Const CB_DIR = &H145 'CB
即是 ComboBox 的缩写 Const DDL_DRIVES = &H4000
Private Declare
Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As
Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As
Long
Public Function AddDrives2ComboBox(lhWnd As Long) Call
SendMessage(lhWnd, CB_DIR, DDL_DRIVES, "*") End
Function
'而程序中之使用方法如下:(只有一个参数,就是 ComboBox 的 hwnd)
Private
Sub Form_Load() AddDrives2ComboBox Combo1.hwnd End Sub
120、模拟【网路上的芳邻】及【我的电脑】中的【连线 / 中断网路磁盘】(二)
对于实际的网路作业,WNet API
是非常有用的,例如:我们在《问题93》模拟【网路上的芳邻】及【我的电脑】中的【连线 / 中断网路磁盘】中我们就使用了
WNetAddConnection 及 WNetCancelConnection 这二个 API
很有效地来处理连线及中断网路磁盘,但是我们不知道每一个使用者电脑中的实际设定,使用直接指定的强迫连线及中断,或许会影响使用者原本电脑中的设定。
下面的方法是一个比较中性的作法,就是出现【连线
/
中断网路磁盘】的问话框,让使用者根据自己电脑的情形,来决定要连线的网路磁盘要对应到自己的那一个磁盘?要中断的又是那一个对应的磁盘?其实,这个方法更接近实际模拟【网路上的芳邻】及【我的电脑】中的【连线
/ 中断网路磁盘】!
请在声明区中加入以下声明及模组:
Private Declare Function
WNetConnectionDialog Lib "mpr.dll" (ByVal hwnd As Long, ByVal dwType As
Long) As Long Private Declare Function WNetDisconnectDialog Lib
"mpr.dll" (ByVal hwnd As Long, ByVal dwType As Long) As Long
Sub
ShowMapDrives(hwnd As Long) WNetConnectionDialog hwnd, 1 End
Sub
Sub ShowUnMapDrives(hwnd As Long) WNetDisconnectDialog hwnd,
1 End Sub
'程序中使用方式如下:
Private Sub Command1_Click() '出现
连线网路磁盘 问话框 ShowMapDrives Me.hwnd End Sub
Private Sub
Command2_Click() '出现 中断网路磁盘 问话框 ShowUnMapDrives Me.hwnd End
Sub |