Como ler o registro do windows sem usar Preferences?

4 respostas
Darth_Vader

E aí pessoal, blz?!!!

Eu dei uma pesquisada antes de postar esta dúvida e o pessoal aconselha muito a usar Preferences quando se deseja ler informações do registro do Windows.

Só que Preferences não é suportada pela MVM ( Microsoft Virtual Machine ) que é a 1.1 e meu código tem que ser feito para rodar nesta VM.

Tentei o código abaixo mas não está funcionando.

private static final String REGQUERY_UTIL = "reg query ";
private static final String REGSTR_TOKEN = "REG_SZ";
private static final String HK_PC = REGQUERY_UTIL +
"\"HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0\" /v ProcessorNameString";

try{
String m_sDialer;
Process proc = Runtime.getRuntime().exec(HK_PC);
InputStream is = proc.getInputStream();
StringWriter sw = new StringWriter();
		    
int iRet;
while ((iRet = is.read()) != -1){sw.write(iRet);}
		    
iRet = sw.toString().indexOf(REGSTR_TOKEN);
if (iRet == -1) m_sDialer = null;
else m_sDialer = sw.toString().substring(iRet + REGSTR_TOKEN.length()).trim();
			
}
catch(IOException e){
System.out.println(e.getMessage());
System.out.println(e.toString());
}

Será que a sintaxe está errada do comando? Tá dando erro=2 na linha com Runtime.getRuntime().exec(HK_PC);

4 Respostas

Daniel_Quirino_Olive

Altere o valor da constante HK_PC para

private static final String HK_PC = "cmd /c "+REGQUERY_UTIL + "\"HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0\" /v ProcessorNameString";

Darth_Vader

Grande Daniel…obrigado pela ajuda!

Mas apesar de nenhum erro agora ter ocorrido o valor da chave não é retornado. E veja que esta chave existe.
Na instrução is.read() tá retornando -1 o q significa que chegou-se ao final do stream sem retornar nenhum byte.

Vc sabe pq não conseguiu ler a chave agora ?

Valeu !!!

T

Se você não se incomoda em ter duas versões diferentes do mesmo programa (uma para Microsoft e outra para Sun), e topa usar aquele compilador esquisito da Microsoft (o jvc ou o Visual J++), você pode usar as classes com.ms.wfc.app.Registry e com.ms.wfc.app.RegistryKey. Obviamente isso só vai funcionar com a MSJVM, e se for um applet, com applets assinados no esquema Microsoft (.CAB).
Exemplo:
RegistryKey theKey = Registry.LOCAL_MACHINE.getSubKey (“HARDWARE\DESCRIPTION\System\CentralProcessor\0”);

Darth_Vader

Valeu thingol, mas não pode usar o M$. Estou usando o Eclipse 3.0.

Valeu!

Criado 2 de agosto de 2005
Ultima resposta 3 de ago. de 2005
Respostas 4
Participantes 3