Obtenir UUID avec JAVA

Résolu/Fermé
Deeper70 Messages postés 16 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 23 décembre 2008 - 27 nov. 2008 à 15:06
Deeper70 Messages postés 16 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 23 décembre 2008 - 27 nov. 2008 à 18:22
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
A voir également:

3 réponses

gigaga Messages postés 2346 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 22 août 2014 301
27 nov. 2008 à 15:20
En java directement, c pas possible. Il faut interfacer Java avec des outils externes (commande shell par exemple)
1
Deeper70 Messages postés 16 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 23 décembre 2008 15
27 nov. 2008 à 16:06
Le problème est comment le récupérer si on marche sous win ( sous linux pas de problème )
0
gigaga Messages postés 2346 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 22 août 2014 301
27 nov. 2008 à 17:26
En fait, tu peux avec JNI. Il y a un point d'entrée dans kernel32
0
gigaga Messages postés 2346 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 22 août 2014 301
27 nov. 2008 à 17:38
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
Deeper70 Messages postés 16 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 23 décembre 2008 15 > gigaga Messages postés 2346 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 22 août 2014
27 nov. 2008 à 18:22
Que dire de plus, a part MERCI , je vais tester ce code et je vous tiens informé
0