Was genau meinst du mit "Seriennummer des PC"? Da kann ich mir irgendwie wenig drunter vorstellen.
Meinst du die Seriennummer der Windowsinstallation?
Du könntest es per Runtime#exec selbst aufrufen und über den Stream auslesen.
public static void main(String[] args) throws IOException {
// create Process
Process proc = new ProcessBuilder("Systeminfo").start();
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
// read inputstream
String line;
while ((line = in.readLine()) != null) {
if (line.startsWith("Produktkennung:")) {
System.out.println(line);
}
}
proc.getErrorStream().close();
proc.getOutputStream().close();
in.close();
}
statt der Runtime#exec() würde ich dann lieber den ProcessBuilder nutzen.
Das würd dann ungefähr so aussehen:
Java:public static void main(String[] args) throws IOException { // create Process Process proc = new ProcessBuilder("Systeminfo").start(); BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream())); // read inputstream String line; while ((line = in.readLine()) != null) { if (line.startsWith("Produktkennung:")) { System.out.println(line); } } proc.getErrorStream().close(); proc.getOutputStream().close(); in.close(); }
Mein Programm ruft einfach nur Systeminfo auf und liest die Ausgabe, mehr nicht.Ich verstehe nicht wie dein Programm die richtige Infos bekommt und woher? Es kann zwar Daten einlesen und ausgeben...
Aber Danke auch dir fuer Hilfe, ich versuche es spaeter.
private void getHardwareData()
{
try
{
// ###########################################################################
// Auslesen der MAC-Adresse
// ###########################################################################
ProcessBuilder pb = new ProcessBuilder( "ipconfig", "/all" );
pb.redirectErrorStream( true );
Process proc1 = pb.start();
proc1.getOutputStream().close();
BufferedReader r = new BufferedReader( new InputStreamReader(proc1.getInputStream()) );
String strLine = "";
String strMACAdr = "";
while( (strLine = r.readLine()) != null )
{
if( strLine.trim().startsWith("Physikalische Adresse") )
{
strMACAdr = strLine.trim().substring( 36 );
if( strMACAdr != "" )
{
setMACWin( strMACAdr );
}
else
{
setMACWin( "00-00-00-00-00-00" );
}
break;
}
}
System.out.println( "MAC-Adresse: <" + strMACAdr + ">");
// ###########################################################################
// Auslesen der Windows-ProductID
// ###########################################################################
Regor reg = new Regor();
Key keyValue = reg.openKey( Regor.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", Regor.KEY_READ );
String strProductID = reg.readValueAsString( keyValue, "ProductID" );
setWindowsProdID( strProductID );
System.out.println( "Product-ID: <" + strProductID + ">" );
// ###########################################################################
// Auslesen der Volume-ID
// ###########################################################################
Process proc2 = Runtime.getRuntime().exec( "cmd /C dir" );
InputStreamReader input = new InputStreamReader( proc2.getInputStream() );
BufferedReader in = new BufferedReader( input );
String line = "";
int count = 0;
while( (line=in.readLine()) != null )
{
count++;
if( count < 2 )
{
continue;
}
if( count > 2 )
{
break;
}
String strVolID = line.substring( line.lastIndexOf(' ') + 1 );
setVolID( strVolID );
System.out.println( "Volume-ID: <" + strVolID + ">" );
}
}
catch( Exception ex )
{
ex.printStackTrace();
}
} // getHardwareData
Moin,
also ich lese verschiedene Hardwaredaten wie folgt aus - vlt. hilft das ja weiter :
Java:private void getHardwareData() { try { // ########################################################################### // Auslesen der MAC-Adresse // ########################################################################### ProcessBuilder pb = new ProcessBuilder( "ipconfig", "/all" ); pb.redirectErrorStream( true ); Process proc1 = pb.start(); proc1.getOutputStream().close(); BufferedReader r = new BufferedReader( new InputStreamReader(proc1.getInputStream()) ); String strLine = ""; String strMACAdr = ""; while( (strLine = r.readLine()) != null ) { if( strLine.trim().startsWith("Physikalische Adresse") ) { strMACAdr = strLine.trim().substring( 36 ); if( strMACAdr != "" ) { setMACWin( strMACAdr ); } else { setMACWin( "00-00-00-00-00-00" ); } break; } } System.out.println( "MAC-Adresse: <" + strMACAdr + ">"); // ########################################################################### // Auslesen der Windows-ProductID // ########################################################################### Regor reg = new Regor(); Key keyValue = reg.openKey( Regor.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", Regor.KEY_READ ); String strProductID = reg.readValueAsString( keyValue, "ProductID" ); setWindowsProdID( strProductID ); System.out.println( "Product-ID: <" + strProductID + ">" ); // ########################################################################### // Auslesen der Volume-ID // ########################################################################### Process proc2 = Runtime.getRuntime().exec( "cmd /C dir" ); InputStreamReader input = new InputStreamReader( proc2.getInputStream() ); BufferedReader in = new BufferedReader( input ); String line = ""; int count = 0; while( (line=in.readLine()) != null ) { count++; if( count < 2 ) { continue; } if( count > 2 ) { break; } String strVolID = line.substring( line.lastIndexOf(' ') + 1 ); setVolID( strVolID ); System.out.println( "Volume-ID: <" + strVolID + ">" ); } } catch( Exception ex ) { ex.printStackTrace(); } } // getHardwareData
gruß
Klaus
setMACWin( strMACAdr );
Regor reg = new Regor();
Key keyValue = reg.openKey( Regor.HKEY_LOCAL_MACHINE,
ID eigentlich, Nummer mit der jeder PC sich vom anderen identifiziert, oder die Seriennummer der Windowsinstallation
Wenn du in Eingabeaufforderung Systeminfo eintipps bekommst du z.B. die "Product ID: 89577-OEM-723208-00015", nehme an das es von Windows ist und nicht vom Rechner, aber egal, geht auch fuer mein Vorhaben. Ich will halt das Java das ausliest und nicht Eingabeaufforderung.
leider kommt es zur Fehlermeldung beim Ausfuehren weil diese Sachen kennt Eclipse nicht:
Java:setMACWin( strMACAdr ); Regor reg = new Regor(); Key keyValue = reg.openKey( Regor.HKEY_LOCAL_MACHINE,
java.lang.NullPointerException
at jta.Regor.readValue(Regor.java:981)
at jta.Regor.readValueAsString(Regor.java:963)
at jta.Test.getHardwareData(Test.java:47)
at jta.Test.main(Test.java:85)
setMACWin( strMACAdr );
Aha - und wir dürfen jetzt raten, wie Dein zugehöriger Quellcode ausschaut ???:LIch habe jetzt versucht mit Klasse Regor, aber dies war seine Antwort.
Java:java.lang.NullPointerException at jta.Regor.readValue(Regor.java:981) at jta.Regor.readValueAsString(Regor.java:963) at jta.Test.getHardwareData(Test.java:47) at jta.Test.main(Test.java:85)
Natürlich nichtdie Mac-Adresse in Methode getHardwareData() habe ich ausgeklammert, weil dort kennt die Eclipse immer noch nicht
Java:setMACWin( strMACAdr );
Häää ???:LAuf Regit habe ich verzichtet, geht auch ohne mit ca. 30 Zeilen Quellcode:toll:
ich sehe sowas eher kritisch ;-) steht auf sehr wakligen beinen....if( strLine.trim().startsWith("Physikalische Adresse") )
ich sehe sowas eher kritisch ;-) steht auf sehr wakligen beinen....
Weil eine andersprachige Windowsinstallation da ein Problem darstellen würdeMoin,
Aha ... :noe: und warum ???:L
Verrätst Du das auch ?