![]() |
|
دالة التعرف على رقم التلسلي الفزيائي القرص الصلب - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي التقنية (https://delphi4arab.net/forum/forumdisplay.php?fid=6) +--- قسم : دلفي والتعامل مع النظام و الذاكرة (https://delphi4arab.net/forum/forumdisplay.php?fid=20) +--- الموضوع : دالة التعرف على رقم التلسلي الفزيائي القرص الصلب (/showthread.php?tid=7781) |
دالة التعرف على رقم التلسلي الفزيائي القرص الصلب - أبو معاذ - 01-05-2016 السلام عليكم ورحمة الله وبركاته ، منذ مدة و أنا أبحث عن دالة استخراج رقم القرص الصلب ، دون استعمال مكون خارجي ، وجدت على الكود ، عبارة عن برنامج : Console Application ولكن يمكن تطويره . جربته عندي في نظام الويندوز 7 64 بت ، تمت العملية بنجاح . أضعه هنا بين يدي إخواني ، و أرجو من الإخوة تجربته على جميع الأنظمة و أنواع القرص الصلب ، و إفادتنا بالنتيجة. كود : program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
ActiveX,
ComObj,
Variants;
var MonSerie1 , MonSerie : string ;
function GetDiskSerial(const Drive:AnsiChar):string;
var
FSWbemLocator : OLEVariant;
objWMIService : OLEVariant;
colDiskDrives : OLEVariant;
colLogicalDisks: OLEVariant;
colPartitions : OLEVariant;
objDiskDrive : OLEVariant;
objPartition : OLEVariant;
objLogicalDisk : OLEVariant;
oEnumDiskDrive : IEnumvariant;
oEnumPartition : IEnumvariant;
oEnumLogical : IEnumvariant;
iValue : LongWord;
DeviceID : string;
begin;
Result:='';
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
objWMIService := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', ''); //Connect to the WMI
colDiskDrives := objWMIService.ExecQuery('SELECT * FROM Win32_DiskDrive','WQL',0);
oEnumDiskDrive:= IUnknown(colDiskDrives._NewEnum) as IEnumVariant;
while oEnumDiskDrive.Next(1, objDiskDrive, iValue) = 0 do
begin
DeviceID := StringReplace(objDiskDrive.DeviceID,'\','\\',[rfReplaceAll]); //Escape the `\` chars in the DeviceID value because the '\' is a reserved character in WMI.
colPartitions := objWMIService.ExecQuery(Format('ASSOCIATORS OF {Win32_DiskDrive.DeviceID="%s"} WHERE AssocClass = Win32_DiskDriveToDiskPartition',[DeviceID]));//link the Win32_DiskDrive class with the Win32_DiskDriveToDiskPartition class
oEnumPartition := IUnknown(colPartitions._NewEnum) as IEnumVariant;
while oEnumPartition.Next(1, objPartition, iValue) = 0 do
begin
colLogicalDisks := objWMIService.ExecQuery('ASSOCIATORS OF {Win32_DiskPartition.DeviceID="'+objPartition.DeviceID+'"} WHERE AssocClass = Win32_LogicalDiskToPartition'); //link the Win32_DiskPartition class with theWin32_LogicalDiskToPartition class.
oEnumLogical := IUnknown(colLogicalDisks._NewEnum) as IEnumVariant;
while oEnumLogical.Next(1, objLogicalDisk, iValue) = 0 do
begin
if objLogicalDisk.DeviceID=(Drive+':') then //compare the device id
begin
Result:=objDiskDrive.SerialNumber;
Exit;
end;
objLogicalDisk:=Unassigned;
end;
objPartition:=Unassigned;
end;
end;
end;
begin
try
CoInitialize(nil);
try
MonSerie1 := GetDiskSerial('C');
MonSerie := TrimLeft(TrimRight(MonSerie1));
Writeln(MonSerie);
Readln;
finally
CoUninitialize;
end;
except
on E:Exception do
begin
Writeln(E.Classname, ':', E.Message);
Readln;
end;
end;
end.RE: دالة التعرف على رقم التلسلي الفزيائي القرص الصلب - PLANSHARP - 01-05-2016 EOlesyserror:Bad Variable type OS: windows 7, 64 bit. RE: دالة التعرف على رقم التلسلي الفزيائي القرص الصلب - أبو معاذ - 01-05-2016 نسيت أن أقول أنني أستعمل دلفي 7 مع ويندوز 7 64 بت. RE: دالة التعرف على رقم التلسلي الفزيائي القرص الصلب - أبو معاذ - 07-05-2016 السلام عليكم ورحمة الله وبركاته ، تم تجربة الدالة بنجاح على قرص صلب من نوع SSD و أيضا على لوحة Tablet مزودة بنظام الويندوز. RE: دالة التعرف على رقم التلسلي الفزيائي القرص الصلب - justnick - 08-05-2016 السلام عليكم ورحمة الله هل يختلف الرقم الناتج اذا قمت بتشغيل البرنامج كAdministrator او لا؟ انا اعتمدت على unit تسمى magwmi عند تشغيل البرنامج كمدير ينتج رقم تسلسلى اظنه صحيح ولكن قصير وعند تشغيل البرنامج بدون صلاحيات المدير ينتج رقم طويل نوعا ما RE: دالة التعرف على رقم التلسلي الفزيائي القرص الصلب - أبو معاذ - 22-05-2016 السلام عليكم ورحمة الله وبركاته ، الحمد لله ، هذا برنامج (ليس تطبيق Console) للتعرف على الرقم التسلسلي الفزيائي الخاص بالقرص الصلب دون اللحوء إلى أي مكون خارجي. البرنامج منجز في بيئة دلفي 7 + ويندوز 7 64 بت . RE: دالة التعرف على رقم التلسلي الفزيائي القرص الصلب - wadoud - 30-11-2016 (01-05-2016, 09:52 AM)Unprogramme كتب : السلام عليكم ورحمة الله وبركاته ،السلام عليكم [size=small]EOlesyserror:Bad Variable type[/size] [size=small]OS: windows 7, 32 bit.[/size] RE: دالة التعرف على رقم التلسلي الفزيائي القرص الصلب - أبو معاذ - 30-11-2016 السلام عليكم ورحمة الله وبركاته ، الدالة التي في هذا الموضوع استخراج الرقم الفزيائي الحقيقي للقرص الصلب أفضل بكثير. |