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

درس : تعلم التعامل مع ال Processes

مغلق
بدأه Ayoub JAMAL EL IDRISSI في 22 سبتمبر 2005 · 14 رد · 4,068 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

عهدنا في الفيجوال بيسك دوت نت البساطة و السلاسة في عمل كل ما نريد فقد أتي الدوت نت ليريح الكثيرين من عبئ دوال ال 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 لذا فأنا أدعوكم الى اكتشافهم بأنفسكم لان هذه الدالة ستفيدكم كثيرا ان شاء الله

و أخيرا اتمنى ان يكون الدرس المتواضع هذا قد أفادكم و لو قليلا :)

و السلام عليكم و رحمة الله و بركاته و كل عام و أنتم بخير بمناسبة قرب رمضان الكريم :)

تم تعديل هذه المشاركة بواسطة crazy-man في 6 أكتوبر 2005 في 22:53

#2
اقتباس
و أخيرا اتمنى ان يكون الدرس المتواضع هذا قد أفادكم و لو قليلا

و السلام عليكم و رحمة الله و بركاته و كل عام و أنتم بخير بمناسبة قرب رمضان الكريم

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

وكل عام وأنت بخير وبصحة وعافية

وجزاك الله خير على الدرس الجميل وأسلوب الشرح المرح

فلسطين الزاهية بألوان الحب والسلام

ذلك الطعم الزيتوني الذي يتدفق عسلاً من أفواه بساتينها وحدائقها

تشتاق إليها نفوس المتقين وترنوا للسجود فيها جباه المسلمين

#5

اخي العزيز بارك الله فيك علي هذا العمل الطيب

انا قرأت الدرس جيداً ولكن واجهني بعد المشاكل مثل For Each MyProcess As Process In pro

وهذا الكود ProcessName = ProcessesList.Items.Item(ListBox1.SelectedIndex).ToString

يظهر لي رسالة خطأ Specified argument was out of the range of valid values

فلو امكن ان تضع لنا مثال لنقوم بتحميلة ربنا اكون نقلت الكود بشكل خاطئ

ورمضان كريم

يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل

سبحان الله وبحمده ... سبحان الله العظيم

#6

درس رائع

شكرا :)

جزاك الله خير

Nothing to mention except that I am Muslim

Using your brain is not bad as you think

My Blog

logo.jpg

#8

بارك الله فيك اخي crazy-man

المثال شغال 100 %

يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل

سبحان الله وبحمده ... سبحان الله العظيم

#9

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

خارج الموضوع للأهمية :

اقتباس
بسم الله الرحمـان الرحيم

الرحمـان != الرحمن

تم تعديل هذه المشاركة بواسطة Ahmed H. Alawady في 6 أكتوبر 2005 في 17:25

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#10

السلام عليكم

أخي الكريم Crazy-Man شكرا لك ..

الحقيقة الطريقة فعالة و لكن ممكن توضيح

Public Proc() As Process = Process.GetProcesses

هذا الإعلان لم أهضمه كثيرا .. يعني لم الأقواس بعد Proc هل لأنه من نوع Table و ما السبب أنه من النوع Table..

و إن كان لا يحق لي أن أوجه ملاحظة ^.^ولكن أعتقدإذا ماكنت غلطان أنك كان يجب ان تقوم بتحديث الProcesses بعد كل Kill ..

على فكرة ما هو الProcesses

وشكرا لك .

#11

Public Proc() As Process = Process.GetProcesses

هذا لأن الGetProcesses ترجع مصفوفة لأانها ليست process التى تعمل على الجهاز و لكنها مجموعة من process

أحمد صلاح

#12

كما قال لك الأخ Dev ال Process.GetProcesses ترجع لك مصفوفة من تحتوي على ال Processes المشتغلة على الجهاز لذلك ننشئ لها Table لنتعامل مع كل واحدة على حدى

بالنسبة لسؤالك الثاني أظن انه لا داعي لتحديث ال Processes كل مرة بعد القتل :D و لكن يكفي حذف اسم ال process من ال listbox و يمكنك أيضا لو اردت ان تضع عملية ملأ ال listbox بال processes في Timer حت يتم التحديث تلقائيا

اما عن ماذا تعني Process فهي البرامج المشتغلة على جهاز المخفي منها و الظاهر

و الله أعلم

#13

السلام عليكم ورحمة الله

موضوع رائع

شكرا على المجهود

ولمن سأل عن البروسيس أنظر الصورة w6w_20051008193237f6ff1d6f.JPG

#14

بسم الله الرحمن الرحيم

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

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

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

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

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

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

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#15

سؤال اذا ممكن

اذا أردت تنفيذ امر على ملف exe لكنه ليس موجود في ملف root الذي يمكن الوصول اليه بـ application.startuppath

وانما موجود في مكان اخر او موجود في مجلد داخل ملف الroot

فكيف يمكن ذلك؟

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

هذا الموضوع مغلق.

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