Seriennummer

bandy

Bekanntes Mitglied
Hallo,

ist jemandem bekannt wie man die Seriennummer des PC mit JAVA ausliesst????:shock::bahnhof:

In Eingabeaufforderung bekommt dies mit dem Befehl
Code:
Systeminfo
es erscheint dann unter :"Product ID:" soviel ich weiss.
 
Zuletzt bearbeitet:
G

Gast2

Gast
Was genau meinst du mit "Seriennummer des PC"? Da kann ich mir irgendwie wenig drunter vorstellen.
Meinst du die Seriennummer der Windowsinstallation?
 

bandy

Bekanntes Mitglied
Was genau meinst du mit "Seriennummer des PC"? Da kann ich mir irgendwie wenig drunter vorstellen.
Meinst du die Seriennummer der Windowsinstallation?

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.
 

bandy

Bekanntes Mitglied
Du könntest es per Runtime#exec selbst aufrufen und über den Stream auslesen.

Ich kann dir ganz schlecht folgen, kannst bitte einen Beispiel machen, das Grundprinzip deiner Idee eroertern?:bahnhof: Denn so kommen wir nicht weiter, viel zu kurz dein Ansatz, fuer die die genau wissen wie es geht, werden dich wohl verstehen, aber Anfaenger, fuer die dieser Bereich gedacht ist wohl nicht?!???:L
 
G

Gast2

Gast
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();
    }
 

bandy

Bekanntes Mitglied
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();
    }

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.
 

VfL_Freak

Top Contributor
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
 

bandy

Bekanntes Mitglied
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

Hallo Klaus,

von der Idee her haut es schon hin was du gepostet hast, 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,

Wenn du das noch erklaeren koentest etc. waere schoen:)
 

AmunRa

Gesperrter Benutzer
Regor ist ein Framework das ein Mitglied hier im Forum erstellt hat um die Windows registry zu lesen und verändern. kannst ja mal in der ForumSuche Regor eingeben ich glaube da müsstest du es finden
 

Shulyn

Bekanntes Mitglied
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.


Das ist doch eher der Lizenz Key (Lizenz Nummer).
Der Windows PC unterscheidet sich doch eher über die SID oder bin ich da falsch?
 

VfL_Freak

Top Contributor
Moin,
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,

schon klar ...
"setMACWin" ist eine Funktion, mit der ich hier die MAC-Adresse weiterverarbeite, brauchst Du also so nicht !!
Regor und reg.openKey wurde ja schon erklärt ... habe ich auch hier im Forum über sie Suche gefunden !

BTW: die "Product ID: 89577-OEM-723208-00015" heißt offiziell "Windows-ProductID" und ist in der Tat die Lizenznummer !!

Gruß
Klaus
 
Zuletzt bearbeitet:

bandy

Bekanntes Mitglied
Ich 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)
:D


und die Mac-Adresse in Methode getHardwareData() habe ich ausgeklammert, weil dort kennt die Eclipse immer noch nicht
Java:
 setMACWin( strMACAdr );



Aenderung:

Auf Regit habe ich verzichtet, geht auch ohne mit ca. 30 Zeilen Quellcode:toll:
 
Zuletzt bearbeitet:

VfL_Freak

Top Contributor
Moin,

Ich 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)
Aha - und wir dürfen jetzt raten, wie Dein zugehöriger Quellcode ausschaut ???:L
Gibt's dann auch was zu gewinnen ???:L :D


die Mac-Adresse in Methode getHardwareData() habe ich ausgeklammert, weil dort kennt die Eclipse immer noch nicht
Java:
 setMACWin( strMACAdr );
Natürlich nicht :eek:
Denn wie ich schon schrieb, ist das meine Methode, mit der ich die MAC-Adresse weiterverarbeite !! Die müsstet Du schon selbst schreiben:D
Du brauchst sie aber wie gesagt auch nicht - Du musst dann dort halt das machen, was Du mit der MAC-Adresse machen willst ;)

Auf Regit habe ich verzichtet, geht auch ohne mit ca. 30 Zeilen Quellcode:toll:
Häää ???:L

Gruß
Klaus
 

VfL_Freak

Top Contributor
Moin,

ok, so gesehen ... ;)

Aber dieser Konjunktiv trifft bei uns nicht zu, da es sich 'nur' um hausinterne Software handelt :hihi:

Gruß
Klaus
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...

Oben