Microsoft Scripting Runtime #1  | Expert | | Join Date: Apr 2006 Location: Philadelphia
Posts: 5,218
# 1
Jan 31 '08
| |
The next series of Tips will involve the Microsoft Scripting Runtime Library (Scrrun.dll). This Library is, in my humble opinion, one of the most useful and practical Libraries ever created. With the Scripting Runtime Library, you can retrieve information related to Drives, Folders, Files, and Text Files and set/retrieve certain Attributes of Drives, Folders, Files, and Text Files. Through Methods exposed by this Library, you can also manipulate these Objects. Because of the extensive functionality exposed by this Library, I have broken it down into several Components which will be the subject matter for the next series of Tips. Our first related Tip will show you how to retrieve specific and vital information for all Drives on your PC, or for a single Drive of your choosing. The code is fairly intuitive, and I have inserted Comments wherever I thought they would be appropriate. This code was used on a Pentium 4 PC with a CD ROM Drive, DVD Drive, Floppy Drive, a single non-partitioned Fixed Disk, and a small Flash Drive in a USB Port. Should you have any questions concerning this Tip, please feel free to ask. Without further adieu, the Scripting Runtime Library Tip #1: -
On Error GoTo ErrorHandler
-
On Error Resume Next 'Critical Line of code
-
-
'Must set a Reference to the Microsoft Scripting Runtime Library (Scrrun.dll)
-
-
'declare appropriate Object Variables
-
Dim fso As FileSystemObject, drv As Drive, drvSingle As Drive
-
-
'Create an Instance of the FileSystemObject using 1 of 2 Methods
-
Set fso = New Scripting.FileSystemObject
-
'OR
-
'Set fso = CreateObject("Scripting.FileSystemObject")
-
-
Debug.Print "--------------------------------------------"
-
'Loop through all Drives on the PC
-
For Each drv In fso.Drives
-
Debug.Print "Drive Letter: " & drv.DriveLetter
-
Debug.Print " Available Space: " & Format$(drv.AvailableSpace, "#,#,#,#") & " bytes"
-
Debug.Print " Drive Type: " & fDetermineDriveType(drv.DriveType)
-
Debug.Print " File System: " & drv.FileSystem
-
Debug.Print " Free Space: " & Format$(drv.FreeSpace, "#,#,#,#") & " bytes"
-
Debug.Print " Is Drive Ready?: " & IIf(drv.IsReady, "Yes", "No")
-
Debug.Print " Drive Path: " & drv.Path
-
Debug.Print " Root Folder: " & drv.RootFolder
-
Debug.Print " Drive Serial Number: " & drv.SerialNumber
-
Debug.Print " Drive Share Name: " & drv.ShareName & IIf(Nz(drv.ShareName) = "", _
-
"Unavailable", drv.ShareName)
-
Debug.Print " Total Size of Drive: " & Format(drv.TotalSize, "#,#,#,#") & " bytes"
-
Debug.Print " Volume Name of Drive: " & IIf(Nz(drv.VolumeName) = "", "Unavailable", _
-
drv.VolumeName)
-
Debug.Print "--------------------------------------------"
-
Next
-
-
'For a Single Drive, from this point on
-
Set drvSingle = fso.Drives("C:")
-
-
Debug.Print "--------------------------------------------"
-
Debug.Print "Drive Letter: " & drvSingle.DriveLetter & " (Single Drive)"
-
Debug.Print " Available Space: " & Format$(drvSingle.AvailableSpace, "#,#,#,#") & _
-
" bytes"
-
Debug.Print " Drive Type: " & fDetermineDriveType(drvSingle.DriveType)
-
Debug.Print " File System: " & drvSingle.FileSystem
-
Debug.Print " Free Space: " & Format$(drvSingle.FreeSpace, "#,#,#,#") & " bytes"
-
Debug.Print " Is Drive Ready?: " & IIf(drvSingle.IsReady, "Yes", "No")
-
Debug.Print " Drive Path: " & drvSingle.Path
-
Debug.Print " Root Folder: " & drvSingle.RootFolder
-
Debug.Print " Drive Serial Number: " & drvSingle.SerialNumber
-
Debug.Print " Drive Share Name: " & drvSingle.ShareName & _
-
IIf(Nz(drvSingle.ShareName) = "", "Unavailable", drvSingle.ShareName)
-
Debug.Print " Total Size of Drive: " & Format(drvSingle.TotalSize, "#,#,#,#") & _
-
" bytes"
-
Debug.Print " Volume Name of Drive: " & IIf(Nz(drvSingle.VolumeName) = "", "Unavailable", _
-
drvSingle.VolumeName)
-
Debug.Print "--------------------------------------------"
-
Private Function fDetermineDriveType(intDriveType As Integer) As String
-
'Interprets the Numeric Value returned by the Type Property and
-
'returns a String representing the Drive Type
-
Select Case intDriveType
-
Case 0
-
fDetermineDriveType = "Unknown"
-
Case 1
-
fDetermineDriveType = "Removable"
-
Case 2
-
fDetermineDriveType = "Fixed"
-
Case 3
-
fDetermineDriveType = "Remote"
-
Case 4
-
fDetermineDriveType = "CD ROM"
-
Case 5
-
fDetermineDriveType = "RAM Disk"
-
Case Else
-
fDetermineDriveType = "Unknown"
-
End Select
OUTPUT: - --------------------------------------------
-
Drive Letter: A
-
Available Space: 833,536 bytes
-
Drive Type: Removable
-
File System: FAT
-
Free Space: 833,536 bytes
-
Is Drive Ready?: Yes
-
Drive Path: A:
-
Root Folder: A:\
-
Drive Serial Number: 1284401684
-
Drive Share Name: Unavailable
-
Total Size of Drive: 1,457,664 bytes
-
Volume Name of Drive: Unavailable
-
--------------------------------------------
-
Drive Letter: C
-
Available Space: 49,298,620,416 bytes
-
Drive Type: Fixed
-
File System: NTFS
-
Free Space: 49,298,620,416 bytes
-
Is Drive Ready?: Yes
-
Drive Path: C:
-
Root Folder: C:\
-
Drive Serial Number: 350880761
-
Drive Share Name: Unavailable
-
Total Size of Drive: 61,483,933,696 bytes
-
Volume Name of Drive: Dezii
-
--------------------------------------------
-
Drive Letter: D
-
Drive Type: CD ROM
-
Is Drive Ready?: No
-
Drive Path: D:
-
Drive Share Name: Unavailable
-
--------------------------------------------
-
Drive Letter: E
-
Drive Type: CD ROM
-
Is Drive Ready?: No
-
Drive Path: E:
-
Drive Share Name: Unavailable
-
--------------------------------------------
-
Drive Letter: F
-
Available Space: 10,195,968 bytes
-
Drive Type: Fixed
-
File System: FAT
-
Free Space: 10,195,968 bytes
-
Is Drive Ready?: Yes
-
Drive Path: F:
-
Root Folder: F:\
-
Drive Serial Number: -2137813243
-
Drive Share Name: Unavailable
-
Total Size of Drive: 32,472,576 bytes
-
Volume Name of Drive: FlashDisk
-
--------------------------------------------
-
--------------------------------------------
-
Drive Letter: C (Single Drive)
-
Available Space: 49,298,620,416 bytes
-
Drive Type: Fixed
-
File System: NTFS
-
Free Space: 49,298,620,416 bytes
-
Is Drive Ready?: Yes
-
Drive Path: C:
-
Root Folder: C:\
-
Drive Serial Number: 350880761
-
Drive Share Name: Unavailable
-
Total Size of Drive: 61,483,933,696 bytes
-
Volume Name of Drive: Dezii
-
--------------------------------------------
|  | Expert | | Join Date: Jun 2007 Location: Israel
Posts: 2,584
# 2
Jan 31 '08
| | | re: Microsoft Scripting Runtime #1
Hello, ADezii.
IMHO "Windows Script Host Object Model" library (\WINDOWS\system32\wshom.ocx) is even more useful.
It has all (or almost all) useful classes of "Microsoft Scripting Runtime" as well as a bunch of other very useful ones. - network
- windows registry functions
- a very useful shell exec method allowing to run an application and get access to its stdin/stdout/stderr as well as to terminate it
- creating shortcuts
- etc
Regards,
Fish
|  | Expert | | Join Date: Apr 2006 Location: Philadelphia
Posts: 5,218
# 3
Feb 1 '08
| | | re: Microsoft Scripting Runtime #1 Quote:
Originally Posted by FishVal Hello, ADezii.
IMHO "Windows Script Host Object Model" library (\WINDOWS\system32\wshom.ocx) is even more useful.
It has all (or almost all) useful classes of "Microsoft Scripting Runtime" as well as a bunch of other very useful ones. - network
- windows registry functions
- a very useful shell exec method allowing to run an application and get access to its stdin/stdout/stderr as well as to terminate it
- creating shortcuts
- etc
Regards,
Fish Hello FishVal and thanks for the info, I never realized that it was quite that extensive. When I am done with this series of Tips relating to the Scripting Runtime could I perhaps interest you in creating a Tip(s) relating to the implementation of the "Windows Script Host Object Model"? I'm sure that it would generate a lot of interest. If you agree, I'll even show you the Top Secret 'Tip Creator Handshake' that only Mary, NeoPa, and I are privy to. (LOL).
|  | Expert | | Join Date: Sep 2006 Location: Israel
Posts: 181
# 4
Feb 2 '08
| | | re: Microsoft Scripting Runtime #1
Just one drawback from using Scripting. There are some antivirus programs (like Kaspersky AV) that have an ability to block scripting in Access. In such case, Access application just stops running. So if you intend to distribute your application, you would rather consider not using Scripting, as powerful as it is, unless there is no other option.
|  | Expert | | Join Date: Apr 2006 Location: Philadelphia
Posts: 5,218
# 5
Feb 2 '08
| | | re: Microsoft Scripting Runtime #1 Quote:
Originally Posted by dima69 Just one drawback from using Scripting. There are some antivirus programs (like Kaspersky AV) that have an ability to block scripting in Access. In such case, Access application just stops running. So if you intend to distribute your application, you would rather consider not using Scripting, as powerful as it is, unless there is no other option. Excellant point dima69, one that I was not aware of, and one to definately consider should you decide to use it. Within these AV Utilities, is there an option to specifically turn off the Component that would normally block Scripting?
|  | Expert | | Join Date: Sep 2006 Location: Israel
Posts: 181
# 6
Feb 2 '08
| | | re: Microsoft Scripting Runtime #1 Quote:
Originally Posted by ADezii Excellant point dima69, one that I was not aware of, and one to definately consider should you decide to use it. Within these AV Utilities, is there an option to specifically turn off the Component that would normally block Scripting? I know that in Kaspersky AV there is an option that can be changed to enable Scripting. Don't remember about the others.
|  | Expert | | Join Date: Jun 2007 Location: Israel
Posts: 2,584
# 7
Feb 2 '08
| | | re: Microsoft Scripting Runtime #1
Hello, ADezii Quote:
Originally Posted by ADezii Hello FishVal and thanks for the info, I never realized that it was quite that extensive. When I am done with this series of Tips relating to the Scripting Runtime could I perhaps interest you in creating a Tip(s) relating to the implementation of the "Windows Script Host Object Model"? You certainly could. Just let me know, please, in advance when "Runtime Scripting" saga will come to a head. :)
Regards,
Fish
|  | Expert | | Join Date: Apr 2006 Location: Philadelphia
Posts: 5,218
# 8
Feb 3 '08
| | | re: Microsoft Scripting Runtime #1 Quote:
Originally Posted by FishVal Hello, ADezii
You certainly could. Just let me know, please, in advance when "Runtime Scripting" saga will come to a head. :)
Regards,
Fish Thanks FishVal, I figure 4 more Tips involving the Scripting Runtime, namely: Folders, Files, Text File manipulation, and the File System Object itself. This should give you plenty of time for the 'Grandaddy of all Tips'! (LOL). See you around and thanks for the assistance.
|  | Similar Microsoft Access / VBA bytes | | | /bytes/about
We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights.
Get the best answers to your questions from over 226,471 network members.
|