معرفه اسماء الملفات التى قيد التشغيل
بمعنى مثلا اريد تسجيل اسماء الملفات التى تقوم بتشغيلها على الجهاز
فى ملف نصى بتشغيل التايمر للتأكد من العمليات على فترات
واشكركم قبل كل شئ على هذا المنتدى الجميل
(04-11-22, 10:14 AM)عبدالله الدوسري كتب : [ -> ]
كود :
For Each p As Process In Process.GetProcesses()
Me.RichTextBox1.Text &= p.ProcessName & vbNewLine
Next
فى البدايه اشكرك على مساعدتك لى
لاكن ما ارغب فيه هو اسم النافذه بمعنى لو قمت بتشغيل النوتىباد يكتبلى اسم الملف نفسه وليس اسم البرنامج
للأمانة بحثت عن كود سهل وخفيف ، لكن أغلب المواضيع تدخل في عمق النظام وتعقيد ،وأغلب الأكواد مكتوبة بلغة الــ ++C
من ظمن البحث : وما وجدت انه له علاقة مباشرة بطلبك هو :
NtQuerySystemInformation API to enumerate all handles ( ولكن أغلب الأمثة بالـ ++C )
هذة الأوامر تجلب كل الملفات المفتوحة في النظام ( عدد مهول من الملفات المفتوحة )
وجدت برنامج بلغة الـ ++C يستخدم هذة الأوامر على الرابط التالي
http://www.nirsoft.net/utils/opened_files_view.html
يتيح لك البرنامج إستخدام موجة الأوامر DOS لجلب البيانات من النظام ( كما هو مشروح في صفحة البرنامج )
لكن بعد تجربة البرنامج كانت هناك ملفات مفتوحة عندي ولم يظهرها ضمن القائمة
هذا كود مختلف قمت بعملة ولكن أيضاً لا يظهر كل شيء كما تريد أنت ، بعض الملفات تستطيع جلب المسار الكامل له، وبعضها فقط تستطيع جلب الاسم الموجود في النافذة المفتوحة
[
attachment=28420]
هذا ما توصلت له بعد التجربة :
تحتاج لعمل :
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
(04-11-22, 08:59 PM)عبدالله الدوسري كتب : [ -> ]للأمانة بحثت عن كود سهل وخفيف ، لكن أغلب المواضيع تدخل في عمق النظام وتعقيد ،وأغلب الأكواد مكتوبة بلغة الــ ++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
اشكرك يا اخى جزيل الشكر على تعبك معى
(04-11-22, 03:32 PM)menanaeem كتب : [ -> ] (04-11-22, 10:14 AM)عبدالله الدوسري كتب : [ -> ]
كود :
For Each p As Process In Process.GetProcesses()
Me.RichTextBox1.Text &= p.ProcessName & vbNewLine
Next
فى البدايه اشكرك على مساعدتك لى
لاكن ما ارغب فيه هو اسم النافذه بمعنى لو قمت بتشغيل النوتىباد يكتبلى اسم الملف نفسه وليس اسم البرنامج
اذا اردت اسم البرنامج او (Process) فان كود الاخ عبدالله هو المطلوب
اما اذا اردت عنوان نافذة البرنامج فاستبدل
p.ProcessName بـ p.MainWindowTitle
هذا ينطبق على النوافذ الرئيسية وليس على الابناء