Registry auslesen mit Java

Cherry

Mitglied
Hallo,

ich bin erst seit kurzem hier angemeldet...kenn mich noch nicht so aus 😉

Ich habe einige Probleme beim Auslesen der registry mit Java.
Hier ist der Quelltext:


Java:
import java.util.prefs.*;
import java.lang.ProcessBuilder;
import java.util.Scanner;
public class DruckerAuslesen {
public static void main(String argv[])throws Exception
{
	ProcessBuilder pb= new ProcessBuilder("reg","query", "\"HKEY_CURRENT_USER\\Volatile Environment\\1\"", "/v", "HOMEDRIVE");
	Process p= pb.start();
	Scanner sc= new Scanner(p.getInputStream()).useDelimiter("    \\w+\\s+\\w+\\s+");
	sc.next();
	System.out.println(sc.next());
	
	}
}
Mein Problem ist, dass ich nicht weiß wie die Regex auf den Pfad zugreifen, also welcher Ausdruck zu welchem Pfadabschnitt gehört.
Ich hätte so gedacht, dass \\w+ zu HKEY_CURRENT_USER gehört und \\s+ zu Volatile Environment.
Müsste hier dann nicht auch \w stehen, weil Zeichen auch in dem Abschnitt vorkommen??

Irgendwie hab ich das noch nicht ganz gecheckt:rtfm:

Danke für Eure Antorten!🙂
 
Danke für die schnelle Antwort!
Ja, soweit hab ich das noch verstanden.
Muss ich dann wenn z. b. in dem Pfadabschnitt, Leerzeichen und Buchstaben drankommen, \w+s schreiben? Oder reicht hier \s, da er auf den anderen Regex von dem vorigen Abschnitt zurückgreift?
 
das mit dem auslesen der registry ist so ne sache...
geh mal davon aus, dass das nicht auf jedem pc so funktioniert.
musste mal sowas machen, um daten für einen installer zu sammeln...
leider hats auf einigen systemen gehakt und keine ergebnisse geliefert, obwohl auch auf diesen systemen der value in der registry war...

--> vorsicht mit dem verwenden von registry in java <--

*but thats just my 50 cents*
 
Ja, das habe ich auch in mehreren Foren schon gelesen.
Ich wollte das nur grundsätzlich wissen, da ich nicht ganz verstehe, wie die Regex auf den jeweiligen Pfad zugreifen bzw gültig sin.
 
Muss ich dann wenn z. b. in dem Pfadabschnitt, Leerzeichen und Buchstaben drankommen, \w+s schreiben? Oder reicht hier \s, da er auf den anderen Regex von dem vorigen Abschnitt zurückgreift?

[c]\w+s[/c] würde [c]\w+[/c] und [c]s[/c] bedeuten, d.h. es wird [c]+[/c] (1 bis ...) Mal ein [c]\w[/c] verlangt - da gibt es noch [c]?[/c] für 0 bis 1 und [c]*[/c] für 0 bis ... - und danach ein simples [c]s[/c].
Wenn du z.B. eine Mischung aus Trennzeichen ([c]\s[/c]) und Wordchars ([c]\w[/c]) matchen wollen würdest, könntest du das mit [c][\s\w]+[/c] für 1 bis ... Zeichen machen. [c]\w[/c] alleinstehend matcht genau ein Zeichen, welches in der Liste von [c]\w[/c] vorkommt (AFAIK in diesem Fall [c][a-zA-Z_0-9][/c]).
 
Danke tuxedo, werde ich mir anschaun.

Aber im Zusammenhang hab ich das mit dem Pfad immer noch nicht kapiert.
Z. B:
Bei: HKEY_Current_User\Control Panel\Current\Color Schemes reicht \\w+[\\w\\s]+\\w+\\s+ um auf das Farbschema zuzugreifen
Jedoch bei: HKEY_Current_User\Printers\Settings\Wizard\Driver Name \\w+\\w+\\w+\\w+\\s+ gibt er folgendes aus:
Name REG_SZ Kyocera FS-1100 KX

Wie muss ich den Regex abändern, dass nur Kyocera FS-1100 KX da steht?
 
Hier wäre der Auszug der Klasse von den zwei Registry-Einträgen
Java:
		ProcessBuilder pb1= new ProcessBuilder("reg", "query", "\"HKEY_Current_User\\Control Panel\\Current\"", "/v", "Color Schemes");
		Process p1=pb1.start();
		Scanner sc1= new Scanner(p1.getInputStream());
		sc1.useDelimiter("   \\w+[\\w\\s]+\\w+\\s+");
		sc1.next();
		System.out.println(sc1.next());
		
		ProcessBuilder pb2= new ProcessBuilder("reg", "query", "\"HKEY_Current_User\\Printers\\Settings\\Wizard\"", "/v", "Driver Name");
		Process p2= pb2.start();
		Scanner sc2= new Scanner(p2.getInputStream());
		sc2.useDelimiter("   \\w+\\w+\\w+\\w+\\s+");
		sc2.next();
		System.out.println(sc2.next());
 
Ich benötige ein KSKB. Das hier ist abhängig von der Registry. Gib doch einfach 1:1 den Inhalt von [c].getInputStream().readLine()[/c]. Dann kann man das ProcessBuilder-unabhängig testen.
 
Nein, ich will einfach wissen wie die Outputs der beiden Processes aussehen. Ich z.B. habe kein Win und hab deshalb kein [c]reg[/c].

Edit: Dein Code ist zwar im weitesten Sinn ein KSKB, aber es hat eben die Abhängigkeit von [c]reg[/c]. Ein KSKB soll überhaupt keine Abhängigkeiten haben.
 

Neue Themen


Zurück
Oben