|
|
![]() |
|
||
|
|
|||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Visual Basic Disk/Drive API Routines DeviceIoControl: Check Media Availability |
|
| Posted: | Thursday March 9, 2000 |
| Updated: | Monday December 26, 2011 |
| Applies to: | VB4-32, VB5, VB6 |
| Developed with: | VB6, Windows NT4 |
| OS restrictions: | Windows NT4, Windows 2000, Windows XP |
| Author: | VBnet - Randy Birch |
|
Related: |
DeviceIoControl: Load/Eject Removable Media DeviceIoControl: Lock/Unlock Removable Media Devices DeviceIoControl: Obtain Physical Drive Information |
| Prerequisites |
| Windows NT, Windows 2000,
Windows XP
Form and BAS module from DeviceIoControl: Lock/Unlock Removable Media Devices |
|
|
This
is the DeviceIoControl method for determining if a given drive has media present. The nice thing about this call is that it does not need to
spin up the disk - the call returns instantly. The only lag might be if a new disk was inserted and the call was made while the OS was
spinning up the drive. Requires the form and module specified above. |
| BAS Module Code |
|
|
| Add the following code to the BAS module constructed in DeviceIoControl: Lock/Unlock Removable Media Devices: |
|
|
Option Explicit '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Copyright ©1996-2011 VBnet/Randy Birch, All Rights Reserved. ' Some pages may also contain other copyrights by the author. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Distribution: You can freely use this code in your own ' applications, but you may not reproduce ' or publish this code on any web site, ' online service, or distribute as source ' on any media without express permission. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Const IOCTL_STORAGE_CHECK_VERIFY As Long = &H2D4800
Public Function DeviceCheckMedia(sDrive As String) As Long
Dim hDevice As Long
Dim bytesReturned As Long
Dim success As Long
'the drive letter has to be passed
'without a trailing slash (ie 'G:')
sDrive = UnQualifyPath(sDrive)
hDevice = CreateFile("\\.\" & sDrive, _
GENERIC_READ, _
FILE_SHARE_READ Or FILE_SHARE_WRITE, _
ByVal 0&, _
OPEN_EXISTING, _
0&, 0&)
If hDevice <> INVALID_HANDLE_VALUE Then
'If the operation succeeds and
'the device media are accessible,
'DeviceIoControl returns a nonzero value
success = DeviceIoControl(hDevice, _
IOCTL_STORAGE_CHECK_VERIFY, _
0&, _
0&, _
ByVal 0&, _
0&, _
bytesReturned, _
ByVal 0&)
End If
Call CloseHandle(hDevice)
DeviceCheckMedia = success <> 0
End Function |
| Form Code |
|
|
| To the form created in DeviceIoControl: Lock/Unlock Removable Media Devices, add an additional command button (Command3) and the following code: |
|
|
Option Explicit
Private Sub Command3_Click()
Dim sDrive As String
Dim result As Boolean
If List1.ListIndex > -1 Then
sDrive = List1.List(List1.ListIndex)
result = DeviceCheckMedia(sDrive)
If result Then
MsgBox sDrive & " is ready", vbInformation
Else
MsgBox sDrive & " is not ready", vbExclamation
End If
End If
End Sub |
| Comments |
|
|
|
|
|
|||||
|
|||||
|
|
|||||
|
Copyright ©1996-2011 VBnet and Randy Birch. All Rights Reserved. |
![]() |