Batch: Informationen Aus Registry Auslesen
#16
geschrieben 06. Juli 2008 - 14:20
In der Doku steht zu "DriveGetDrive"
"Returns an array of strings (drive letter followed by colon) of drives found. The zeroth array element contains the number of drives."
D.h. es wird nicht nur ein Wert, sondern mehere Werte in einem fortlaufen numerierten
sogennanten Array zurückgeliefert.
Der Null-te Wert enthält die Anzahl der Drives, die zurückgeliefert wird.
Du musst dann nur noch von eins bis Anzahl der Drives durchloopen.
$var[0] = Anzahl der Drives
$var[1] = Erstes Drive
$var[2] = Zweites Drive
$var[3] = Drittes Drive
etc.
Also so, wie in der Hilfe das Beispiel macht:
$var = DriveGetDrive( "all" )
If NOT @error Then
MsgBox(4096,"", "Found " & $var[0] & " drives")
For $i = 1 to $var[0]
MsgBox(4096,"Drive " & $i, $var[$i])
Next
EndIf
"Returns an array of strings (drive letter followed by colon) of drives found. The zeroth array element contains the number of drives."
D.h. es wird nicht nur ein Wert, sondern mehere Werte in einem fortlaufen numerierten
sogennanten Array zurückgeliefert.
Der Null-te Wert enthält die Anzahl der Drives, die zurückgeliefert wird.
Du musst dann nur noch von eins bis Anzahl der Drives durchloopen.
$var[0] = Anzahl der Drives
$var[1] = Erstes Drive
$var[2] = Zweites Drive
$var[3] = Drittes Drive
etc.
Also so, wie in der Hilfe das Beispiel macht:
$var = DriveGetDrive( "all" )
If NOT @error Then
MsgBox(4096,"", "Found " & $var[0] & " drives")
For $i = 1 to $var[0]
MsgBox(4096,"Drive " & $i, $var[$i])
Next
EndIf
Anzeige
#17
geschrieben 06. Juli 2008 - 14:27
Achso, dann wird mir so einiges klar bei der Ausführung, danke dir.
Kennst du eigtl. ne Möglichkeit, dass was in den Dialogfenstern ausgegeben wird in eine .txt Datei reinschreiben zu lassen? Andernfalls kann ich ihm ja einfach sagen er soll das Notepad aufmachen und die ganzen Sachen da rein schreiben. Ist zwar ein bisschen unschön, aber wenn's nichts anderes gibt, müsste ich das wohl so machen.
Da fällt mir auf: was bewirkt das $i = 1 to $var[0] ?
Kennst du eigtl. ne Möglichkeit, dass was in den Dialogfenstern ausgegeben wird in eine .txt Datei reinschreiben zu lassen? Andernfalls kann ich ihm ja einfach sagen er soll das Notepad aufmachen und die ganzen Sachen da rein schreiben. Ist zwar ein bisschen unschön, aber wenn's nichts anderes gibt, müsste ich das wohl so machen.
Da fällt mir auf: was bewirkt das $i = 1 to $var[0] ?
Dieser Beitrag wurde von Erte bearbeitet: 06. Juli 2008 - 14:38
#18
geschrieben 06. Juli 2008 - 14:53
In ein File schreiben ist ganz einfach. Schau Dir mal das Beispiel zu FileWrite an.
Als Dialogausgabe wäre am einfachsten ne mehrzeilige Messagebox, wie das hier z.B.
MsgBox(0, "AutoItCOM Test", "We intercepted a COM Error !" & @CRLF & @CRLF & _
"err.description is: " & @TAB & $oMyError.description & @CRLF & _
"err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _
"err.number is: " & @TAB & Hex($oMyError.number, 8) & @CRLF & _
"err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _
"err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _
"err.source is: " & @TAB & $oMyError.source & @CRLF & _
"err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _
"err.helpcontext is: " & @TAB & $oMyError.helpcontext _
, 5)
@CRLF ist ein Zeilenumbruch, das "_" dient dazu, dass Du nicht alles in eine Zeile schreiben musst.
For $i = 1 to $var[0] ist die For-Next Schleife, wie ich das beschrieben habe.
Als Dialogausgabe wäre am einfachsten ne mehrzeilige Messagebox, wie das hier z.B.
MsgBox(0, "AutoItCOM Test", "We intercepted a COM Error !" & @CRLF & @CRLF & _
"err.description is: " & @TAB & $oMyError.description & @CRLF & _
"err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _
"err.number is: " & @TAB & Hex($oMyError.number, 8) & @CRLF & _
"err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _
"err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _
"err.source is: " & @TAB & $oMyError.source & @CRLF & _
"err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _
"err.helpcontext is: " & @TAB & $oMyError.helpcontext _
, 5)
@CRLF ist ein Zeilenumbruch, das "_" dient dazu, dass Du nicht alles in eine Zeile schreiben musst.
For $i = 1 to $var[0] ist die For-Next Schleife, wie ich das beschrieben habe.
#19
geschrieben 06. Juli 2008 - 18:55
Bin jetzt relativ gut dran. Ich hab vorher nen Thread eröffnet gehabt wegen dem Schlüssel für den Standort. Der Schlüssel ist richtig, jedoch habe ich das Problem dass der Schlüssel einen Part enthält der bei jedem PC anders scheint. Ich will aber dass das Script dynamisch ist. Hab's schon mit * versucht, aber bringt nix.
Habs mir überlegt irgendwie zu machen dass er den Schlüssel sucht, den dann in ne Variable schreibt und die dann verwendet wird, aber mal schaun ob ich's irgendwie hinbringe.
Bin die Hilfe mal durchgegangen, und bin da auf RegEnumKey gestossen, ist eigtl. genau dass was ich brauche.
Hab jetzt ein anderes Problem:
Er soll die Variable $var9_1 mit der Variable $var9_2 zusammensetzen. Wenn die Variable in einer MsgBox ausgeben lasse, wird es korrekt angezeigt. Wenn ich jedoch den Schlüssel $var9 in RegRead benutzte, bleibt das Messagebox Feld ab "...lautet: " leer. Der Wert von $var9 wird nicht angezeigt. Was mache ich falsch?
Edit: Hab das Problem gelöst in dem ich den Schlüssel von "HKEY_CURRENT_USER" genommen hat. Ist an sich genau der gleiche Effekt.
Habs mir überlegt irgendwie zu machen dass er den Schlüssel sucht, den dann in ne Variable schreibt und die dann verwendet wird, aber mal schaun ob ich's irgendwie hinbringe.
Bin die Hilfe mal durchgegangen, und bin da auf RegEnumKey gestossen, ist eigtl. genau dass was ich brauche.
Hab jetzt ein anderes Problem:
$var9_1 = RegEnumKey("HKEY_USERS\", "6") $var9_2 = "\Control Panel\International\Geo" $var9 = $var9_1 & $var9_2 $var9_3 = RegRead($var9, "Nation") MsgBox(64, "Test", "Der Code lautet: " & $var9_3)
Er soll die Variable $var9_1 mit der Variable $var9_2 zusammensetzen. Wenn die Variable in einer MsgBox ausgeben lasse, wird es korrekt angezeigt. Wenn ich jedoch den Schlüssel $var9 in RegRead benutzte, bleibt das Messagebox Feld ab "...lautet: " leer. Der Wert von $var9 wird nicht angezeigt. Was mache ich falsch?
Edit: Hab das Problem gelöst in dem ich den Schlüssel von "HKEY_CURRENT_USER" genommen hat. Ist an sich genau der gleiche Effekt.
Dieser Beitrag wurde von Erte bearbeitet: 06. Juli 2008 - 20:08
#20
geschrieben 06. Juli 2008 - 20:18
Du hast vergessen "HKEY_USERS\" beim RegRead voranzustellen, deshalb kommt ein leerer String
zurück.
Hab das mal ein bischen lesbarer gemacht. ConsoleWrite dient zu Debugzwecken:
$key = "HKEY_USERS\" & RegEnumKey("HKEY_USERS\", 6 ) & "\Control Panel\International\Geo"
$result = RegRead($key, "Nation")
; Ausgabe in die Konsole:
ConsoleWrite("Der Code lautet: " & $result & @CRLF )
zurück.
Hab das mal ein bischen lesbarer gemacht. ConsoleWrite dient zu Debugzwecken:
$key = "HKEY_USERS\" & RegEnumKey("HKEY_USERS\", 6 ) & "\Control Panel\International\Geo"
$result = RegRead($key, "Nation")
; Ausgabe in die Konsole:
ConsoleWrite("Der Code lautet: " & $result & @CRLF )
#21
geschrieben 06. Juli 2008 - 20:30
Zitat (MacGyver: 06.07.2008, 21:18)
Du hast vergessen "HKEY_USERS\" beim RegRead voranzustellen, deshalb kommt ein leerer String
zurück.
Hab das mal ein bischen lesbarer gemacht. ConsoleWrite dient zu Debugzwecken:
$key = "HKEY_USERS\" & RegEnumKey("HKEY_USERS\", 6 ) & "\Control Panel\International\Geo"
$result = RegRead($key, "Nation")
; Ausgabe in die Konsole:
ConsoleWrite("Der Code lautet: " & $result & @CRLF )
zurück.
Hab das mal ein bischen lesbarer gemacht. ConsoleWrite dient zu Debugzwecken:
$key = "HKEY_USERS\" & RegEnumKey("HKEY_USERS\", 6 ) & "\Control Panel\International\Geo"
$result = RegRead($key, "Nation")
; Ausgabe in die Konsole:
ConsoleWrite("Der Code lautet: " & $result & @CRLF )
Cool, danke dir. Ist sicher mal nützlich
Hab bereits die Hilfefunktion durchwühl und Google benutzt, und das einzige was ich gefunden hab war _StringBetween. Hat aber nicht funktioniert. Jedenfalls will ich in einem if fall überprüfen lassen ob das Laufwerk zwischen 1000 und 1024 MB liegt. Das Problem ist, ich weiss nicht wie ich ihm das sagen soll dass der Wert zwischen 1000 und 1024 liegt.
Dieser Beitrag wurde von Erte bearbeitet: 07. Juli 2008 - 05:50
#22
geschrieben 07. Juli 2008 - 07:29
das geht ganz anders. Nämlich so:
If $wert>=1000 And $wert<=1024 Then
ConsoleWrite("Der Wert liegt zwischen 1000 und 1024: " & @CRLF )
Endif
If $wert>=1000 And $wert<=1024 Then
ConsoleWrite("Der Wert liegt zwischen 1000 und 1024: " & @CRLF )
Endif
#23
geschrieben 07. Juli 2008 - 13:10
Zitat (Erte: 03.07.2008, 13:33)
Um konkret zu werden. Ich muss folgende Sachen aus der Registry auslesen können (wenn möglich):
- Partitionen
- Dateisystem der Partitionen
- Berechtigungen (bin mir nicht sicher ob sowas geht mit Batch)
- Anzeigeeinstellungen
- Tastaturlayout
- Partitionen
- Dateisystem der Partitionen
- Berechtigungen (bin mir nicht sicher ob sowas geht mit Batch)
- Anzeigeeinstellungen
- Tastaturlayout
#24
geschrieben 07. Juli 2008 - 22:50
mal aus reiner Neugier; wieso soll das geeigneter sein?
Dieser Beitrag wurde von MacGyver bearbeitet: 08. Juli 2008 - 07:16