سنتناول في هذا الدرس شرح فئة Class مهمة جداً في البرامج والتي هي Process
أي "عملية" ,, التي تمكننا من تشغيل برنامج معين او أداة معينة من
أدوات نظام التشغيل. والتحكم بالعمليات (إيقاف - تشغيل - تغيير الأفضلية) التي تعمل على الجهاز الحالي أو على جهاز آخر (Remote Processes).
الفئة System.Process – System.Process class:
الفئة Process توجد ضمن النطاق (Namespace) الذي هو System.Diagnostics, ما يلي شرح بسيط لأهم الخصائص والاجراءات التي توجد في الفئة (الكلاس) Process:
|
||
بدء (تنفيذ) العملية ,, يمكن
تمرير بارامترات لهذا التابع أهمها: مسار البرنامج filename – معاملات التشغيل arguments
|
Start()
|
|
إغلاق العملية بشكل طبيعي مما
يعطي نظام التشغيل الفرصة لتحرير موارد النظام التي كانت تستعملها العملية
|
Close()
|
|
إغلاق العملية فوراً وبشكل قسري,
مما قد يؤدي لفقدان المعلومات التي كان يعمل عليها المستخدم
|
Kill()
|
|
جلب العملية التي يعمل من خلالها
المستخدم الحالي اي العملية المرتبطة بالبرنامج الذي طلب تنفيذ هذا التابع
|
GetCurrentProcess()
|
|
جلب عملية بواسطة رقمها التعريفي
والذي هو رقم فريد يعطيه نظام التشغيل للعملية عند "تشغيلها"
|
GetProcessById()
|
|
جلب مصفوفة تحوي العملية
(العمليات) التي لها الاسم الممرر للتابع
|
GetProcessByName()
|
|
جلب مصفوفة تحوي كافة العمليات
التي تعمل على الجهاز الحالي
|
GetProcesses()
|
|
هذه الخاصية تجلب الرقم العريفي
للعملية
|
Id
|
|
هذه الخاصية تجلب اسم العملية
|
ProcessName
|
|
هذه الخاصية ترجع لنا قيمة Boolean تبين حالة العملية (تستجيب – عدم
الاستجابة)
|
Responding
|
|
ترجع لنا كائن StreamWriter الذي يمكننا استخدامه لإرسال بيانات
للعملية
|
StandardInput
|
|
ترجع لنا كائن StreamReader الذي يمكننا استخدامه لجلب البيانات
الناتجة من تنفيذ اوامر من قبل العملية
|
StandardOutput
|
|
تمكننا من جلب او ارسال معاملات
التشغيل للعملية مثل: وضعية نافذة العملية – اسم ملف لفتحه بواسطة العملية
|
StartInfo
|
|
تجلب مصفوفة تحوي الخيوط (ترجمة
مرعبة J) التي
تعمل ضمن العملية
|
Threads
|
|
معرفة او تحديد أفضلية العملية (
عادي – مرتفع – منخفض)
|
PriorityClass
|
|
اسم الكمبيوتر التي تعمل عليه
العملية
|
MachineName
|
مثال عملي:
سنقوم بكتابة مثال بسيط يقوم بالبحث عن العملية "explorer.exe" ثم إغلاقها ,, الكود:
اولاً يجب ان نقوم باستيراد المكتبة System.Diagnostics:
Imports System.Diagnostics
using System.Diagnostics;
ثانياً كود البحث والإغلاق:
Process.GetProcessesByName("explorer"))0(.Kill()
Process.GetProcessesByName("explorer")[0].Kill();
الكود بسيط جداً !! نقوم باستخدام التابع GetProcessesByName للبحث عن العملية explorer
التي هي مستعرض النظام ,, وبما ان هذا التابع يقوم بجلب مصفوفة بالعمليات التي لها
نفس الاسم , لذلك نقوم بتحديد النتيجة الاولى في المصفوفة الناتجة والذي له الرقم 0
كما نعرف في المصفوفات.
بقي فقط استخدام التابع Kill() لإغلاق هذه العملية .. لا تقلق فإن نظام التشغيل سيقوم بإعادة تشغيلها نيابة عنك.
الفئة System.ProcessStartInfo:
الفئة ProcessStartInfo هي فئة مهمة ومفيدة جداً عند استخدام العمليات Processes, فهي تمكننا من تمرير قيم ومعاملات تستخدم عند "تشغيل العملية" مما يعطينا خيارات إضافة عند تشغيل العملية ,, الصورة التالية يجب ان توضح ما اقصد:
الفئة ProcessStartInfo
توجد ايضاً ضمن النطاق System.Diagnostics,
ما يلي شرح بسيط لأهم الخصائص والاجراءات التي توجد في الفئة (الكلاس) ProcessStartInfo:
الفئة ProcessStartInfo – ProcessStartInfo Class |
|
جلب او ارسال معاملات بدء تشغيل
العملية أو "سطر الاوامر" والتي يمكن استخدامها مثلاً لفتح ملف نصي
اذا كان البرنامج الذي سيعمل هو المفكرة (انظر الصورة السابقة)
|
Arguments
|
تحديد او معرفة: هل ستظهر نافذة
البرنامج عند تشغيل العملية
|
CreateNoWindow
|
تحديد او معرفة: اسم البرنامج,
او اسم الملف الذي سيفتح بوسطة البرنامج عند تشغيل العملية (مثال المفكرة كما
شرحت قبل قليل)
|
FileName
|
تحديد او معرفة: هل ستقرأ
العملية البيانات التي ارسلت بواسطة الخاصية StandardInput التابعة للعملية Process, راجع هذه الخاصية في الجدول السابق
|
RedirectStandardInput
|
تحديد او معرفة: هل يمكن قراءة
البيانات الناتجة عن تنفيذ اوامر على العملية المحددة والتي يمكن جلبها من
الخاصية StandardOutput التابعة
للعملية Process, راجع هذه
الخاصية في الجدول السابق
|
RedirectStandardOutput
|
تحديد او معرفة: هل ستعمل
العملية من خلال Shell (قشرة نظام التشغيل) في حال كانت قيمة الخاصية True, أو ستعمل من الملف التنفيذي للعملية
مباشرة في حال كانت قيمة الخاصية False
من اجل ان نستطيع قراءة Stream البيانات الناتجة من تنفيذ اوامر على
العملية يجب ان تكون قيمة هذه الخاصية False
|
UseShellExecute
|
تحديد او معرفة: وضعية نافذة
البرنامج عند تشغيل العملية اي (تكبير – تصغير – عادي)
|
WindowStyle
|
تحديد او معرفة: المجلد الذي
يعمل فيه الملف التنفيذي للعملية
|
WorkingDirectory
|
مثال عملي:
سنقوم بكتابة مثال يقوم بفتح ملف نصي txt باستخدام برنامج المفكرة:
Dim p As
New Process
Dim pInfo As
New ProcessStartInfo
pInfo.FileName = "notepad.exe"
pInfo.Arguments = "C:\test.txt"
p.StartInfo = pInfo
p.Start()
Process p = new Process();
ProcessStartInfo pInfo = new ProcessStartInfo();
pInfo.FileName = "notepad.exe";
pInfo.Arguments = "C:\\test.txt";
p.StartInfo = pInfo;
p.Start();
في البداية قمنا بتعريف كائن من الفئة Process
اي عملية جديدة , ثم كائن من الفئة ProcessStartInfo وهو لإضافة معلومات لتشغيل
العملية مثل اسم البرنامج واسم الملف الذي سيتم فتحه بواسطة البرنامج.
بعد ذلك حددنا اسم البرنامج والذي هو notepad.exe اي المفكرة عن
طريق الخاصية FileName.
يجب ان تنتبه ان اسم البرنامج يجب يكون كاملاً اي مسار البرنامج واسمه ,, ولكننا في هذه الحالة وضعت اسم البرنامج فقط لأنه برنامج من برامج النظام مثله مثل برنامج الرسام Paint والالة الحاسبة Calculator.
بعد ان حددنا اسم البرنامج , نقوم بتحديد اسم
ومسار الملف النصي الذي سنفتحه بواسطة المفكرة عن طريق الخاصية Arguments
والتي شرحناها في الجدول السابق.
أخيراً بقي اسناد الكائن pInfo
للخاصية StartInfo التابعة للكائن p اي العملية التي ستشغل برنامج المفكرة ,, ثم
تشغيل البرنامج بواسطة التابع Start().
في الدرس القادم سنقوم ببرمجة مثال اوضح واكثر تقدماً يقوم بـ : تنفيذ اوامر MS-Dos ورؤية ناتج تنفيذ الاوامر.
في الدرس القادم سنقوم ببرمجة مثال اوضح واكثر تقدماً يقوم بـ : تنفيذ اوامر MS-Dos ورؤية ناتج تنفيذ الاوامر.
8 تعليقات
جزاك الله خيرا
ردعفواً ,, أهلاً وسهلا بك أخي الكريم
ردإرسال تعليق