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
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
A voir également:
- Obtenir UUID avec JAVA
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Java décompiler - Télécharger - Langages
- Jeux java itel touche - Forum Mobile
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
27 nov. 2008 à 15:20
En java directement, c pas possible. Il faut interfacer Java avec des outils externes (commande shell par exemple)
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
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 )
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
27 nov. 2008 à 17:26
En fait, tu peux avec JNI. Il y a un point d'entrée dans kernel32
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
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();
}
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();
}
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
27 nov. 2008 à 18:22
Que dire de plus, a part MERCI , je vais tester ce code et je vous tiens informé