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

كيف اجلب الHandles الخاصة بprocess معين؟؟؟؟

بدأه Rasool Micro في 10 فبراير 2012 · 17 رد · 611 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام وعليكم اخوان

لابد انكم سمعتم بالhandles وانتم كما تعرفون فان كل بروسس موجود في الذاكرة لديه عدة مصادر او ملفات او حتى نوافذ يستعملها في عملياته وهذه الملفات او النوافذ لديها handle لكل واحدة تميزها عن الاخرى...

وانا قد كتبت برنامج لجلب البروسس الموجودة في الذاكرة ولكن كيف اجلب الhandles الخاصة به وكيف اقوم بغلق هذا الhandle؟؟؟؟؟؟؟ هذا هو سؤالي

ارجوا ان تكون لديكم الاجابة وشكراً

#2

السلام عليكم.

ممكن تضع كود جلب البروسس الذي كتبته حتى نضع الكود المناسب؟

#3
        For Each P As Process In Process.GetProcesses()
            listbox1.items.add(P)
        Next
#4

ال Handle موجود كخاصية للمتحول P ( من نوع Process و هذه الخاصية اسمها: Id

و لاغلاق البروسس استخدم الكود:

        For Each P As Process In Process.GetProcesses()
            If P.ProcessName = "notepad" Then
                P.Kill()
            End If
        Next
#5
Adel Khayata كتب:

ال Handle موجود كخاصية للمتحول P ( من نوع Process و هذه الخاصية اسمها: Id

و لاغلاق البروسس استخدم الكود:

        For Each P As Process In Process.GetProcesses()
            If P.ProcessName = "notepad" Then
                P.Kill()
            End If
        Next

لا اخي لم تفهم قصدي بعد

سأعطيك مثال:

لنفترض هذا البروسس اسمه wuauclt.exe والid هو 2264 اما الhandles الذي يستخدمه في عملياته (وهي مجموعة من الملفات) كالتالي:

C: File (RW-) C:\WINDOWS\system32

64: File (RW-) C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83

68: File (RW-) C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83

6C: File (RW-) C:\WINDOWS\WindowsUpdate.log

فكما ترى، في الملف الاول "C: File (RW-) C:\WINDOWS\system32" فان C: هو رقم الhandle، نوعه: هو file، امكانية الوصول: RW اي قراءة وكتابة ،الملف: كل الملفات في system32

هل وضحت الفكرة

في المرفقات يوجد برنامج اسمه Handle فقط ضعه في system32 ومن ثم افتح سطر الاوامر واكتب handle >C:\d.txt فسيعطيك ملف تكست في السواقة C وفيها كل الprocesses مع الhandles الخاصة بها.....

هل وضحت الفكرة ام لا؟؟؟

handle.zip

#6

طيب بناءاً على الشرح الأخير: ممكن توضح ماذا تريد بالضبط ؟ إذ يبدو لي ماشاء الله أنك حصلت على كل معلومات البروسس و تفاصيلها !!

#7
Adel Khayata كتب:

طيب بناءاً على الشرح الأخير: ممكن توضح ماذا تريد بالضبط ؟ إذ يبدو لي ماشاء الله أنك حصلت على كل معلومات البروسس و تفاصيلها !!

اخي لقد قلت لك اني اريد ان اجلب الHandles الخاصة بالملفات المفتوحة للبروسس معين..........

#8

أخي هل جربت استخدام ProcessModuleCollection ؟؟

جرب الكود التالي :

  Dim Proces As Process() = Process.GetProcessesByName("Explorer")
        For Each MemProcess As Process In Proces
            ListBox1.Items.Add("اسم العملية : " & MemProcess.ProcessName)
            ListBox1.Items.Add("معلومات الوحدة : ")
            Dim Pcoll As ProcessModuleCollection = MemProcess.Modules
            For Each PMod As ProcessModule In Pcoll
                ListBox1.Items.Add("اسم الوحدة : " & PMod.ModuleName)
                ListBox1.Items.Add("العنوان : " & PMod.BaseAddress.ToString)
                ListBox1.Items.Add(vbNewLine)
            Next
        Next

طبعا هذا للـ Explorer ... وبالإمكان الاستعلام من خلال رقم العملية باستخدام Process.GetProcessById إن شئت أو العملية الحالية من خلال Process.GetCurrentProcess

... إذا كنت تعتقد أن مشاركتي مفيده ، الرجاء قم بتقييمي ...

%2525D8%2525A8%2525D8%2525B5%2525D9%252585%2525D8%2525A9%252B%2525D8%2525B9%2525D9%252584%2525D9%252585%252B%2525D9%252588%2525D8%2525B5%2525D8%2525B1%2525D8%2525AE%2525D8%2525A9%252B%2525D8%2525A7%25

#9
عاشق للبرمجة كتب:

أخي هل جربت استخدام ProcessModuleCollection ؟؟

جرب الكود التالي :

  Dim Proces As Process() = Process.GetProcessesByName("Explorer")
        For Each MemProcess As Process In Proces
            ListBox1.Items.Add("اسم العملية : " & MemProcess.ProcessName)
            ListBox1.Items.Add("معلومات الوحدة : ")
            Dim Pcoll As ProcessModuleCollection = MemProcess.Modules
            For Each PMod As ProcessModule In Pcoll
                ListBox1.Items.Add("اسم الوحدة : " & PMod.ModuleName)
                ListBox1.Items.Add("العنوان : " & PMod.BaseAddress.ToString)
                ListBox1.Items.Add(vbNewLine)
            Next
        Next

طبعا هذا للـ Explorer ... وبالإمكان الاستعلام من خلال رقم العملية باستخدام Process.GetProcessById إن شئت أو العملية الحالية من خلال Process.GetCurrentProcess

اخي هل انت متأكد بان "PMod.BaseAddress.ToString" هو الHandle؟ يعني الHandle=العنوان؟

#10
Rasool Micro كتب:

اخي هل انت متأكد بان "PMod.BaseAddress.ToString" هو الHandle؟ يعني الHandle=العنوان؟

أخي الـ Handle عبارة عن رقم Long يتم تعيينه لكل نافذة في النظام ، أما عن أن الـ Handle هو نفسه الـ BaseAddress فلست متأكد .. ولكن لكي تتأكد حاول جلب الـ Handle للـ DeskTop فإن كان ال BaseAddress = 0 فالـ BaseAdress هو ال Handle ....

أعانك الله ..

... إذا كنت تعتقد أن مشاركتي مفيده ، الرجاء قم بتقييمي ...

%2525D8%2525A8%2525D8%2525B5%2525D9%252585%2525D8%2525A9%252B%2525D8%2525B9%2525D9%252584%2525D9%252585%252B%2525D9%252588%2525D8%2525B5%2525D8%2525B1%2525D8%2525AE%2525D8%2525A9%252B%2525D8%2525A7%25

#11
عاشق للبرمجة كتب:

أخي الـ Handle عبارة عن رقم Long يتم تعيينه لكل نافذة في النظام ، أما عن أن الـ Handle هو نفسه الـ BaseAddress فلست متأكد .. ولكن لكي تتأكد حاول جلب الـ Handle للـ DeskTop فإن كان ال BaseAddress = 0 فالـ BaseAdress هو ال Handle ....

أعانك الله ..

اخي لقد قمت بتجربة البرنامج ولا اظن ان الكود الذي اعطيتني اياه هو ما اريده، حيث قمت بتجربة برنامج (وهو موجود في المرفقات في احد الردود) واستخرجت Handles الخاصة ببروسس اسمه SVCHOST ولكن لم يجلب كل الHandles او بالاحرى لا اظن انه يجلب الHandles ممكن ملفات من نوع معين.. .!!!! لا اعرف بالضبط لكن ليس هو الكود الصحيح :sad:

ارجو ان يكون لديك حل اخر لاني محتاج لهذا البرنامج جداً

#12
Rasool Micro كتب:

اخي لقد قمت بتجربة البرنامج ولا اظن ان الكود الذي اعطيتني اياه هو ما اريده، حيث قمت بتجربة برنامج (وهو موجود في المرفقات في احد الردود) واستخرجت Handles الخاصة ببروسس اسمه SVCHOST ولكن لم يجلب كل الHandles او بالاحرى لا اظن انه يجلب الHandles ممكن ملفات من نوع معين.. .!!!! لا اعرف بالضبط لكن ليس هو الكود الصحيح :sad:

ارجو ان يكون لديك حل اخر لاني محتاج لهذا البرنامج جداً

أخي كما قلت لك لست متأكد من ذلك ، ولكن جرب الرابط التالي فلربما يفيدك :

http://vbnet.mvps.org/code/system/toolhelpprocesses.htm

أعاتك الله أخي الكريم

... إذا كنت تعتقد أن مشاركتي مفيده ، الرجاء قم بتقييمي ...

%2525D8%2525A8%2525D8%2525B5%2525D9%252585%2525D8%2525A9%252B%2525D8%2525B9%2525D9%252584%2525D9%252585%252B%2525D9%252588%2525D8%2525B5%2525D8%2525B1%2525D8%2525AE%2525D8%2525A9%252B%2525D8%2525A7%25

#13

أخي هل الـHandle هو رقم :sad:

فإذا كان هذا هو فأنا قد وجدت الحل (قد يساعدك)

وإذا أردت أيضاً إغلاقه فالكود أيضاً يقوم بعمليت إغلاقه ولكن بحسب اسم البروسس

رجعت ومازال الفريق خاملاَ  :( 


 


abPuw.1.gif

#14

ولكنه دائماً يتغير هذا الرقم !!!

رجعت ومازال الفريق خاملاَ  :( 


 


abPuw.1.gif

#15

اخي bahbah، :)

هذا الرابط يشرح لك ما هو ال Handle

ولا يمكن الجزم بأنه رقم وانما يعبر بأنه نص سداسي عشر يعتبر كعنوان او رقم الملف المستعمل من قبل بروسس معين.....

هل وجدت الحل بالفعل ؟؟؟ :lol:

ارجوا ذلك

#16

أخي لا أعتقد أني وجدته ولكن لا ضير بأن أعطيك الكود الذ وصلت إليه

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, _
                              ByVal e As System.EventArgs) Handles Button1.Click
        For Each RunningProcess In Process.GetProcessesByName("explorer")

Button1.Text = RunningProcess.Handle()
            ListBox1.Items.Add(RunningProcess.Handle())
        Next
    End Sub
    Private Sub Form1_Load(ByVal sender As Object, _
                           ByVal e As System.EventArgs) Handles Me.Load
        For Each RunningProcess In Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName)
            If (Not RunningProcess.Id = Process.GetCurrentProcess().Id) Then
                RunningProcess.Kill()
            End If
        Next

    End Sub

End Class

ولإغلاق البروسس لو كان مفتوح Explorer بإمكانك تغيير إلى أي برنامج

RunningProcess.Kill

لقد بحثت كثيراً ولكن لا يوجد أي أحد يتكلم عنه في الفيجوال بيسك دوت نيت هناك من يتحدث فيه ولكن في C++ أو C#

فقط !!!

رجعت ومازال الفريق خاملاَ  :( 


 


abPuw.1.gif

#17
bahbah كتب:

أخي لا أعتقد أني وجدته ولكن لا ضير بأن أعطيك الكود الذ وصلت إليه

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, _
                              ByVal e As System.EventArgs) Handles Button1.Click
        For Each RunningProcess In Process.GetProcessesByName("explorer")

Button1.Text = RunningProcess.Handle()
            ListBox1.Items.Add(RunningProcess.Handle())
        Next
    End Sub
    Private Sub Form1_Load(ByVal sender As Object, _
                           ByVal e As System.EventArgs) Handles Me.Load
        For Each RunningProcess In Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName)
            If (Not RunningProcess.Id = Process.GetCurrentProcess().Id) Then
                RunningProcess.Kill()
            End If
        Next

    End Sub

End Class

ولإغلاق البروسس لو كان مفتوح Explorer بإمكانك تغيير إلى أي برنامج

RunningProcess.Kill

لقد بحثت كثيراً ولكن لا يوجد أي أحد يتكلم عنه في الفيجوال بيسك دوت نيت هناك من يتحدث فيه ولكن في C++ أو C#

فقط !!!

اخي بالنسبة للكود الذي اعطيتني اياه فليس هو المطلوب.... :mad:

لاني اريد مجموعة Handles الخاصة بالملفات المفتوحة من قبل البروسس

وبالنسبة للبحث في الكوكل فيا ريت تعطيتني روابط حتى لو بالسي شارب لكن فيه بعض الشرح ان امكن

#18

هذه هي الروابط :

إضغط على الرقم

1

2

3

4

5

6

7

8

9

10

11

12

الرقم 12 وأيضاً بعض الأرقام لا أتذكرها قد تفيدك أكثر ، وإذا وجدت ضالتك أرجوا أن تخبرني :happy:

تم تعديل هذه المشاركة بواسطة bahbah في 18 فبراير 2012 في 15:59

رجعت ومازال الفريق خاملاَ  :( 


 


abPuw.1.gif

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