Da ja im Moment hier die Minimalistik vorherrscht, mein Beispielskript dazu.
Erzeugt 52 checkboxes(2 x A-Z) und ein paar Buttons.
Erzeugt Binärwerte aus der Registry und übersetzt sie in Dezimalwerte.
(AutoIT3 kann das von Natur aus ja nicht so gut)
Nix Externes. Dadurch bleibt das kompilierte Programm auch viel kleiner.
Hat jemand eine Idee, den Code weiter zu kürzen?
97 Zeilen ist aber schon gut, oder?
Spoiler anzeigen
Global $ix1[26],$ix2[26],$reg="HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer",$w=40,$h=20,$chbx[26]=["a:","b:","c:","d:","e:","f:","g:","h:","i:","j:","k:","l:","m:","n:","o:","p:","q:","r:","s:","t:","u:","v:","w:","x:","y:","z:" ]
GUICreate("Laufwerke",250,350)
chkbx1(10,10,0,12) ; erzeuge 13 checkboxes
chkbx1(60,10,13,25) ; erzeuge weitere 13 checkboxes
chkbx2(160,10,0,12) ; erzeuge 13 checkboxes
chkbx2(200,10,13,25) ; erzeuge weitere 13 checkboxes
$OK=GUICtrlCreateButton("OK",10,300,90,30)
$Ab=GUICtrlCreateButton("Beenden",150,300,90,30)
GUICtrlCreateLabel ("Ausblenden",10,280,80,20 )
GUICtrlCreateLabel ("Sperren",150,280,80,20 )
$lwhid=RegRead($reg,"NoDrives")
get($lwhid,$ix1) ;lese versteckte Lw aus der Registry
$lwres=RegRead($reg,"NoViewOnDrive")
get($lwres,$ix2) ;lese verbotene Lw aus der Registry
GUISetState()
While 1
$msg=GUIGetMsg()
If $msg=$OK Then
RegWrite($reg,"NoDrives","REG_DWORD",Read($ix1))
RegWrite($reg,"NoViewOnDrive","REG_DWORD",Read($ix2))
EndIf
If $msg=$Ab Then ExitLoop
WEnd
Func get($lw,$ix)
If $lw>0 Then
$b=''
While $lw > 0
$b=String(Mod($lw,2))&$b
$lw=Int($lw/2)
WEnd
$lw=StringSplit($b,"")
$_max=$lw[0] - 1
_AD($lw,0)
_AR($lw)
For $y=0 To $_max
If $lw[$y]=1 Then GUICtrlSetState($ix[$y],1)
Next
Else
EndIf
Endfunc
Func chkbx2($l,$t,$1,$2)
For $c=$1 To $2
$ix2[$c]=GUICtrlCreateCheckbox($chbx[$c],$l,$t,$w,$h)
$t=$t+20
Next
EndFunc
Func chkbx1($l,$t,$1,$2)
For $c=$1 To $2
$ix1[$c]=GUICtrlCreateCheckbox($chbx[$c],$l,$t,$w,$h)
$t=$t+20
Next
EndFunc
Func Read($idx)
$h=""
For $y=25 To 0 Step -1
If GUICtrlRead($idx[$y])=1 Then
$h=$h&1
Else
$h=$h&0
EndIf
Next
$d=0
For $i=0 To StringLen($h) Step 1
$d=$d+Number(StringMid($h,StringLen($h)-$i,1))*(2^$i)
Next
Return $d
EndFunc
Func _AD(ByRef $ar, $ie)
Local $iC = 0, $iU = 0
$iU = UBound($ar)
Local $arn[$iU - 1]
If $ie < 0 Then $ie = 0
If $ie > ($iU - 1) Then $ie = ($iU - 1)
If $ie > 0 Then
For $iC = 0 To $ie - 1
$arn[$iC] = $ar[$iC]
Next
EndIf
If $ie < ($iU - 1) Then
For $iC = ($ie + 1) To ($iU - 1)
$arn[$iC - 1] = $ar[$iC]
Next
EndIf
$ar = $arn
Return 1
EndFunc
Func _AR(ByRef $ar, $iB = 0, $iU = 0)
Local $tp, $lt = UBound($ar) - 1
If $iU < 1 Or $iU > $lt Then $iU = $lt
For $i = $iB To $iB + Int(($iU - $iB - 1) / 2)
$tp = $ar[$i]
$ar[$i] = $ar[$iU]
$ar[$iU] = $tp
$iU = $iU - 1
Next
Return 1
EndFunc
;Copyright Westi
Zur Vunkzion:
Ferschtekt(Ausblenden) oder ferbeatet(Sperren) den Zugriff auf Laufwerke.
Ich habe es nicht besonders lesbar gemacht, aber für die Experten sollte es verständlich sein.
Es ist halt minimalistisch...
Gruß
Westi