Форум: "WinAPI";
Текущий архив: 2012.01.08;
Скачать: [xml.tar.bz2];
Внизсерийный номер диска Найти похожие ветки
← →
defen © (2009-09-15 07:31) [0]Доброго времени суток. Помогите пожалуйста, необходимо программно получить серийный номер носителя (VolumeSerialNumber) не подходит. Нужен тот, который зашили производители. Сам не нашел. Может кто что-нибудь полезное подскажет?
← →
MBo © (2009-09-15 08:41) [1]http://home.earthlink.net/~akonshin/delphi_ru.htm
← →
defen © (2009-09-16 08:04) [2]Спасибо, но меня по большей части интересует USB подключение...
← →
Дмитрий (2009-09-16 09:34) [3]Чего подключаем ? Если USB Flash, то код экземпляра устройства (например USBSTOR\DISK&VEN_KINGSTON&PROD_DATATRAVELER_2.0&REV_1.00\81100000000000000000001 E&0
) содержит в себе серийный номер (81100000000000000000001E). Только советую сначала проверить, отличается ли серийный номер разных флешек из одной партии. А то китайцы - народ своеобразный...
← →
GanibalLector © (2009-09-16 21:52) [4]
2 MBo © (15.09.09 08:41) [1]
> http://home.earthlink.net/~akonshin/delphi_ru.htm
Кстати, он в Viste не работает. Судя по всему и в Win7 тоже
← →
defen © (2009-09-17 02:06) [5]В общем программа должна блокировать USB носители, если она не находит в базе, на удаленном сервере, знакомый ей ID. Как связать её с серваком проблем нет, а вот вытащить серийник для меня сложность. Вытащил недавно код:
function GetFlashDrivesCountA: Integer;
var
reg: TRegistry;
devices: TStringList;
i: integer;
usbRegKey:string;
begin
usbRegKey:="\SYSTEM\CurrentControlSet\Enum\";
Result:=0;
reg := TRegistry.Create;
devices := TStringList.Create;
try
reg.RootKey := HKEY_LOCAL_MACHINE;
if reg.OpenKey(usbRegKey, false) then
begin
reg.GetKeyNames(devices);
for i:=0 to devices.Count-1 do
if ExtractWord(2, devices[i], ["#","&"]) = "USBSTOR" then
begin
if reg.OpenKey(usbRegKey+"\"+devices[i]+"\#\Control",false) then
try
if reg.ReadInteger("Linked")=1 then
inc(Result);
except end;
end;
end
finally
reg.free;
devices.free;
end;
end;
function GetFlashDriveSN(num: integer): shortstring;
var
reg: TRegistry;
devices: TStringList;
i, j: integer;
begin
Result:="";
j:=0;
reg := TRegistry.Create;
devices := TStringList.Create;
try
reg.RootKey := HKEY_LOCAL_MACHINE;
if reg.OpenKey(usbRegKey, false) then
begin
reg.GetKeyNames(devices);
for i:=0 to devices.Count-1 do
if ExtractWord(2, devices[i], ["#","&"]) = "USBSTOR" then
begin
if reg.OpenKey(usbRegKey+"\"+devices[i]+"\#\Control",false) then
try
if reg.ReadInteger("Linked")=1 then
begin
inc(j);
if j=num then
begin
result := ExtractWord(7, devices[i], ["#","&"]);
break;
end;
end;
except end;
end;
end
finally
reg.free;
devices.free;
end;
end;
function ExistsFlashWithSerialA(serial: shortstring): boolean;
var
reg: TRegistry;
devices: TStringList;
i: integer;
begin
Result:= false;
reg := TRegistry.Create;
devices := TStringList.Create;
try
reg.RootKey := HKEY_LOCAL_MACHINE;
if reg.OpenKey(usbRegKey, false) then
begin
reg.GetKeyNames(devices);
for i:=0 to devices.Count-1 do
if ExtractWord(2, devices[i], ["#","&"]) = "USBSTOR" then
begin
if reg.OpenKey(usbRegKey+"\"+devices[i]+"\#\Control",false) then
try
if reg.ReadInteger("Linked")=1 then
if Trim(ExtractWord(7, devices[i], ["#","&"])) = trim(serial) then
begin
Result := True;
break;
end
except end;
end;
end
finally
reg.free;
devices.free;
end;
end;
В результате возникли проблемы c "ExtractWord" пишет Undeclared identifier: "ExtractWord"
Я так понимаю не хватает функции в Uses... Почитал в инете - не понял что к чему....
← →
Дмитрий (2009-09-17 10:12) [6]Почитай статью "Работа с устройствами в Windows" http://pblog.ru/?p=105 там есть исходник примера. Долго "причесывать" свой выдранный из проекта код, вкратце - есть куча функций библиотек cfgmgr32.dll и setupapi.dll. И продумай способ, как будешь реализовывать - статически, перебирая все USB-устройства и далее CM_Get_Device_IDA или динамичеки через RegisterDeviceNotification и фильтруя DBT_DEVICEARRIVAL. Кстати, подключение накопителя на уровне системы таким способом не отловить, для этого нужно писать собственный драйвер.
← →
trix (2009-09-23 18:27) [7]
function hddser:string;
var
SerialNum : dword;
a, b : dword;
Buffer : array [0..255] of char;
begin
if GetVolumeInformation(pchar("c:\"), Buffer, SizeOf(Buffer), @SerialNum, a, b, nil, 0) then
result := IntToStr(SerialNum);
end;
← →
TIF © (2009-09-23 22:37) [8]> GetVolumeInformation
Речь про серийный номер ДИСКА (винчестера), а не ТОМА ;-)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2012.01.08;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c