Obtenir UUID avec JAVA
Résolu
Deeper70
Messages postés
16
Statut
Membre
-
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
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
-
En java directement, c pas possible. Il faut interfacer Java avec des outils externes (commande shell par exemple)
-
Le problème est comment le récupérer si on marche sous win ( sous linux pas de problème )
-
En fait, tu peux avec JNI. Il y a un point d'entrée dans kernel32
-
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();
}
-