title image


Smiley Re: Eintrag aus der Registry auslesen
Die kurze Antwort: Es geht, aber nicht schön, sondern nur den dirty-way. Ich habe mal ein Programm geschrieben, dass den Pfad vom Internet Explorer ausließt. Das kannst du sicher für deine Bedürfnisse anpassen. Aber überprüfe bitte vorher, ob sich dein Problem nicht auch mit dem FileProtocolHandler lösen lässt. - Nicht, dass du dich später ägerst... Hier der Codeschnipsel (Über einen FileChooser wird eine beliebige Datei gewählt, die dann automatisch mit der assozierten Anwendung geöffnet wird):



String dateiname = null;



JFileChooser chooser = new JFileChooser();

chooser.setCurrentDirectory( new File("."));

int returnVal = chooser.showOpenDialog(this);

if(returnVal == JFileChooser.APPROVE_OPTION) {

dateiname = chooser.getSelectedFile().getAbsoluteFile().toString();

}



Process p = Runtime.getRuntime().exec( "rundll32 url.dll,FileProtocolHandler "+dateiname );



Jetzt zu deinem eingetlichen Anliegen, aber wie gesagt der dirty-way. Hier wird über eine temporäre reg-Datei der Pfad zum Internet Explorer ermittelt.



import java.io.*;

import java.util.StringTokenizer;



public class Sesam {



public Sesam() {

}



public static void main(String[] args) {



// Der Registry-Pfad als String

String regPath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\Applications\\iexplore.exe\\shell\\open\\command";

// Das Verzeichnis für die temporäre reg-Datei

String regFile = System.getProperty("java.io.tmpdir")+"~regpart.reg";



FileInputStream in = null;

DataInputStream dis = null;

String output = "";

int b = 0;



try {

// Der angegebene Schlüssel wird mit Hilfe der regedit in eine reg-Datei im Temp-Verzeichnis exportiert

Process p = Runtime.getRuntime().exec( "regedit /e "+regFile+" "+regPath );

// warten bis der Export fertig ist

p.waitFor();



// Anschließend wird die Datei in einen String eingelesen

// Der DataInputStream bekommt seine Daten aus dem FileInputStream

in = new FileInputStream( regFile );

dis = new DataInputStream(in);



// Solange nocht Daten im FileInputStream sind,

// wird die Schleife ausgeführt

while (in.available()!=0) {

b = dis.readByte();

if (b>0) {

output += (char) b;

}



}



// Der StringTokenizer sucht den Pfad zu dem Programm aus dem String

StringTokenizer tokenizer = new StringTokenizer( output, "\"" );

String s = "";



while ( tokenizer.hasMoreTokens() ) {

s = tokenizer.nextToken();

if(s.indexOf("\\\\")>0) {

break;

}

}



// Der hinterste Slash wird aus dem Pfad entfernt, da das Programm sonst nicht startet

s = s.substring(0, s.length()-1);

// Der Pfad bzw. das Programm wird ausgeführt

Runtime.getRuntime().exec(s);



} catch (Exception e) {

e.printStackTrace();

} finally {

try {

// Zu guter letzt noch etwas cleanup

// die Streams schließen

dis.close();

in.close();

// die reg-Datei löschen

Runtime.getRuntime().exec( "cmd /c del "+regFile );

} catch (Exception e) {}

}

}

}




geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: