Obtenir UUID avec JAVA
Résolu
Deeper70
Messages postés
16
Date d'inscription
Statut
Membre
Dernière intervention
-
Deeper70 Messages postés 16 Date d'inscription Statut Membre Dernière intervention -
Deeper70 Messages postés 16 Date d'inscription Statut Membre Dernière intervention -
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
A voir également:
- Obtenir UUID avec JAVA
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
3 réponses
En java directement, c pas possible. Il faut interfacer Java avec des outils externes (commande shell par exemple)
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();
}
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();
}