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

FindWindow

بدأه MMA_EG_Cairo في 23 أبريل 2010 · 5 رد · 693 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

المفروض ان هذه الدالة تستخدم في البحث عن نافذة محددة مفتوحة بالبرنامج

ومثال علي ذلك

x = FindWindow("NotePad", vbNullString)

ولكن هناك بعض الأشياء التي لم أتمكن من معرفتها ... علي سبيل المثال هناك في الـ Windows Task Manager برامج كثيرة مفتوحة مثل الـ Explorer

حاولت أضيف الـ Explorer بدلاً من الـ Notepad يتم إرتجاع قيمة صفرية ... وهذا يعني أنه لم يتمكن من البحث !!!

فكيف يمكنني معرفة المسمي الصحيح لأي برنامج ؟؟؟

شكراً

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#2

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

البارامتر الأول للدالة FindWIndow هو اسم الصنف (Class name) للنافذة التي تبحث عنها، و هو ليس بالضرورة اسم الملف التنفيذي للبرنامج. فقط بالصدفة أن اسم الملف التنفيذي للمفكرة هو Notepad.exe و اسم الـ Class هو Notepad.

للوصول إلى نافذة جهاز الكمبيوتر استعمل الاسم CabinetWClass.

للوصول إلى نافذة مستكشف ويندوز استعمل الاسم ExploreWClass.

للوصول إلى نافذة متصفح الإنترنت (Internet Explorer) استعمل الاسم IEFrame.

نرجو الاستفادة و السلام.

1

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#3

أشكرك أخي الكريم علي الرد السريع ... ولكن أنا لدي فكرة للأسف الشديد مش عارف أتمكن منها

المفروض أن فية طريقة للبحث عن اي برنامج بإسم الكلاس الخاص به وذلك بإستخدام FindWindows

ومن ثم من الممكن عمل إغلاق لهذه النافذة بإستخدام الدالة SendMessage

لما عملت الإجراء التالي :

Option Explicit
Public Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
        (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
        (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
        ByVal lParam As Long) As Long
Public Declare Sub FatalExit Lib "kernel32" (ByVal code As Long)

Public Sub CloseProgram(ClassName As String)
    Dim logWindow As Long
NextFind:
    logWindow = FindWindow(ClassName, vbNullString)
    Call SendMessage(logWindow, 16, 0, 0)
    If (logWindow <> 0) Then GoTo NextFind
End Sub

صحيح عملية الـ FindWindow نجحت ... ولكن SendMessage لم تنجح نهائياَ !!!

ثاني هام أنا لم أقصد إغلاق الـ Explorer بعينة ... ولكن أرغب في إغلاق سطح المكتبة نفسة !!!

فكنت ظانن أن إغلاق الـ Explorer لوحدة كافي

Call CloseProgram("ExploreWClass")

فهل هناك حل لذلك ؟؟؟؟

شكراً

تم تعديل هذه المشاركة بواسطة MMA_EG_Cairo في 23 أبريل 2010 في 19:07

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#4

لو سمحتم يا جماعة أنا محتاج هذا الكود في أسرع وقت ممكن جزاكم الله كل خير

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#5
MMA_EG_Cairo كتب:

لو سمحتم يا جماعة أنا محتاج هذا الكود في أسرع وقت ممكن جزاكم الله كل خير

post-126779-12728483669897_thumb.jpg

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#6

طيب يا جماعة فية كود بيغلق ليا الـ Explorer كما يلي

Private Declare Function FindWindow Lib "user32.dll" _
        Alias "FindWindowA" (ByVal lpClassName As String, _
        ByVal lpWindowName As String) As Long
Private Declare Sub FatalExit Lib "kernel32" (ByVal code As Long)
Private Declare Function SendMessage Lib "user32" Alias _
        "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _
        ByVal wParam As Long, ByVal lParam As Long) As Long

Public Function CloseProj(ClassName As String) As Boolean
    If SendMessage(FindWindow(ClassName, vbNullString), 16, 0, 0) > 0 Then
        Shell App.Path & "\" & App.EXEName & ".exe debugger", vbMaximizedFocus
        FatalExit 0
    End If
End Function

gفي حالة أستدعاء هذا الغرض بالكود التالي

CloseProj "Shell_TrayWnd"

للأسف الشديد بيعرض ليا شاشة الإغلاق الأعتيادية (Turn Off Computer..)

وكل اللي عايزة أغلاق الـ Explorer فقط لا غير دون أغلاق الويندوز كلياً

يا رب ألاقي حل عندكم

السلام عليكم

تم تعديل هذه المشاركة بواسطة MMA_EG_Cairo في 3 مايو 2010 في 07:21

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook