Hi,
ja, mein Rechner hat noch IDE-Anschlüsse aber auch schon USB 2.0..
Da ich mehrere Partitionen habe..
Ach ist ja auch egal..
Spoiler anzeigen
#NoTrayIcon ;ohne SysTray-Icon, hängende Prozesse mit TaskMan beenden
#include <EditConstants.au3>
#include <ListViewConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
#AutoIt3Wrapper_Add_Constants=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
;<AutoItScript>
Opt('MustDeclareVars', 1) ;0=ohne, 1=erfordert Variablen-Deklaration
;+----------------------------------------------------------------------------+
;| Header: Bestimmen der Übergabeparameter |
;| ( Alles Strings(!!!), bis auf ArgC ) |
;| FontAnzeigeCheck: |Il1 sind Alt-0124, Großes i, Kleines L, Eins |
Const $Autor='GetLwW.au3 ©2012 by ytwinky, MD'; |
;| EMail: [email='PIII1kSystem-AutoIt3Forum@yahoo.de'][/email] |
;| AutoIt3-Version: aktuelle beta |
;| Editor: SciTE aktuelle Version, feste Schriftart |
;| Zweck : Laufwerke mit Anschlußtyp anzeigen(nur Laufwerke mit Buchstaben)|
;| Tab auf 2 setzen wg. Lesbarkeit |
;+----------------------------------------------------------------------------+
Const $UnGerade[2]=[0xFFFFFF, 0xD2F6CC], $wbemFlagReturnImmediately=0x10, $wbemFlagForwardOnly=0x20, $wbemFlags=0x10+0x20
Const $btnCaption[2]=['Typ-Legende', 'Keine Legende'], $IniDatei=StringLeft(@ScriptFullPath, StringLen(@ScriptFullPath)-3) &'Ini'
Const $GUIBreite=717, $GUIHoehe=455, $GUILeft=350, $GUITop=200, $MaxUsbLw=50, $MaxLw=27
Const $fmt=StringFormat('%4s|%4s|%3s|%7s|%8s|%4s|%12s|%15s|%-15s|%-15s|%-20s', '', '', '', '', '', '', '', '', '', '', '')
Global $USBLw[$MaxUsbLw+1], $LwIndex[$MaxLw], $WmiSvc, $strComputer=@ComputerName, $LwZeile[$MaxLw+1], $u, $CurPos, $StartLw, $CurLw
Local $i, $s, $t, $f, $dt[2]=['DD', 'UD'], $Items, $Item, $m, $Lw, $n, $l, $GesKapaz, $GesFrei
Global $ShowTyp=GUICreate('Typ-Legende', $GUILeft-102, $GUIHoehe, $GUILeft-254, $GUITop), $ChkStatus=IniRead($IniDatei, 'Config', 'ShowHelp', $GUI_Checked)
Global $LwAStatus=IniRead($IniDatei, 'Config', 'ShowLwA', $GUI_Checked), $LwBStatus=IniRead($IniDatei, 'Config', 'ShowLwB', $GUI_UnChecked)
GUICtrlCreateGroup('', 1, -4, $GUILeft-104, $GUIHoehe+4)
$l='DD=DisketteDrive(Diskette 3,5"/5,25")' &@CrLf
$l&='FD=FloppyDrive(Diskette 3,5"/5,25")' &@CrLf
$l&='HD=Festplatte(HardDisk)' &@CrLf
$l&='ND=NetzLaufwerk(NetDrive)' &@CrLf
$l&='OD=Optisches Laufwerk(Optical Disk, CD/DVD)' &@CrLf
$l&='RD=RAM-Disk' &@CrLf
$l&='UD=USB Drive(Sticks/Karten)' &@CrLf
$l&='UFD=USB-FloppyDrive' &@CrLf
$l&='UHD=(externe) USB-Festplatten' &@CrLf
$l&='ULw=USB-Laufwerk(Sticks/Karten)' &@CrLf
$l&='UOD=optisches USB-Laufwerk' &@CrLf
$l&='nv=nicht verfügbar' &@CrLf
$l&='Disketten und CD/DVD zählen nicht zur Summe..' &@CrLf
$l&='..Netzlaufwerke auch nicht!' &@CrLf
Global $efTyp=GUICtrlCreateEdit($l &'[] ist das Gauss''sche Summensymbol' &@CrLf &' (in case you didn''t know..)', 4, 4, $GUILeft-110, $GUIHoehe-7, $ES_READONLY)
GUICtrlSetBkColor(-1, 0xFFFFFF)
GUICtrlCreateGroup('', -99, -99, 1, 1)
If BitAnd($ChkStatus, $GUI_Checked) Then GUISetState(@SW_SHOW)
Global $ShowLw=GUICreate('GetLwW', $GUIBreite, $GUIHoehe, $GUILeft, $GUITop)
Global $lbTitel=GUICtrlCreateLabel('Laufwerke von ' &$strComputer, 0, -2, 439, 24)
GUICtrlSetFont(-1, 18, 800, 0, 'Arial')
GUICtrlSetColor(-1, 0x000080)
GUICtrlSetTip(-1, $Autor)
Global $btnF5=GUICtrlCreateButton('F5', 482, 1, 27, 25)
GUICtrlSetFont(-1, 8, 800, 0, 'MS Sans Serif')
GUICtrlSetColor(-1, 0x008000)
GUICtrlSetTip(-1, 'aktualisieren..')
Global $cbxLwA=GUICtrlCreateCheckbox('A: ausblenden', 531, 4, 90, 17)
GUICtrlSetState(-1, $LwAStatus)
Global $cbxLwB=GUICtrlCreateCheckbox('B: ausblenden', 622, 4, 90, 17)
GUICtrlSetState(-1, $LwBStatus)
Global $lvLwAdr=GUICtrlCreateListView(StringFormat('%4s|%4s|%3s|%7s|%8s|%4s|%17s|%18s|%11s|%17s|%-20s', 'lfd.', 'Lw', 'DNr', 'Typ', 'FS ', 'bereit', 'Total[MB]', 'Frei[MB]', 'Frei[%]', 'belegt[MB]', 'Bezeichnung'), 0, 26, $GUIBreite-1, $GUIHoehe-53, default, $LVS_EX_GRIDLINES)
For $i=1 To 27
$LwZeile[$i]=GUICtrlCreateListViewItem($fmt, $lvLwAdr)
GUICtrlSetFont(-1, 9, 400, 0, 'Lucida Console')
Next
Global $btnTyp=GUICtrlCreateButton($btnCaption[BitAnd($ChkStatus, $GUI_Checked)], 2, $GUIHoehe-26, 93, 25, 0)
GUICtrlSetFont(-1, 8, 800, 0, 'MS Sans Serif')
Global $lblBusy=GUICtrlCreateLabel('*busy*', 300, $GUIHoehe-22, 80, 24)
GUICtrlSetFont(-1, 8, 800, 0, 'MS Sans Serif')
GUICtrlSetColor(-1, 0xE00000)
GUICtrlSetState(-1, $GUI_Hide)
Global $cbxLegStart=GUICtrlCreateCheckbox('Legende beim Start anzeigen', 100, $GUIHoehe-22, 190, 17)
GUICtrlSetState(-1, $ChkStatus)
GUICtrlSetTip(-1, 'legt im Dateiverzeichnis eine IniDatei an..' &@CrLf &'(braucht dort also Schreibrechte!)')
GetLW()
Global $btnQuit=GUICtrlCreateButton('Ende', $GUIBreite-77, $GUIHoehe-26, 75, 25, 0)
GUICtrlSetFont(-1, 8, 800, 0, 'MS Sans Serif')
GUICtrlSetState($btnTyp, $GUI_Focus)
GUISetState(@SW_SHOW)
$StartLw=DriveGetDrive('All')
While True
$CurLw=DriveGetDrive('All')
If $CurLw[0]<>$StartLw[0] Then
$StartLw=$CurLw
GetLw()
EndIf
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $btnQuit
Exit
Case $btnF5
GetLW()
Case $cbxLwA
IniWrite($IniDatei, 'Config', 'ShowLwA', GuiCtrlRead($cbxLwA))
GetLW()
Case $cbxLwB
IniWrite($IniDatei, 'Config', 'ShowLwB', GuiCtrlRead($cbxLwB))
GetLW()
Case $cbxLegStart
IniWrite($IniDatei, 'Config', 'ShowHelp', GuiCtrlRead($cbxLegStart))
Case $btnTyp
If GUICtrlRead($btnTyp)='Keine Legende' Then
WinSetState('Typ-Legende', '', @SW_HIDE)
GUICtrlSetData($btnTyp, 'Typ-Legende')
Else
WinSetState('Typ-Legende', '', @SW_Show)
$CurPos=WinGetPos('GetLwW', '')
If $CurPos[0]<251 Then WinMove('GetLwW', '', 252, $CurPos[1])
$CurPos=WinGetPos('GetLwW', '')
WinMove('Typ-Legende', '', $CurPos[0]-252, $CurPos[1])
GUICtrlSetState($btnTyp, $GUI_Focus)
GUICtrlSetData($btnTyp, 'Keine Legende')
EndIf
EndSwitch
Wend
Func myStatus($Lw)
Switch StringLower(DriveStatus($Lw))
Case 'ready'
Return 'ja'
Case 'notready'
Return 'nein'
Case 'unknown'
Return '???'
Case 'invalid'
Return 'atmno'
Case Else
Return 'wtf???'
EndSwitch
EndFunc
Func myDriveType($Lw)
Local $WMiSvc, $EachCD, $CDs
If $USBLw[$LwIndex[Asc($Lw)-64]]<>'' Then Return $USBLw[$LwIndex[Asc($Lw)-64]]
Switch StringLower(DriveGetType($Lw))
Case 'cdrom'
$WmiSvc=ObjGet('winmgmts:\\' &$strComputer &'\root\cimv2')
$CDs=$WmiSvc.ExecQuery('Select PNPDeviceID From Win32_CDROMDrive Where Drive="' &$Lw &'"', 'wql', $wbemflags)
If IsObj($CDs) Then
For $EachCD In $CDs
If StringInstr($EachCD.PNPDeviceID, 'USB') Then Return 'UOD'
Next
Else
Msg('WMI-Ausgabe','Keine WMI-Objekte gefunden für Klasse: Win32_CDROMDrive')
EndIf
Return 'OD'
Case 'fixed'
Return 'HD'
Case 'ramdisk'
Return 'RD'
Case 'network'
Return 'ND'
Case 'removable'
Return $dt[$Lw>'C:']
Case Else
Return 'nv'
EndSwitch
EndFunc
Func myGetFS($Lw)
Local $FS=DriveGetFileSystem($Lw)
If $Fs=1 Then Return 'leer/raw'
Return $Fs
EndFunc
Func Msg($What, $Title=$Autor, $Icons=0, $ErrLevel=0)
MsgBox($Icons, $Title, $What)
If $ErrLevel Then Exit $ErrLevel
EndFunc
Func PSpace($Where, $Fw, $Nk)
If $Where='' Then Return ''
Local $s=StringFormat('%.' &$Nk &'f', $Where), $i=StringLeft($s, StringInstr($s, '.')), $Nk1=$Nk, $j
If $Nk1>0 Then $Nk1+=1
Do
$s=' ' &$s
Until StringLen($s)=$Fw
For $j=6 To 1 Step -1
If $i<10^$j Then $s=' ' &$s
Next
Return $s
EndFunc
Func GetLW()
Local $WmiSvc=ObjGet('winmgmts:\\' &$strComputer &'\root\CIMV2')
Local $Items=$WmiSvc.ExecQuery('Select Index,MediaType From Win32_DiskDrive Where InterfaceType="USB"', 'wql', $wbemflags)
Local $Items, $i, $j=0, $m, $AlleLw, $f, $t, $GesFrei, $GesKapaz
GUICtrlSetState($lblBusy, $GUI_Show)
If IsObj($Items) Then
For $Item In $Items
If $Item.Index<0 Or $Item.Index>=$MaxUsbLw Then Msg('Script erneuern: Index(erlaubt):0..' &$MaxUsbLw &@Lf &'Index(aktuell):' &$Item.Index, 'Huch..', 64, 27)
$USBLw[$Item.Index]='UD'
$m=StringReplace($Item.MediaType, @Tab, ' ')
$m=StringLeft($m, StringInstr($m, ' ')-1)
If StringInstr($m, 'x') Then $USBLw[$Item.Index]='UHD'
If StringInstr($m, 'o') Then $USBLw[$Item.Index]='ULw'
Next
Else
Msg('Keine WMI-Objekte gefunden für Klasse: Win32_DiskDrive', $strComputer, 64, 27)
EndIf
$Items=$WMISvc.ExecQuery('Select Antecedent, Dependent From Win32_LogicalDiskToPartition', 'wql', $wbemFlags)
If IsObj($Items) Then
For $Item In $Items
$i=StringMid($Item.Antecedent, StringInstr($Item.Antecedent, '=')+2)
$i=StringMid($i, StringInstr($i, '#')+1, StringInstr($i, ',')-StringInstr($i, '#')-1)
$m=StringMid($Item.Dependent, StringInstr($Item.Dependent, '=')+2, 1)
$LwIndex[Asc($m)-64]=$i
Next
Else
Msg('Keine WMI-Objekte gefunden für Klasse: Win32_LogicalDiskToPartition', $strComputer, 64, 27)
EndIf
$AlleLw=DriveGetDrive('all')
If Not @error Then
For $i=1 To $AlleLw[0]
$Lw=StringUpper($AlleLw[$i])
If $Lw='A:'And BitAnd(GUICtrlRead($cbxLwA), $GUI_CHECKED) Then ContinueLoop
If $Lw='B:' And BitAnd(GUICtrlRead($cbxLwB), $GUI_CHECKED) Then ContinueLoop
$j+=1
$m=myStatus($Lw)
$s=StringFormat('%02s|%3s|%3s|%6s|%6s|%4s|', $j, $Lw, $LwIndex[Asc(StringLeft($Lw, 1))-64], myDriveType($Lw), myGetFS($Lw), $m)
If $m='ja' Then
$t=DriveSpaceTotal($Lw)
$f=DriveSpaceFree($Lw)
If StringInstr(myDriveType($Lw), 'OD')=0 Then
$GesKapaz+=$t
$GesFrei+=$f
EndIf
$m=''
If $t<>0 Then $m=PSpace($f/$t*100, 7, 1)
$s&=PSpace($t, 15, 3) &'|' &PSpace($f, 15, 3) &'| ' &$m &'|' &PSpace($t-$f, 15, 1) &'|' &DriveGetLabel($Lw)
EndIf
GUICtrlSetData($LwZeile[$j], $fmt)
GUICtrlSetData($LwZeile[$j], $s)
GUICtrlSetColor($LwZeile[$j], 0x000080)
GUICtrlSetBkColor($LwZeile[$j+1], $UnGerade[BitAnd($j, 1)])
Next
For $i=$j+1 To $MaxLw
GUICtrlSetData($LwZeile[$i], $fmt)
GUICtrlSetBkColor($LwZeile[$i], $UnGerade[0])
Next
$s=StringFormat('[]||||||%10s|%12s|%12s|%-12s|', PSpace($GesKapaz, 15, 3), PSpace($GesFrei, 15, 3), PSpace($GesFrei/$GesKapaz*100, 7, 1), PSpace($GesKapaz-$GesFrei, 15, 1))
GUICtrlSetData($LwZeile[$j+1], $s)
GUICtrlSetBkColor($LwZeile[$j+1], 0xDDDDDD)
EndIf
GUICtrlSetState($lblBusy, $GUI_Hide)
EndFunc
Mich würde nun interessieren, was das Programm unter Win7 anzeigt(Vista interessiert mich nicht..)
Bzw. ob es überhaupt etwas anzeigt bei Rechnern, die gar keine IDE-Platten mehr haben(also SATA etc.)
Da ich viele Anregungen zum Programm hier aus dem Forum habe, ist es für mich natürlich kein Problem, den QuälCode hier zu posten..
..auch als Dankeschön an die vielen (ungenannten) 'Helfer'
Da das Script bei mir unter XP SP3+ funktioniert, hat es mit Rückmeldungen keine Eile
Wenn die Admins meinen, es würde besser nach 'Scripte' passen, sollten sie es dorthin verschieben..
Gruß
ytwinky