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

شرح تقنية Windows Management Instrumentation

بدأه Max bayne في 4 مارس 2009 · 4 رد · 3,230 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

(س)السلام عليكــم ورحمـة الله وبركاتــة ،،

اخواني الاعزاء ان شاء الله وبعونه سوف نشرح تقنية ليست بجديدة من حيث ظهورها ولكنها جديدة علي مبرمجي

الفيجوال بيزك 0.6 وخصوصا المبتدأين منهم

مقدمة : -

طبعا عنوان الدرس هو تقينة Windows Management Instrumentation او اختصارها WMI

تلك التقنية تقوم بالاستعلام عن معلومات تخص اي مكون داخل الكمبيوتر وخارجه بمعني انها تجلب لنا معلومات يصعب ايجادها بالشغل اليدوي العادي وخصوصا في بيئة الفيجوال بيزك دون الاعتماد علي دوال API او استخدام اكواد C++ .....

معلومات عن WMI : -

- تستخدم تقنية WMI نموزج المعلومات المشترك CIM من اجل جلب المعلومات لك عن اي شي يخص الويندوز سواء كانت المعلومات التي تريدها خاصة ب Hardware او Software وذلك كله بدون استخدامك لكود واحد من اكواد API المعقدة

- امكانية جلب معلومات جهاز بعيد مثل جهاز علي الشبكة المحلية عن طريق تلك التقنية وللمزيد من المعلومات عن ذلك تستطيع تصفح الرابط التالي من ميكروسوفت MSDN

WMI Remote Computer

- لا تعتمد تلك التقنية علي لغة برمجة معينة ولكنها تقينة حرة التكوين بمعني انك في اكثر من لغة تقدر تستخدمها مثل ( االسي C - السي بلص بلص C++ - الفيجوال بيزك VB - الفيجوال سكريبت VB Script- الدلفي Delphe - الجافا سكريبت JavaScript - الفريم واارك دوت نت Framework.Net وغيرها من المنصات )

- اذا ما قورنت بالسرعة بينها وبين دوال API فدوال API الاسرع بدون شك

- اذا ما قورنت بالسهولة في التعامل بينها وبين دوال API نجد انها تعتبر اسهل بكثير جدا من التعامل مع اكواد API

المعقدة

- مش كل المكونات داعمة لتلك التقنية وخصوصا القديمة منها وكمان مش كل انظمة التشغيل بتدعمها

اهم وظائفها : -

-باختصار شديد جدا تقدر تجيب من خلالها معلومات عن اي شي متعلق بالكمبيوتر سواء كان هاردو وير او سوفت وير علي سبيل المثال مثلا تقدر تعرف ايه الازرار الا شغاله في الكبيورد والا الا مش شغاله او تقدر تعرف معلومات عن اللوحة الام للجهاز وايه الكروت المتوصله بيها مش كده وبس وكمان تقدر تعرف معلومات عن الهاردديسك وعدد البارتيشينات الا متقسمه بداخله دون استخدام دوال API المعقدة

دواعي استخدامها : -

- طبعا ما لهاش قوانين محدده لاستخدامها بمعني ان اي حد يقدر يستخدمها ولكن من وجه نظري اري انها لا تستخدم الا في حالة الضرورة نظرا لانها بطيئة اذا قورنت بدوال API يعني لو انتا محتاج حاجة او عاوز تعرف حاجة ع اي شي في الكمبيوتر ولقيت ان دوال API كتيره ومعقده تقدر تستعين بيها لو انتا شغال Javascript سواء في الويب او غيره ومحتاج تعرف معلومة وشايف ان البيئة البرمجية لا تدعم ذلك يبقا عليك وعلي WMI وده من وجه نظري يعين مش قانون وممكن تستخدمها في كل شغلك اذا حبيت ذلك بس خلي بالك ومن السرعة في المعلومات غير كه انها لا تدعم تنفيذ اوامر الا في القليل من الكلاسات او المكونات لذلك فهي تقنية استعلام بالدرجة الاولي يعني تجيب منها معلومات فقط بس ما تقدرش تعيطها امر بتنفيذ شي في الكمبيوتر الا في القليل من الاشياء مثل فصل كبل الشبكه واعاده تشغيله الا هي Enable or Disable Network Connection حاجة زي كده

استخدامها من الناحية النظريه : -

قبل كا نتطرق للجانب العملي في درسنا اليوم عاوز اوضح بعض الاشياء بخصوص استغلال تلك التقنية والاعتماد عليها في شغلنا وابسط العملية بحيث تكون اساس ليك في التعامل معها بعد ذلك ان شاء الله ولا تقتصر تعاملك معها علي نقل اكواد والسلام لان بذلك لن تستفيد شي كونك مبرمج دون ان تفهم الهدف من الاكواد وازاي تكتبها بنفسك ون الاعتماد علي مبدا النقل والنسخ واللصق في التعامل معها .

- طبعا العملية سهلة جدا بس محتاجه شوية تركيز وانا بسطت الاكواد علي قدر استطاعتي حتي لا تملوا من طول الاكواد او غيره .

تعالوا نعرف الاول حكاية او خط سير التعامل مع تلك التقنية ببساطه جدا فيما يلي :

اولا : تلك التقنية عشان تتعامل معها من خلال الفيجوال بيزك او الاسكريبت محتاج انك تعرف الكائن المسئول عن تقنية WMI و بتعطي للكائن الاسم المعرف WinMgmts واختصار الي Windows Managements

ثانيا : التقنية دي بتتكون من مجموعة رهيبة من الكلاسات Classes او المكتبات المسئول عن التعامل مع عتاد الكمبيوتر مثلا :

- مكتبة Win32_DiskDrive : هي مكتبة خاصه بمعلومات عن الهارد ديسك للكمبيوتر .

- مكتبة Win32_BaseBoard : خاصه بمعلومات عن اللوحة الام للكمبيوتر

- مكتبة Win32_Battery : معلومات عن بطارية الحاسب الالي ( بطارية البيوس )

- مكتبة Win32_CDROMDrive : للاتيان بمعلومات عن سواقة الاسطوانة الليزرية

وغيرها من الكثير من المكتبات سوف اتركك تستعرض ما تشاء من خلال الرابط التالي من MSDN

Win32 Classes

ثالث : كل مكتبة من تلك المكتبات تحتوي بداخلها علي شيئين :

-- اولهم : خواص المكون الخاص بالمكتبة بمعني مكتبة مثل Win32_DiskDrive : ذكرنا انها خاصة بمعلومات عن الهارديسك الخواص التي تحتويها تلك المكتبة مثل :

خاصية DeviceID : وهي خاصية معرف العتاد داخل الويندوز او بمعني اخر رقم ID للقطعة داخل الويندوز

خاصية InstallDate : هي خاصية تاريخ تشغيل هذا المكون او اعداده علي الكمبيوتر

خاصية MediaType : وهي بتحدد نوع الهارد هل هو IDE عادي او SATA وكلكم عارفين المصطلحين

خاصية Partitions : وهي تعرض لك عدد البارتيشينات المقسمه داخل هذا الهارد

والكثير من الخواص تقدر تتصفحها من خلال الرابط التالي :

Win32_DiskDrive Properties

-- ثانيهم : بعض الااومر الا بتخليك تتحكم في تلك المكونات وطبعا نادر او قليل من المكتبات التي تجد بداخلها انواع من الاجراءات لذلك نظرا لانها تقينة مبنية علي الاستعلامات ..

يبقا خلاصة الجانب النظري الا فات :

- انك محتاج انك تعرف كائن لتعريف لغة البرمجة ان هتستخدم تقنية WMI وبعدها بتحدد اسم المكتبة الا بدك تاخد منها معلومات يعني هل محتاج مكتبة الهاردديسك والا مكتبة لوحة المفاتيح والا مكتبة اللوحة الام والا بعدها لما بتعرف المكتبة بتحتاج انك تعرف اي الخواص الا بتدعمها تلك المكتبة ومن بنهم بتحد الخاصية الا بدك تعرفها من المكتبة وفي النهاية بتحصل علي نتيجة تلك الخاصية بين يديك .

استخدامها من الناحية العملية : -

هنا هنشرح ونطبق خلاصة الكلام النظري السابق ولكن من خلال الاكواد وهنطبق مثال علي جلب بعض معلومات عن الهاردديسك الا من الصعب بل من المستحيل الحصول عليها بدون الاستعانة باكواد API

اولا : زي ما قلنا هننشا كائن ونحدد فيه الاسم المعرف لتقنية WMI وهو كما يلي في الكود التالي :

Dim wmi As Object

Set wmi = GetObject("WinMgmts:")

ثانيا : هنحدد اسم المكتبة للمكون الا عاوزين نعرف معلومات عنه من خلالها وهنا هنستخدم مكتبة الهاردديسك Win32_DiskDrive

Dim objs As Object

Set objs = wmi.InstancesOf("Win32_DiskDrive")

ثالثا : هنحدد اسم الخاصية الا بتدعمها المكتبة السابقة الذكر من اجل الحصول عليها وليكن معرفة عدد البارتيشنات المتقسمه داخل الهارد مثلا :

Dim obj As Object

For Each Obj In objs

  msgbox Obj.Partitions

Next

رابعا الكود كاملا بعد تكوينه كما يلي :

Dim wmi As Object
Set wmi = GetObject("WinMgmts:")


Dim objs As Object
Set objs = wmi.InstancesOf("Win32_DiskDrive")



Dim Obj As Object

For Each Obj In objs

 MsgBox Obj.Partitions

Next

- طبعا تقدر تستخدم الكود السابق مع اي مكتبة من مكتبات WMI كل االا عليك انك تكتب اسم المكتبة بدلا من كلمة Win32_DiskDrive هتكتب اسم المكتبة الخاص بالهاردوير بتاعك الا عاوز تعرف عنه معلومات وبعدها تكتب بدل كلمة Partitions اسم الخاصية الا بتعدها المكتبة ومن ثم بتنفذ الكود وهتلاقي النتيجة ان شاء الله تعالي

- ملحوظة هامة ليست كل الخواص تعمل فهي تتعلق بمدي دعم المكون لها ونوع نسخة الويندوز الداعمه لها وفي كل صفحة خاصة بمكتبة او كلاس داخل مكتبة MSDN راح تلاقي كاتب في نهاية صفحة الكلاس ايه الويندوز الا بيدعمها او اقل نسخة ويندوز مطلوبة عشان يتنفذ الكود صح وتاتي في كما في الصورة التالية :

291372373.png

خطوات استعراض مكتبات WMI ومعرفة خواص كل مكتبة ومعلومات عنها ايضا : -

1 - الذهاب الي مكتبة مايكروسوفت MSDN علي الرابط التالي والخاص بتقنية WMI

WMI Win32 Classes

2- تلك قائمة بالمكتبات التي تحتويها تقنية WMI كما في الصورة التالية

56134094.png

3- نختر مكتبة نود التعامل معها او نود عرض معلومات عنها كما يلي نختر مكتبة التعامل مع الهارد ديسك

744744628.png

4- وعند الضغط علي تلك المكتبة سوف تعرض معلومات عنها وفيما تستخدم وتعرض الخواص التي تدعمها

600800995.png

رابط صفحة الكلاس او المكتبة من هنا : Win32_DiskDrive

5 - وهنا تعرض الخواص الخاصة بتلك المكتبة والتي تدعمها ويمكن نقل اي خاصية ووضعها في المكان المناسب من الكود كما سبق ذكره وايضا في وسط كل صفحة بيتم عرض شرح لكل خاصية وايه احتمال نتائجها ايضا .

790818494.png

57240789.png

6- اما هنا فيتم عرض الاجراءات التي تدعمها المكتبة والتي تجعلك تتحكم في تلك المكتبة او بمعني ادق تتحكم في الهاردويير المسؤل عنها المكتبة كما يلي :

148539934.png

رابط صور الدرس

:wacko:(coffee) ختاما اتمنا اكون وفقت في توصيل فكرة التعامل مع تلك التقنية بسهولة ويسر فان اخطأت فهو من نفسي ومن الشيطان وان اصبت فبفضل الله وعونه :P(geek)

ولا ابغي غير دعوة صادقة لي وللمسلمين اجمعين في ظهر الغيب بالتقوي والصلاح في الدنيا والاخره

اللهم جنبنا الرياء والمرتائين وجنبنا الفخر والتفاخر

والحمد لله والصلاة والسلام علي خاتم النبين والرسل

و(س)السلام عليكــم ورحمـة الله وبركاتــة ،،

PICTURES.zip

1
#2

جزاك الله خيراً، ووفقك في الدنيا والآخرة، وأبعدك عن الرياء :)

فعلاً جميل، بسيط، وغير معقد.

هذا تطبيق رائع للأخ mrx_Ta7ady على استخدام الكائن winmgmts والمكتبة Win32_Process لإغلاق جميع العمليات الجارية، باستثناء VB6 والبرنامج الذي قام بالعملية:

إغلاق جميع البرامج المفتوحة في Task Manager

أكرر شكري لك :)

هذه الجملة خاطئة  :wacko: 


#3

وعليكــم السـلام ورحمة الله وبركاتـه..

نادرا ماتأخذ الWMI حقها على الvb6 :)

موضوع جميل جدا

أردت اضافة رابط للمشاركة

WMI CODE GENERATOR

مثال عملته قبل يقوم بتسهيل التعامل مع فئات الWin32

بالتوفيق للجميع

#4

برنامج جميل جداً أستاذ DreamNet وإضافة أكثر من رائعة، جزاك الله خيراً :)

هذه الجملة خاطئة  :wacko: 


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

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

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

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

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