Obtenir UUID avec JAVA

Résolu
Deeper70 Messages postés 16 Statut Membre -  
Deeper70 Messages postés 16 Statut Membre -
Bonjour,
Bonjour,

Je sollicite votre aide afin de récupérer l'UUID de mon disque dur depuis un programme JAVA. Je ne désire pas le générer mais le lire.

Merci de votre aide
Configuration: Linux
Firefox 2.0.0.12

3 réponses

  1. gigaga Messages postés 2347 Date d'inscription   Statut Membre Dernière intervention   301
     
    En java directement, c pas possible. Il faut interfacer Java avec des outils externes (commande shell par exemple)
    1
  2. Deeper70 Messages postés 16 Statut Membre 15
     
    Le problème est comment le récupérer si on marche sous win ( sous linux pas de problème )
    0
  3. gigaga Messages postés 2347 Date d'inscription   Statut Membre Dernière intervention   301
     
    En fait, tu peux avec JNI. Il y a un point d'entrée dans kernel32
    0
    1. gigaga Messages postés 2347 Date d'inscription   Statut Membre Dernière intervention   301
       
      Je t'ai pondu le code... (Il s'agit ici d'obtenir le numéro de série du disque logique).
      2 fichiers : JNI.java et Kernel32.java
      Tu dois avoir la librairie jna.jar dans ton classpath

      JNI.java :

      import java.nio.CharBuffer;

      import com.sun.jna.Native;
      import com.sun.jna.ptr.LongByReference;


      public class JNI {

      public static void main(String[] args){
      Kernel32 lib = (Kernel32) Native.loadLibrary ("kernel32",
      Kernel32.class);

      // Lettre du lecteur dont on veut obtenir le serial
      char driveName='C';

      // Initialisation des variables de GetVolumeInformationW
      char[] lpRootPathName_chars = new char[4];

      lpRootPathName_chars[0] = driveName;
      lpRootPathName_chars[1] = ':';
      lpRootPathName_chars[2] = '\\';
      lpRootPathName_chars[3] = '\0';

      int nVolumeNameSize = 256;

      CharBuffer lpVolumeNameBuffer_char = CharBuffer.allocate(nVolumeNameSize);
      LongByReference lpVolumeSerialNumber = new LongByReference();
      LongByReference lpMaximumComponentLength = new LongByReference();
      LongByReference lpFileSystemFlags = new LongByReference();
      int nFileSystemNameSize = 256;

      CharBuffer lpFileSystemNameBuffer_char = CharBuffer.allocate(nFileSystemNameSize);


      // Exécution du point d'entrée
      boolean result2 = lib.GetVolumeInformationW(
      lpRootPathName_chars,
      lpVolumeNameBuffer_char,
      nVolumeNameSize,
      lpVolumeSerialNumber,
      lpMaximumComponentLength,
      lpFileSystemFlags,
      lpFileSystemNameBuffer_char,
      nFileSystemNameSize);

      if (!result2) {
      int err = lib.GetLastError();
      throw new RuntimeException("W32Api call to GetVolumeInformationW returned err code " + err);
      }
      System.out.println("Numéro de série de "+driveName+" est "+lpVolumeSerialNumber.getValue());
      }

      static {
      System.loadLibrary("kernel32");
      }
      }


      Kernel32.java :

      import java.nio.CharBuffer;

      import com.sun.jna.ptr.LongByReference;
      import com.sun.jna.win32.StdCallLibrary;

      public interface Kernel32 extends StdCallLibrary
      {

      boolean GetVolumeInformationW(
      char[] lpRootPathName,
      CharBuffer lpVolumeNameBuffer,
      int nVolumeNameSize,
      LongByReference lpVolumeSerialNumber,
      LongByReference lpMaximumComponentLength,
      LongByReference lpFileSystemFlags,
      CharBuffer lpFileSystemNameBuffer,
      int nFileSystemNameSize
      );

      int GetLastError();

      }
      0
      1. Deeper70 Messages postés 16 Statut Membre 15 > gigaga Messages postés 2347 Date d'inscription   Statut Membre Dernière intervention  
         
        Que dire de plus, a part MERCI , je vais tester ce code et je vous tiens informé
        0