Lire les clés registre sous Windows [Java]

Résolu
sarahjtm Messages postés 29 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 15 janvier 2012 - 5 janv. 2010 à 18:49
sarahjtm Messages postés 29 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 15 janvier 2012 - 6 janv. 2010 à 15:46
Bonjour,
et désolé pour le double post :(
Mon logiciel nécéssite le répertoire d'installation de Steam.exe, en effet il y a un clé registre qui indique le répertoire d'installation de Steam.
J'aimerai donc savoir comment lire cette clé (dont la valeur est par exemple : D:\Steam\Steam.exe)
pour l'intégrer dans mon code source afin de trouver SYSTEMATIQUEMENT le fichier Steam.exe dans n'importe quel ordinateur (si il est installé bien sûr :) ).
Si j'ai bien compris c'est une question API ou un truc du genre :).
Voilà donc en rentrant Reg query "HKEY_CLASSES_ROOT\steam\Shell\Open\Command" dans mon invite de commande,
j'obtiens ceci :
HKEY_CLASSES_ROOT\steam\Shell\Open\Command
REG_SZ "D:\Steam\steam.exe" "%1"

Ce qui m'interesse c'est le "D:\Steam\steam.exe (le repertoire d'installation de Steam).
et peux tu me donner un moyen d'intégrer juste "D:\Steam\steam.exe" dans mon programme Java, de façon à trouver systematiquement l'emplacement du répertoire d'installation de Steam
Cordialement,
Merci par avance :)
SoGeek.

4 réponses

cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
6 janv. 2010 à 10:12
Re,

/ve à la fin de ta commande pour demander la clé par défaut.

Ensuite il faut te baser sur le mot-clé REG_SZ qui est le type de valeur.
Tu prends simplement ce qui suit. En java tu as les méthode indexOf(String) et substring(int) qui vont t'aider à faire ça.

Sinon tu peux aussi tirer profiter du fait que le chemin se termine par \steam.exe pour le localiser dans le résultat.
3
sarahjtm Messages postés 29 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 15 janvier 2012 4
6 janv. 2010 à 12:38
Bonjour Jojolemariole en effet je maitrise bien indexOf et Substring, mais je n'arrive pas à executer
Reg query "HKEY_CLASSES_ROOT\steam\Shell\Open\Command"

en Java, du coup je ne trouve aucun resultat

j'ai essayé

import java.io.IOException;

public class TestReg {
{ Runtime r = Runtime.getRuntime();
try {
Process p = r.getRuntime().exec("Reg query HKEY_CLASSES_ROOT\steam\Shell\Open\Command /ve");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

Donc comment faire pour executer des commandes DOS, mais en Java :)?
Cordialement,
(et je sais que je suis lourd, mais merci d'avance.)
SoGeek.
3
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
6 janv. 2010 à 14:09
Sur ce même site il y a un code source dont je t'ai donné le lien, l'as-tu essayé?

import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;

public class RegPathAdobe {

private static final String REGQUERY_UTIL = "reg query ";

private static final String REGSTR_TOKEN = "REG_SZ";

// quand on connait la valeur de la clé
// private static final String ADOBE_NAME_CMD = REGQUERY_UTIL +
// ""HKLM\\Software\\Adobe\\Acrobat Reader\\7.0\\Installer" /v Path";

// dans le cas contraire
private static final String ADOBE_NAME_CMD = REGQUERY_UTIL
+ ""HKLM\\Software\\Adobe\\Acrobat Reader\\7.0\\InstallPath"";

public static String getAdobePath() {
try {
Process process = Runtime.getRuntime().exec(ADOBE_NAME_CMD);
StreamReader reader = new StreamReader(process.getInputStream());

reader.start();
process.waitFor();
reader.join();

String result = reader.getResult();

int p = result.indexOf(REGSTR_TOKEN);

if (p == -1) {
return null;
}

return result.substring(p + REGSTR_TOKEN.length()).trim();
} catch (Exception e) {
return null;
}
}

//parser du résultat
static class StreamReader extends Thread {
private InputStream is;

private StringWriter sw;

StreamReader(InputStream is) {
this.is = is;
sw = new StringWriter();
}

public void run() {
try {
int c;
while ((c = is.read()) != -1)
sw.write(c);
} catch (IOException e) {
;
}
}

String getResult() {
return sw.toString();
}
}

public static void main(String s[]) {
System.out.println(getAdobePath());
}

}
3
sarahjtm Messages postés 29 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 15 janvier 2012 4
6 janv. 2010 à 15:46
Ouais j'ai essayé mais je ne vois pas ce qu'il faut que je copie dans mon code source et ce qu'il faut que je modifie sur le code source du lien (la racine du fichier du registre certainement ^^)
3
Rejoignez-nous