عهدنا في الفيجوال بيسك دوت نت البساطة و السلاسة في عمل كل ما نريد فقد أتي الدوت نت ليريح الكثيرين من عبئ دوال ال API التي كانت تتبع مستعملي الفيجوال بيسك 6 كل ما أرادو ان يتعاملو مع النظام الشئ الذي يؤدي بعض المرات الى الياس من البعض و ترك برامجهم (التي قد تكون افكارها رائعة لكن الوسائل غير متاحة) و نسيانها ... لكن سطعت شمس عهد جديد منذ ال 2002 مع صدور الدوت نت الذي كان حلم الأغلبية من المبرمجين فأتى ال FrameWork مختزنا الكثير من الاسرار و الأدوات التي أدهشت الجميع و التي جعلت المبرمج لا يسعى وراء اي شئ خارج ال FrameWork لعمل مايريد (الا في حالات نادرة) و بهذا راينا المبرمجين يطلقون العنان لمخيلتهم و يبتكرون و ينتجون . (مقدمة لا علاقة لها بالدرس :D )
------ قبل بدا الدرس خذ لك فنجان قهوة و اجلس "جلسة سليمة" :D و استعد للغوص معي الى مكان مجهول :lol: -------
المهم في درسنا هذا سنقوم بتعلم كيفية التعامل مع ال Processes في جهازنا مثلا اقفال برنامج من خلال اسمه او معرفة الذاكرة التي يستهلك او معرفة كم مضى من الوقت على تشغيل البرنامج المحدد و الكثير الكثير من هذه الامور فانا سأعطيكم فقط مفتاح صندوق الكنز و انتم ما عليكم سوى اكتشاف ما بداخل الصندوق...
يبدو اني أطلت في المقدمة لنبدا في الدرس بسرعة لننتهي بسرعة لأني بدأت أحس بالنعاس :D
Process.Start(Program Path)
أظن ان الجميع يعرف هذا الكود و الذي يقوم بتشغيل برنامج ما نحدد مساره نحن بطبيعة الحال, و يمكن أن نمرر Arguments الى هذا البرنامج عند تشغيله... لكن الكثيرين لازالو يجهلون التعامل مع هذه الدالة خير استعمال
اذا لنكتشف معا كيف يمكننا الاستفادة من هذه الدالة البسيطة لنجلب أسماء جميع البرامج المشغلة الآن على جهازنا و نعرضها في ListBox حتى يمكننا التعامل معها لاحقا (اذا أردنا معرفة معلومات أخرى عن اي برنامج نحدده نحن)
اولا لنبدأ بفح مشروع جديد (و اظن ان الكل يعرف ذلك :D ) و لنضع في الفورم ListBox و لنسمها ProcessesList ثم ننشئ زر نعدل ال Text الخاصة به لتكون Get Processes ... بعد ان عملنا الخطوات السابقة ندخل الآن الى الكود الذي سيكون جد سهل ان شاء الله.
اولا نقوم بكتابة التعريف التالي :
Public Proc() As Process = Process.GetProcesses
طبعا كما تلاحظون فان ال Proc عبارة عن Table من ال Process ملأناه عن طريق الدالة GetProcesses التي ستقوم بجلب جميع ال Processes المشغلة حاليا لدينا في الجهاز .
اذا لم يبقى لنا سوى ملأ ال ProcessesList و هي ال ListBox (اتمنى أن لا تكونوا نسيتوها :lol: ) و كود الملأ سوف يكون في الزر Get Processes و الكود هو التالي :
ProcessesList.Items.Clear() For Each ProcessName As Process In Proc ProcessesList .Items.Add(ProcessName.ProcessName) Next
اظن ان الكود لا يحتاج شرحا لكن لنرى ماذا يفعل فلا بأس من اطالة الدرس بضعة سطور :D
اولا قمنا بمسح عناصر ال ProcessesList ...
كما تعلمون ال For Each تقوم بعمل جولة في Collection ما لتجد لنا عنصر من نوع محدد و في كودنا أعلاه نقوم بالبحث عن كل Process في ال Table الذي قمنا سلفا بملأه بال Processes اللي على الجهاز اذا في كل مرة البرنامج سيصادف Process في ال Table المسمى Proc سيقوم البرنامج باضافة اسم البرنامج الى ال ProcessesList
و بهذا الكود البسيط سوف نحصل على لائحة بأسماء البرامج المشتغلة
جميل اذن لحد هنا كل شئ مفهوم ان شاء الله
الآن نريد اضافة زر يقوم ب"قتل" Process نختارها من ال ProcessesList اذا اولا يجب ان نضع زر بوتن نعدل Text الخاصة به الى Kill Process ثم طبعا علينا ان نكتب الكود الذي يأخذ اسم ال Process التي ضغطنا عليها و هو كود جد بسيط سنكتبه مثلا في ال Event Click الخاص ب ProcessesList ...
لكن قبل ذلك دعونا نكتب كود "القتل" و الذي سيكون Sub اسمها KillProcess و طبعا ستأخذ بارامتر و هو اسم ال Process الذي نريد قتلها (لا حول و لا قوة الا بالله العلي العظيم :D ) كود ال Sub سيكون كالتالي :
Private Sub KillProcess(ByVal Process_Name As String) For Each MyProcess As Process In Proc If MyProcess.ProcessName = Process_Name Then MyProcess.Kill End If Next End Sub
الكود كما ترون جد بسيط و هو شبيه بكون ملأ ال ProcessesList الفرق هو اننا عندما نجد Process في ال Table المسماة Proc نقوم بفحص اسمها اذا كان نفس الاسم الذي مررناه الى ال Method يقوم باستدعاء "العشماوي" :D و هو هنا دالة Kill ... اترون شئ جد جد سهل ...
طبعا الآن كود جلب اسم ال Process عند الضغط على اسمها في ال ProcessesList الكود ستتم كتابته في ال event click كما سبق و ذكرنا و الكود هو كالتالي :
Publix ProcessName As String ProcessName = ProcessesList .Items.Item(ListBox1.SelectedIndex).ToString
ثم في كود الزر نقوم بكتابة
KillProcess(ProcessName)
الكود أسهل من أن يتم شرحه
اوكي دعونا الآن نقوم باضافة بوتن يقوم باعطائنا النص المكتوب في أعلى البرنامج الذي اخترناه اذا سوف نقوم بانشاء بوتن جديدة "Get Process Title"ثم نقوم بانشاء Function جديدة لنسمها GetProcessTitle و ترجع لنا اسم نافذة البرنامج و سيكون كودها هو التالي :
Private Function GetProcessTitle(ByVal Process_Name As String) As String For Each MyProcess As Process In Pro If MyProcess.ProcessName = Process_Name Then Return MyProcess.MainWindowTitle() End If Next End Sub
الكود ايضا سهل حيث انه يبحث بين ال Processes الى ان يجد اسم ال process التي نبحث عن اسمها و يقوم بارجاع اسم نافذتها
بقي لنا كود البوتن و هو طبعا :
MsgBox GetProcessTitle(ProcessName )
اوكي الى هنا و STOP انا لن امضي لليل في تعداد كل خصائص الكلاس Process لذا فأنا أدعوكم الى اكتشافهم بأنفسكم لان هذه الدالة ستفيدكم كثيرا ان شاء الله
و أخيرا اتمنى ان يكون الدرس المتواضع هذا قد أفادكم و لو قليلا :)
و السلام عليكم و رحمة الله و بركاته و كل عام و أنتم بخير بمناسبة قرب رمضان الكريم :)

