منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : كيف اتمكن من فعل ذلك
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
معرفه اسماء الملفات التى قيد التشغيل 
بمعنى مثلا اريد تسجيل اسماء الملفات التى تقوم بتشغيلها على الجهاز
فى ملف نصى بتشغيل التايمر للتأكد من العمليات على فترات 
واشكركم قبل كل شئ على هذا المنتدى الجميل
كود :
       For Each p As Process In Process.GetProcesses()
           Me.RichTextBox1.Text &= p.ProcessName & vbNewLine
       Next
(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
هذا ينطبق على النوافذ الرئيسية وليس على الابناء