تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] كيف اتمكن من فعل ذلك
#1
Exclamation 
معرفه اسماء الملفات التى قيد التشغيل 
بمعنى مثلا اريد تسجيل اسماء الملفات التى تقوم بتشغيلها على الجهاز
فى ملف نصى بتشغيل التايمر للتأكد من العمليات على فترات 
واشكركم قبل كل شئ على هذا المنتدى الجميل
الرد }}}
تم الشكر بواسطة:
#2
كود :
       For Each p As Process In Process.GetProcesses()
           Me.RichTextBox1.Text &= p.ProcessName & vbNewLine
       Next
الرد }}}
تم الشكر بواسطة: menanaeem , رضوان الجماعي , معاند الحظ
#3
(04-11-22, 10:14 AM)عبدالله الدوسري كتب :
كود :
       For Each p As Process In Process.GetProcesses()
           Me.RichTextBox1.Text &= p.ProcessName & vbNewLine
       Next

فى البدايه اشكرك على مساعدتك لى 
لاكن ما ارغب فيه هو اسم النافذه بمعنى لو قمت بتشغيل النوتىباد يكتبلى اسم الملف نفسه وليس اسم البرنامج
الرد }}}
تم الشكر بواسطة:
#4
للأمانة بحثت عن كود سهل وخفيف ، لكن أغلب المواضيع تدخل في عمق النظام وتعقيد ،وأغلب الأكواد مكتوبة بلغة الــ ++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
الرد }}}
تم الشكر بواسطة: رضوان الجماعي , bidaya , asmarsou , menanaeem
#5
(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
اشكرك يا اخى جزيل الشكر على تعبك معى
الرد }}}
تم الشكر بواسطة:
#6
(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
هذا ينطبق على النوافذ الرئيسية وليس على الابناء

الرد }}}
تم الشكر بواسطة:


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم