kachwahed كتب :الحصول على الرقم التسلسلي، لكني جربت مكونات MiTeC System Information Component Suite ومكونات أخرى عديدة من هذا النوع وكلها لم لم تف بالغرض
ضمن امثلة MiTeC System Information Component Suite هناك مثال اسمه USBEnum جربه وانظر بنفسك
بارك ا لله فيكم جميعا
شكرا كثيرا أستاذ لقد جربت المكون TGetDiskSerial.3.0.0 أيضا وغيره كثير...
كل هذه المكونات تعيد نتائج متشابهة، وليس منها من يعيد الرقم التسلسلي الفيزيائي وليس المنطقي (Logic) فهذا الأخير يمكن الحصول عليه بسهولة باستعمال الدالة GetVolumeInformation كما قال أخي me&delphi وكما ذكرت من قبل.
باختصار كل من عنده مكون أو دالة فيقارن نتيجتها مع الـ VBScript السابق، وإن تطابقا فقد وجد الحل
ملاحظة هامة: هناك الكثير من الأقراص (FlashDisk) المتداولة بين الناس ليس لها رقم فيزيائي أو قيمته صفر، يعني لو تجرب VBScript السابق يعطيك القيمة 0 أو 1.
شكرا كثيرا على تعاونكم، ما زال البحث مستمر وسأوافيكم بالجديد إن شاء الله.
TGetDiskSerial للحصول على الرقم التسلسلس للقرص الصلب HDD ولا تنفع مع USB Flash Disk
كود :
http://www.devlib.net/tgetdiskserial.htm
إقتباس :يعني لو تجرب VBScript السابق يعطيك القيمة 0 أو 1.
كما قلت وكررت مكونات MiTeC تنفع وهذه صورة توضح ذلك مع اثنين USB Flash Disk مختلفين
كما هو واضح بالصورة اضفت صورة تنفيذ VBSلترى ان القرصين مختلفين
والسلام عليكم
بارك الله فيك أستاذ.
لقد أعدت اختبار الرقم التسلسلي للـ USB Disk باستعمال مكون MiTeC والنتيجة ما يلي:
- هذا الرقم يبقى ثابت حتى بعد عمل تهيئة (Format) للقرص
- هذا الرقم يختلف عن الرقم الذي يصدره VBScript
صورة قبل الـ Format
صورة بعد الـ Format
الأقراص التي ليس لها رقم تسلسلي فيزيائي (أو لم يتعرف عليه الجهاز) يكتبها 0 أو 1، ومثل هذه لا يمكن استعمالها للاختبار، هذه الصورة لقرص Flash Kingston له رقم تسلسلي تعريفي ثابت يختلف عن الذي تصدره مكونات MiTeC.
الرقم الذي يظهره MiTEC هو الرقم التسلسلي Serial Number للUSB Flash Disk يضعه المصنع وهو موجود بكل الFladh Disk باختلاف انواعها
وهذه صورة اخرى باستعمال بريمج مايكروسوفت الشهير USBView
وجدت ما كنت أبحث عنه:
WMI أو ما يعرف بـ Windows Management Instrumentation هي إضافة من Microsoft تسمح بالتعرف على المعلومات الإدارية للحاسب وأدواة النظام...للمزيد wikipedia
الكود VBScript الذي طرحته سابقا يستعمل استعلام SQL للحصول على المعلومات بهذه التقنية، ويمكن تغيير الاستعلام :
كود :
Select * from Win32_DiskDrive where caption like '%USB%'
إلى:
كود :
Select * from Win32_DiskDrive
للحصول على جميع الأقراص في الجهاز، كما يمكن عرض معلومات أخرى للقرص على غرار caption (أو DeviceID) و Signature (وهذا بيت القصيد، وليس الرقم التسلسلي في الحقيقة) مثل: Model، Description، TotalSectors... وغيرها فيصبح الكود كما يلي:
كود :
On Error Resume Next
MyComputer = "."
Set obj = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & MyComputer & "\root\cimv2")
Set columns = obj.ExecQuery("Select * from Win32_DiskDrive")
For Each item in columns
Wscript.Echo "DeviceID: " & Item.DeviceID
Wscript.Echo "Model: " & Item.Model
Wscript.Echo "Description: " & Item.Description
Wscript.Echo "Size: " & Item.size
Wscript.Echo "Partitions: " & Item.Partitions
Wscript.Echo "Manufacturer: " & Item.Manufacturer
Wscript.Echo "TotalCylinders: " & Item.TotalCylinders
Wscript.Echo "TotalSectors: " & Item.TotalSectors
Wscript.Echo "TotalTracks: " & Item.TotalTracks
Wscript.Echo "SectorsPerTrack: " & Item.SectorsPerTrack
Next
وكما حصلنا على بيانات القرص بنفس الطريقة يمكن الحصول على معلومات أخرى حول النظام: Process و Registry وغير ذلك...
المكونات التجارية WmiSet Component Collection For Delphi, C++Builder مخصصة لمثل هذا الغرض، للتحكم في النظام والشبكة و...
الموقع:
كود :
http://www.online-admin.com/wmiset.html
وفي المرفقات نسخة كاملة للمكونات مع الأمثلة، وملف تطبيقي كمثال.
بارك الله في الأستاذ DeltaAziz وشكرا لكم جميعا.
الحمد لله أنك وصلت لمبتغاك أخي العزيز kachwahed
فالحصول على نتيجة بعد بحث طويل مهم جدا
أسف لكوني لم أبحث كثيرا معك لكثرة المشاغل هذه الفترة و سابقا
كنت أعلم بوجود المكونات التي ذكرت سابقا
لكني اردت ادراج وحدة تقوم بهذه الوظيفة
فكانت تدخلاتي سريعة
المهم ان تعم الفائدة للجميع
حياك الله
بالتوفيق لك
و السلام.