Donnerstag, 15. November 2007

Windows Scripting Host zur Abfrage von Laufwerksinformationen nutzen / Using Windows Scripting Host to query drive informations

Visual FoxPro bietet mit den Funktionen DISKSPACE() und DRIVETYPE() zwei Werkzeuge, die es uns ermöglichen, diverse Informationen bzgl. der verfügbaren Laufwerke abzufragen. Hier ein kleines Codemuster dazu: 
 
LOCAL laDrivetype(6), lcFont, i, lcL, j
laDrivetype(1) = [unbekannt ]
laDrivetype(2) = [Diskettenlaufwerk ]
laDrivetype(3) = [lokaler Datenträger]
laDrivetype(4) = [Netzlaufwerk ]
laDrivetype(5) = [CD/DVD-ROM Laufwerk]
laDrivetype(6) = [RAM Disk ]
lcFont = _screen.FontName
_screen.FontName = [Courier New]
CLEAR
?[LW Typ Gesamtgröße Freier Speicher]
FOR i = 65 TO 90
    lcL = CHR(i) + [:]
    IF DISKSPACE(lcL,1) > -1
        ? lcL,laDrivetype(DRIVETYPE(lcL))
        FOR j = 1 TO 2
            ?? [ ],TRANSFORM(DISKSPACE(lcL,j)/1000/1000,[999,999]) + [ MB]
            ?? [ ],PADL(ROUND(DISKSPACE(lcL,j)/1024/1024/1024,1),5,[ ]) + [ GB]
        ENDFOR
    ENDIF
ENDFOR
_screen.FontName = lcFont

Im Allgemeinen dürften diese Informationen ausreichend sein. Wenn wir jedoch weiterführende Daten benötigen (z.B. Dateisystem, Seriennummer, Datenträgerbezeichnung), dann streckt der Fux die Flügel. Zur Hilfe kommt uns wie so oft der Scripting Host. Also erstellen wir uns ein sogenanntes File System Object und fragen die benötigten Informationen ab. Wie dies bewerkstelligt wird, darüber gibt uns der folgende Code Aufschluss: 
 
LOCAL laDrivetype(6), lcFont, oFSO
laDrivetype(1) = [unbekannt]
laDrivetype(2) = [Wechseldatenträger]
laDrivetype(3) = [lokaler Datenträger]
laDrivetype(4) = [Netzlaufwerk]
laDrivetype(5) = [CD/DVD-ROM Laufwerk]
laDrivetype(6) = [RAM Disk]
lcFont = _screen.FontName
_screen.FontName = [Courier New]
oFSO = CREATEOBJECT([Scripting.FileSystemObject])

CLEAR

?PADR([LW], 3,[ ])
?? PADR([Typ], 21,[ ])
?? PADR([Dateisystem], 11,[ ])
?? PADL([SerialNo], 13,[ ])
?? [ ]
?? PADR([Datenträgerbezeichnung],33,[ ])
?? PADR([Gesamtgröße], 20,[ ])
?? PADR([Freier Speicher], 20,[ ])
?? PADR([Verfügbarer Speicher], 20,[ ])

FOR EACH oDrive IN oFSO.Drives
WITH oDrive
? PADR(.DriveLetter + [:],3,[ ])
?? PADR(laDriveType(.DriveType + 1),21,[ ])
IF .Isready
?? PADR(.FileSystem,11,[ ])
?? PADL(.SerialNumber,13,[ ])
?? [ ]
?? PADR(IIF(.DriveType = 3,.ShareName,.VolumeName),32,[ ])
?? TRANSFORM(.TotalSize / 1000 / 1000, [999,999]) + [ MB (]
?? PADL(.TotalSize / 1024 / 1024 / 1024,4,[ ]) + [ GB)]
?? TRANSFORM(.FreeSpace / 1000 / 1000, [999,999]) + [ MB (]
?? PADL(.FreeSpace / 1024 / 1024 / 1024,4,[ ]) + [ GB)]
?? TRANSFORM(.AvailableSpace / 1000 / 1000, [999,999]) + [ MB (]
?? PADL(.AvailableSpace / 1024 / 1024 / 1024,4,[ ]) + [ GB)]
ELSE
?? [kein Datenträger eingelegt]
ENDIF
ENDWITH
ENDFOR

_screen.FontName = lcFont
RELEASE laDrivetype, lcFont, oFSO

Mit Hilfe dieses kleinen Beispiels sollte es nun kein Problem mehr sein, die gewünschten Daten in Erfahrung zu bringen.

Keine Kommentare:

Kommentar veröffentlichen