您的位置:寻梦网首页编程乐园VB 编程乐园VB问题全功略

VB问题全功略(24)

上一页(24)下一页

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

上一页(24)下一页