للأمانة بحثت عن كود سهل وخفيف ، لكن أغلب المواضيع تدخل في عمق النظام وتعقيد ،وأغلب الأكواد مكتوبة بلغة الــ ++C
من ظمن البحث : وما وجدت انه له علاقة مباشرة بطلبك هو :
NtQuerySystemInformation API to enumerate all handles ( ولكن أغلب الأمثة بالـ ++C )
هذة الأوامر تجلب كل الملفات المفتوحة في النظام ( عدد مهول من الملفات المفتوحة )
وجدت برنامج بلغة الـ ++C يستخدم هذة الأوامر على الرابط التالي
http://www.nirsoft.net/utils/opened_files_view.html
يتيح لك البرنامج إستخدام موجة الأوامر DOS لجلب البيانات من النظام ( كما هو مشروح في صفحة البرنامج )
لكن بعد تجربة البرنامج كانت هناك ملفات مفتوحة عندي ولم يظهرها ضمن القائمة
هذا كود مختلف قمت بعملة ولكن أيضاً لا يظهر كل شيء كما تريد أنت ، بعض الملفات تستطيع جلب المسار الكامل له، وبعضها فقط تستطيع جلب الاسم الموجود في النافذة المفتوحة
هذا ما توصلت له بعد التجربة :
تحتاج لعمل :
Imports System.Management
كما تحتاج إلى إضافة Reference للملف System.Management.dll من النظام
كود :
For Each p As Process In Process.GetProcesses
If p.MainWindowTitle <> "" Then
Me.RichTextBox1.Text &= "MainWindowTitle : " & p.MainWindowTitle & vbNewLine
Try
Using searcher As New ManagementObjectSearcher("SELECT CommandLine FROM Win32_Process WHERE ProcessId = " & p.Id)
Dim Result = searcher.Get()
If Result.Count > 0 Then
Dim ManagObject As ManagementObject = Result(0)
Dim Path As String = ManagObject.Item("CommandLine").ToString()
Me.RichTextBox1.Text &= Path & vbNewLine
End If
End Using
Catch : End Try
Me.RichTextBox1.Text &= "-----------------------------------------------" & vbNewLine
End If
Next