تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
نحو تعامل أسهل مع فئات wmi
#1
كاتب الموضوع : مهند بيسك أوغلو

بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته...
أحببت أن يكون موضوعي اليوم صغير وسهل الهضم , وهو كما يقول الانكليز
عبارة عن :Tip & Trick , فأتمنى أن تحصل الفائدة ولو كانت بسيطة,,
هذا والله الموفق..
============================================
حاولت أن أكتب عن WMI ولكنني توقفت عن هذه المخاطرة حيث إنني لست واثقاً من درجة استيعابي لهذه التقنية كما أن مواضيعها من العيار الثقيل لأنك أولاً ستكتب عن تعريف هذه التقنية لنعرف على ماذا تعتمد وكيف تعمل, وبعد ذلك ستكتب موضوع عن فئات WMI المشتقة من فئات أخرى هي فئات CIM و أخيراً ستكتب موضوع عن الاستعلامات والإجراءات وقنص الأحداث ولغة WQL
على كل حال سأحاول أن أعطيك فكرة عن هذه التقنية:
كلنا يعرف تقنية الدوت نيت , وكلنا برمج في الدوت نيت وبرع وأتقن في التعامل مع هذه التقنية ولكن...هل يكفي أن تتعلم IO و Registry و Threading و Reflection و Win Forms و........الخ , الواقع يقول لك بكل تأكيد لا ,
لأنه في الحقيقة العميل(الذي كلنا يسعى لرضاه) لا يهمه إن تعلمت تقنية أو 20 تقنية!! كل ما يهمه هو مشكلته أو طلبه فمثلاً: يريد عميل ما _يملك شبكة محلية_ برنامج يقوم بمراقبة منافذ USB في الحواسيب المتصلة في الشبكة وعندما يتم وصل جهاز بمنفذ USB يتم إعلام المسؤول بالأمر والقيام بالعمليات اللازمة.
إن هذا أبسط طلب يمكن أن نتوقعه من العميل..! ستشعر أنك تحتاج إلى شيء مثل Win32 API ولكن هل تعلم كل هذا يمكنك القيام به بواسطة WMI وبمرونة عالية. هناك شيء قد تقوله لي :وهو أن بعض الأشياء التي تقوم بها WMI موجودة ضمن إطار الدوت النيت و يمكنك التعامل معها بأسهل طريقة..أقول لك :اضرب لي مثال؟ وبالفور ستجاوب :مثل Process و Services و Event logs وحتى Logical Disks وهنا أقول لك أن كلامك صحيح مئة بالمئة !! ولكن هناك بعض هذه الميزات غير متوفرة في النسخ السابقة من الدوت نيت إضافة إلى أن التعامل مع الشبكة أسهل بكثير , ولا تنسى أمر المرونة في استعلامات WMI فيكفي أن أقول لك إنها تطبق المعاملات المنطقية!مثل SQL تماماً.
يبدو أنني قد أطلت المقدمة وخرجت عن صلب الموضوع والغرض الأساسي منه
============================================
بكل بساطة كل ما أريد شرحه هنا هو التعامل مع فئات WMI بكل بساطة ممكنة
وتحويلها إلى فئات مثل أي فئة تنشئها , لا يتطلب منك الأمر سوى بضع كبسات على زر الفأرة الأيسر أو الأيمن, فالنبدأ باسم الله
نفتح مشروع جديد < نذهب إلى القائمة < View ومن ثم إلى Server Explorer أو نضغط اختصاراً Ctrl+Alt+S
يمكنك أن ترى هذه الصورة المرفقة التي توضح ماذا سأشرحه بعد قليل إن شاء الله:

أول شيء أسدل قائمة Servers ستلاحظ وجود اسم حاسوبك , أسدل هذه القائمة,اذهب إلى Management Classes بعد أن تفتحها ستلاحظ وجود عدد من الفئات مثل Process,Services,Operating System ......الخ
والآن جرب أن تفتح القائمة Process ستلاحظ ظهور جميع العمليات التي تقوم بها في جهازك و الآن كيف سنحول هذه الفئات إلى فئات عادية يمكننا التعامل معها برمجياً ؟ الجواب بضغطة زر!!! فقط اضغط بالزر الأيمن على Processأو على أي فئة من هذه الفئات ومن ثم اضغط على Generate Managed Class. هذا كل شيء!! ولتتأكد من ذلك اذهب Solution Explorer ستلاحظ ظهور فئة مثل هذه ROOT.CIMV2.Win32_Process.vb
هناك مشكلة بسيطة أريد أن أقولها لك هي أن هذه الفئات لا تعمل إلا إذا كان Option Strict Off
============================================
ملاحظة هامة قبل البدء بالأمثلة:
هناك الكثير والكثير من فئات WMI غير موجودة في Server Explorer و لإضافة فئة غير موجودة اذهب Management Classes التي تحدثنا سابقاً واضغط عليها بالزر الأيمن ومن القائمة المنسدلة اضغط على Add Classes..
سوف يظهر لك نافذة جديدة انتقل إلى مربع النص واكتب : USB ثم اضغط الزر Find Next إلى أن تحصل على هذه الفئة USB Controllers عند إذن اضغط الزر Add> واضغط الزر OK لتلاحظ إضافة فئة USB Controllers إلى Management Classes. وعلى كل حال سأقول لك عند كل مثال اسم الفئة التي ستبحث عنها إلا إذا كانت موجودة.

والآن سأعرض لك أمثلة حول التعامل معها برمجياً:
============================================
هذا المثال لجلب معلومات حول المعالج( الفئة موجودة)
Dim prc As ROOT.CIMV2.Processor
For Each prc In ROOT.CIMV2.Processor.GetInstances
ListBox1.Items.Add(prc.CurrentClockSpeed) 'السرعة
ListBox1.Items.Add(prc.Description) 'الوصف
ListBox1.Items.Add(prc.Family) 'العائلة
ListBox1.Items.Add(prc.Manufacturer) 'المصنع
ListBox1.Items.Add(prc.L2CacheSize) 'L2Cache حجم
ListBox1.Items.Add(prc.NumberOfCores) 'عدد النوى
Next
=================================
وهذا المثال خاص بمنافذ USB(اسم الفئة التي ستبحث عنها USB Controllers )
Dim usb As ROOT.CIMV2.USBController
For Each usb In ROOT.CIMV2.USBController.GetInstances
ListBox1.Items.Add(usb.MaxNumberControlled)
ListBox1.Items.Add(usb.Manufacturer)
ListBox1.Items.Add(usb.ProtocolSupported)
ListBox1.Items.Add(usb.Availability)
ListBox1.Items.Add("======")
Next
=================================
أما هذا المثال فهو خاص ب Serial Ports (اسم الفئة Serial Ports)
Dim sr As ROOT.CIMV2.SerialPort
For Each sr In ROOT.CIMV2.SerialPort.GetInstances
ListBox1.Items.Add(sr.Caption)
ListBox1.Items.Add(sr.SupportsIntTimeouts)
ListBox1.Items.Add(sr.SupportsParityCheck)
ListBox1.Items.Add(sr.SupportsElapsedTimeouts)
ListBox1.Items.Add(sr.SupportsXOnXOff)
ListBox1.Items.Add(sr.TimeOfLastReset)
ListBox1.Items.Add(sr.MaxNumberControlled)
ListBox1.Items.Add(sr.MaximumInputBufferSize)
ListBox1.Items.Add(sr.MaximumOutputBufferSize)
ListBox1.Items.Add("======")
Next

=================================
وأخيراً هذا المثال من أجل Video Controller(اسم الفئة Video Controllers)
Dim vd As ROOT.CIMV2.VideoController
For Each vd In ROOT.CIMV2.VideoController.GetInstances
ListBox1.Items.Add(vd.Caption)
ListBox1.Items.Add(vd.CurrentNumberOfColors)
ListBox1.Items.Add(vd.CurrentScanMode)
ListBox1.Items.Add(vd.VideoProcessor)
ListBox1.Items.Add(vd.VideoMode)
ListBox1.Items.Add(vd.VideoMemoryType)
ListBox1.Items.Add(vd.VideoArchitecture)
ListBox1.Items.Add(vd.MaxMemorySupported)
ListBox1.Items.Add("======")
Next
=================================
خاتمة:
أتمنى أن أكون قد وفقت في عرض الدرس..
و أتمنى أيضا أن أكون قد أفدتك ولو بمعلومة واحدة......
أخوك مهند وهيبة.....
والله ولي التوفيق..........
}}}}
تم الشكر بواسطة:
#2

السلام عليكم ورحمة الله وبركاته..
أحببت أن أضيف هذا الرابط من MSDN لمن يحب أن يبدأ في WMI

http://msdn.microsoft.com/en-us/libr...82(VS.85).aspx
}}}}
تم الشكر بواسطة:
#3

السلام عليكم .... اكتشفت مقال للأستاذ Samerselo يدور حول هذا الموضوع...
فلكي تعم الفائدة ....إليك هذا الرابط:
Windows Management Instrumentation
}}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  تعامل مع My Ahmed_online 3 525 11-10-14, 03:56 AM
آخر رد: raoe-041
  أسهل وأسرع طريقة لربط برنامجك بقاعدة البيانات (شرح بالصور) m.sami.ak 0 474 15-09-12, 03:22 PM
آخر رد: m.sami.ak

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم