الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيفية إيجاد الرقم التسلسلى لمحرك الأقراص الصلبة

بدأه هانى عوض في 23 يونيو 2012 · 18 رد · 1,264 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

تحية طيبة

هل يوجد طريقة لجلب الرقم التسلسلى الفعلى للهارد ديسك.. وذلك بدون شرط الحصول على صلاحيات المدير أو دون استخدام WMI؟؟

حيث أننى أستخدم هذه الوظيفة

public string getHDDId()
        {
            string result = string.Empty;
            ManagementClass mc = new ManagementClass("Win32_PhysicalMedia");
            ManagementObjectCollection moc = mc.GetInstances();
            foreach (ManagementObject mo in moc)
            {
                result = mo["SerialNumber"].ToString().Trim();
                break;
            }
            return result;
        }

ولكنها تعطى نتيجة صحيحة فى حالة حصول المستخدم الحالى على صلاحيات المدير.. ولكن عند تغيير الصلاحيات بالويندوز يعطى رقم طويل ومختلف تماماً عن الرقم الفعلى..

هل يمكن استخدام AS Invoker مثلاً ..

أرجو الإفادة للأهمية

وشكراً

#2

السلام عليكم أخي كان لي مشروع يقوم بهذه الوظيفة لكن لا أعلم إن كان مثل ماتريد //attachment/121274 بالتوفيق

Be the change you want to see in the world


#3
METEOR كتب:

السلام عليكم أخي كان لي مشروع يقوم بهذه الوظيفة لكن لا أعلم إن كان مثل ماتريد //attachment/121274 بالتوفيق

شكراً أخى الكريم على تفعالك.. ولكن نفس المشكلة..

وغالباً نفس الطريقة فأنت تستخدم ManagementObject

#4

أخي أين تكمن مشكلتك هذا المشروع لايحتاج إلى صلاحيات المدير <br><br><br>

Be the change you want to see in the world


#5

ببساطة

أحصل على رقم الهاردديسك فى الحالتين ولاحظ الفرق:

أدخل على :

control panel > User Accounts > Change User Account Control Settings

قم بسحب المؤشر إلى أسفل كالتالى

post-96562-045195600 1340476850_thumb.pn

قم بعمل ريستارت وأحصل على رقم الهارد

ثم قم برفع المؤشر إلى أعلى كالتالى

post-96562-059192200 1340476994_thumb.pn

قم بعمل ريستارت وأحصل على رقم الهارد

ثم قارن النتيجتين!!!

هذا ما أقصده... أريد رقم الهارد الحقيقى سواء بصلاحيات أو بدون صلاحيات..

وشكراً

المرفقات
01.png02.png
#7

شكراً أخى الكريم على حسن التفاعل

ولكن هذه المقالة بالرغم من كونها جيدة جداً (حيث أننى كنت عثرت عليها منذ زمن بالمصادفة).. إلا إنها بها الكثير من الملاحظات:

1- لاتدعم الفريم وورك 4

2- المشروع الـ Dll مكتوب بلغة C++

3- لاتعمل على Win Os 64bit

4- لا تعمل على Win 7

5- الآداة تحوى الكثير من الكود!!

6- والأهم... أنها لاتدعم حجب صلاحيات المستخدمين.. أى أنها تتطلب حصول المستخدم على كافة الصلاحيات... وهى المشكلة التى أنا بصددها..

وشكراً

#8

طيب أخي لماذا لا تجرب الحصول على الرقم التسلسلي بإستخدام الـ API <br>أظن أن أنه سيفي بالغرض<br>

Be the change you want to see in the world


#9
METEOR كتب:

طيب أخي لماذا لا تجرب الحصول على الرقم التسلسلي بإستخدام الـ API <br>أظن أن أنه سيفي بالغرض<br>

هل يوجد لديك أى موضوعات أو مقالات بخصوصه؟؟

#11
METEOR كتب:

وعليكم السلام

ولكن لا جديد... نفس المشكلة..

المشكلة ليست فى كيفية الحصول على الرقم الفعلى للهارد ديسك.. فالكود المرفق فى أول مشاركة يعمل جيداً..

ولكن المشكلة فى حالة عدم وجود صلاحية المدير للمستخدم الحالى فإنه لا يستطيع جلب الرقم الفعلى..

شكراً مرة أخرى لمجهودك فى محاولة المساعدة .. فهذا ليس بغريب على الفريق العربى للبرمجة.

#12

ربما هذه الوظيفة تفيد

http://pinvoke.net/default.aspx/kernel32.GetVolumeInformation

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#13

السلام عليكم

أهلاً أخي

لماذا لاتقوم بتشغيل البرنامج بصلاحيات المدير وتريح بالك ؟؟

إذا كنت تريد تشغيله كمدير لدي طريقة مضمونة لتشغيله دون مشاكل وعلى كل الأنظمة

Be the change you want to see in the world


#14
METEOR كتب:

السلام عليكم

أهلاً أخي

لماذا لاتقوم بتشغيل البرنامج بصلاحيات المدير وتريح بالك ؟؟

إذا كنت تريد تشغيله كمدير لدي طريقة مضمونة لتشغيله دون مشاكل وعلى كل الأنظمة

وعليكم السلام

أولاً: لا مانع لدى من التجربة.. تفضل

ثانياً: ما تم إستنتاجه بخصوص المشكلة حتى الآن :

1- فى حالة أن المستخدم الحالى له صلاحيات المدير كاملة:

نحصل على البيان التالى:

Hdd Serial Number : WD-WCAV25054928

2- فى حالة عدم حصول المستخدم على صلاحية المدير:

نحصل على البيان التالى:

Hdd Serial Number : 2020202057202d44435756413532353039343832

حيث أن الرقم السابق Hexadecimal وعند تحويله إلى String

نحصل على التالى:

W -DCWVA52509482

وإذا لاحظنا الفرق بين هذا الرقم وبين الرقم الذى حصلنا عليه فى الأول سنجده مطابق فى حالة تبديل ترتيب كل رقمين!!

عموماً جارى العمل على طريقة Application Manifest File ضمن فكرة الأخ METEOR

تم تعديل هذه المشاركة بواسطة هانى عوض في 25 يونيو 2012 في 16:51

#15
أبو أحمد المبرمج كتب:

شكرا أخى أبو أحمد لمشاركتك الفعالة.. عفواً إن كنت لم ألاحظها قبل الرد السابق.. ولكن..

بعد تجربة الكود المشار إليه وقراءته:

أولاً: هذه الوظيفة تعطى VolumeInformation الخاصة بكل حرف لمحرك الأقراص..

ثانياً: نفس المشكلة الخاصة بصلاحيات المدير فنحصل فى هذه الحالة على Null !!

مع تحياتى

تم تعديل هذه المشاركة بواسطة هانى عوض في 25 يونيو 2012 في 16:20

#16

السلام عليكم

أخي هذا هو المشروع الكود موجود في ملف Program.cs

RunasAdmin

جربه وأعطيني رأيك

أتمنى لك التوفيق

Be the change you want to see in the world


#17
METEOR كتب:

السلام عليكم

أخي هذا هو المشروع الكود موجود في ملف Program.cs

RunasAdmin

جربه وأعطيني رأيك

أتمنى لك التوفيق

وعليكم السلام

للأسف لم يعمل ... فهو فقط قد قام بعمل Processes تظل عالقة ولا يمكن إنهائها.. إلا عن طريق Restart للكمبيوتر...

ولكننى وجدت الحل..

باستخدام Application Manifest File .. والحمد لله إنتهت المشكلة..

وشكراً لمساهمتكم

مع تحياتى

هانى عوض

#18

السلام عليكم

مبروك أخي إنك لقيت الحل

مع العلم أن المشروع قد جربته وهوا يعمل عندي 100%

بس ملاحظة أخي لما تستخدم الـ Manifest رح يظهر لك النظام رسالة

كل ماتشغل برنامجك لطلب الصلاحيات أما الطريقة التي في المشروع قد جربتها

وقد نجحت دون ظهور أي رسائل

على كل حال المهم أن المشكلة قد إنتحت

وأتمنى لك التوفيق

Be the change you want to see in the world


#19

الرجاء وضع الكود كامل لحل هذه المشكلة لأننى أعانى منها فى برامجى أيضاً - و جزاك الله كل الخير

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…