suite à la demande de mmsalem dans ce post j'ai essayé par l'intermediaire de la JWApi d'obtenir ce fameux n° de serie fournisseur mais je bloque un peu
voici une partie du code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, Cfg, CfgMgr32, JwaWinBase, JwaWinIoCtl, SetupApi ; const IOCTL_DISK_BASE = FILE_DEVICE_DISK; MANUFACTUREID_INVALID = $01; SERIALNUM_INVALID=$02; type PSTORAGE_IDENTIFICATION = ^STORAGE_IDENTIFICATION; _STORAGE_IDENTIFICATION = record dwSize: DWORD; dwFlags : DWORD; dwManufactureIDOffset : DWORD ; dwSerialNumOffset : DWORD ; end; STORAGE_IDENTIFICATION = _STORAGE_IDENTIFICATION; TStorageID = STORAGE_IDENTIFICATION; PStorageID = PSTORAGE_IDENTIFICATION;le problème se situe certainement dans le définition de IOCTL_DISK_GET_STORAGEID je ne suis pas sur du tout de la valeur $00000709
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 procedure TForm1.GetStorageId(Drive : String); var CheminVolume : String; Hdrive : THandle; Status : Boolean ; IOCTL_DISK_GET_STORAGEID : DWord; si : STORAGE_IDENTIFICATION; dw : Cardinal; begin IOCTL_DISK_GET_STORAGEID:=CTL_CODE(IOCTL_DISK_BASE, $00000709 ,METHOD_BUFFERED, FILE_ANY_ACCESS); CheminVolume:='\\.\'+Drive; hDrive:=CreateFile(Pchar(CheminVolume), 0, FILE_SHARE_READ OR FILE_SHARE_WRITE, Nil, OPEN_EXISTING, 0, 0); if Hdrive=INVALID_HANDLE_VALUE then begin DisplaySystemError; exit; end; Status := DeviceIoControl(hDrive,IOCTL_DISK_GET_STORAGEID,Nil,0,@si,SizeOf(si),@dw, Nil); if not Status then DisplaySystemError else begin ShowMessage(format('Disque id %d-%d',[si.dwManufactureIDOffset,si.dwSerialNumOffset])); end; CloseHandle(Hdrive); end;
en tout cas lorsque je test sous Vista
pour un HD j'ai l'erreur "fonction incorrecte"
pour une clé USB (hè oui je continu) "Cette demande n'est pas prise en charge" mais là c'est peut être logique
Bref, Quelqu'un aurait-il une idée de la valeur à mettre, j'ai piqué celle-ci dans un source C mais pour un Palm qqChose![]()
Partager