(س)السلام عليكــم ورحمـة الله وبركاتــة ،،
اخواني الاعزاء ان شاء الله وبعونه سوف نشرح تقنية ليست بجديدة من حيث ظهورها ولكنها جديدة علي مبرمجي
الفيجوال بيزك 0.6 وخصوصا المبتدأين منهم
مقدمة : -
طبعا عنوان الدرس هو تقينة Windows Management Instrumentation او اختصارها WMI
تلك التقنية تقوم بالاستعلام عن معلومات تخص اي مكون داخل الكمبيوتر وخارجه بمعني انها تجلب لنا معلومات يصعب ايجادها بالشغل اليدوي العادي وخصوصا في بيئة الفيجوال بيزك دون الاعتماد علي دوال API او استخدام اكواد C++ .....
معلومات عن WMI : -
- تستخدم تقنية WMI نموزج المعلومات المشترك CIM من اجل جلب المعلومات لك عن اي شي يخص الويندوز سواء كانت المعلومات التي تريدها خاصة ب Hardware او Software وذلك كله بدون استخدامك لكود واحد من اكواد API المعقدة
- امكانية جلب معلومات جهاز بعيد مثل جهاز علي الشبكة المحلية عن طريق تلك التقنية وللمزيد من المعلومات عن ذلك تستطيع تصفح الرابط التالي من ميكروسوفت MSDN
- لا تعتمد تلك التقنية علي لغة برمجة معينة ولكنها تقينة حرة التكوين بمعني انك في اكثر من لغة تقدر تستخدمها مثل ( االسي 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_DiskDrive : ذكرنا انها خاصة بمعلومات عن الهارديسك الخواص التي تحتويها تلك المكتبة مثل :
خاصية DeviceID : وهي خاصية معرف العتاد داخل الويندوز او بمعني اخر رقم ID للقطعة داخل الويندوز
خاصية InstallDate : هي خاصية تاريخ تشغيل هذا المكون او اعداده علي الكمبيوتر
خاصية MediaType : وهي بتحدد نوع الهارد هل هو IDE عادي او SATA وكلكم عارفين المصطلحين
خاصية Partitions : وهي تعرض لك عدد البارتيشينات المقسمه داخل هذا الهارد
والكثير من الخواص تقدر تتصفحها من خلال الرابط التالي :
-- ثانيهم : بعض الااومر الا بتخليك تتحكم في تلك المكونات وطبعا نادر او قليل من المكتبات التي تجد بداخلها انواع من الاجراءات لذلك نظرا لانها تقينة مبنية علي الاستعلامات ..
يبقا خلاصة الجانب النظري الا فات :
- انك محتاج انك تعرف كائن لتعريف لغة البرمجة ان هتستخدم تقنية 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 راح تلاقي كاتب في نهاية صفحة الكلاس ايه الويندوز الا بيدعمها او اقل نسخة ويندوز مطلوبة عشان يتنفذ الكود صح وتاتي في كما في الصورة التالية :

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

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

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

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


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

:wacko:(coffee) ختاما اتمنا اكون وفقت في توصيل فكرة التعامل مع تلك التقنية بسهولة ويسر فان اخطأت فهو من نفسي ومن الشيطان وان اصبت فبفضل الله وعونه :P(geek)
ولا ابغي غير دعوة صادقة لي وللمسلمين اجمعين في ظهر الغيب بالتقوي والصلاح في الدنيا والاخره
اللهم جنبنا الرياء والمرتائين وجنبنا الفخر والتفاخر
والحمد لله والصلاة والسلام علي خاتم النبين والرسل
و(س)السلام عليكــم ورحمـة الله وبركاتــة ،،
