WinFuture-Forum.de: Batch: Informationen Aus Registry Auslesen - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 2 Seiten +
  • 1
  • 2

Batch: Informationen Aus Registry Auslesen

#16 Mitglied ist offline   MacGyver 

  • Gruppe: Mitglieder
  • Beiträge: 17
  • Beigetreten: 08. Februar 03
  • Reputation: 0

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
0

Anzeige



#17 Mitglied ist offline   Erte 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.084
  • Beigetreten: 03. Januar 07
  • Reputation: 0
  • Geschlecht:Männlich

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] ?

Dieser Beitrag wurde von Erte bearbeitet: 06. Juli 2008 - 14:38

0

#18 Mitglied ist offline   MacGyver 

  • Gruppe: Mitglieder
  • Beiträge: 17
  • Beigetreten: 08. Februar 03
  • Reputation: 0

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.
0

#19 Mitglied ist offline   Erte 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.084
  • Beigetreten: 03. Januar 07
  • Reputation: 0
  • Geschlecht:Männlich

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:
$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

0

#20 Mitglied ist offline   MacGyver 

  • Gruppe: Mitglieder
  • Beiträge: 17
  • Beigetreten: 08. Februar 03
  • Reputation: 0

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 )
0

#21 Mitglied ist offline   Erte 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.084
  • Beigetreten: 03. Januar 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 06. Juli 2008 - 20:30

Beitrag anzeigenZitat (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 )

Cool, danke dir. Ist sicher mal nützlich :blink:

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

0

#22 Mitglied ist offline   MacGyver 

  • Gruppe: Mitglieder
  • Beiträge: 17
  • Beigetreten: 08. Februar 03
  • Reputation: 0

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
0

#23 Mitglied ist offline   sкavєи 

  • Gruppe: aktive Mitglieder
  • Beiträge: 6.759
  • Beigetreten: 20. Juli 04
  • Reputation: 62
  • Geschlecht:Männlich
  • Wohnort:Stralsund

geschrieben 07. Juli 2008 - 13:10

Beitrag anzeigenZitat (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
Da wuerde ich nicht mit der Registrz arbeiten. WMI ist dafuer wesentlich geeigneter. Schau dir mal "wmic /?" an.
Eingefügtes Bild
Eingefügtes Bild
0

#24 Mitglied ist offline   MacGyver 

  • Gruppe: Mitglieder
  • Beiträge: 17
  • Beigetreten: 08. Februar 03
  • Reputation: 0

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

0

Thema verteilen:


  • 2 Seiten +
  • 1
  • 2

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0