تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
تعلم التحكم في برنامج آخر من داخل برنامجك
#1
كاتب الموضوع : SAFMEHDI



السلام عليكم




اليوم أنا في عطلة من الدراسة بسبب الاضراب و قد ساعدتني هذه العطلة كثيرا
لذا فكرت في كتابة هذا الموضوع
منذ مدة و ضعت في المنتدى سؤال حول التحكم في برنامج آخر عن طريق المقبض لكن لم أجد أي اجابة شافية و بعد محاولات كثيرة توصلت الى الحل
وما دفعني لكتابة هذا الموضوع هو كثرة الأسئلة التي دارت عليه


اذن على بركة الله

قبل مانبدأ سنحتاج الى معرفة بعض الأمور ألا وهي المقبض

فما هو المقبض ياترى ؟

بكل بساطة المقبض أو مايعرف ب Handle هو مقبض النافذة يعني لكل نافذة رقم معين لنميز به النوافذ و هذا الرقم يتغير كل ما أعدنا تشغيل النافذة أو البرنامج و يستحيل أن نجد لنافذتين نفس عنوان المقبض

فيما سيساعدنا المقبض؟

سيساعدنا على التحكم في النوافذ الأخرى من برنامجنا عبر دوال Api

كيف نستطيع الحصول على مقبض نافذة ؟

ببساطة نستطيع ذلك بواسطة دوال Api

أولا باستخدام دالة GetActiveWindow

تقوم هذه الدالة بتحديد مقبض النافذة النشطة
و هذا مثال للاستخدام

قم بالتصريح عن هذه الدالة تحت كلاس الفورم



كود :
[color=#000000][COLOR=#007700]Declare Function [/color][color=#0000bb]GetActiveWindow Lib [/color][color=#dd0000]"user32" [/color][color=#0000bb]Alias [/color][color=#dd0000]"GetActiveWindow" [/color][color=#007700]() As [/color][COLOR=#0000bb]Integer  
[/COLOR][/COLOR]

في حدث زر الحصول على المقبض ضع الكود التالي


كود :
[COLOR=#000000][COLOR=#0000bb]
  MsgBox[/COLOR][color=#007700]([/color][color=#0000bb]GetActiveWindow[/color][COLOR=#007700])  
[/COLOR][/COLOR]

يعيب هذه الدالة أنها تقوم بالحصول على عنوان النافذة النشطة فقط

ثانيا : دالة FindWindow

تقوم هذه الدالة بالحصول على عنوان مقبض نافذة و هذا عن طريق تمرير عنزان النافذة الى أحد برماتراتها

و هذا مثال للاستخدام

صرح عن هذه الدالة


كود :
[COLOR=#000000][COLOR=#0000bb]
    [/COLOR][color=#007700]Declare Function [/color][color=#0000bb]FindWindow Lib [/color][color=#dd0000]"user32" [/color][color=#0000bb]Alias [/color][color=#dd0000]"FindWindowA" [/color][color=#007700]([/color][color=#0000bb]ByVal lpClassName [/color][color=#007700]As [/color][color=#0000bb]String[/color][color=#007700], [/color][color=#0000bb]ByVal lpWindowName [/color][color=#007700]As [/color][color=#0000bb]String[/color][color=#007700]) As [/color][COLOR=#0000bb]Integer  
[/COLOR][/COLOR]


حيث lpClassName هو الكلاس و lpWindowName عنوان النافذة
ضع في الزر أو الفورم لواد الكود التالي


كود :
[COLOR=#000000][COLOR=#0000bb]
  MsgBox[/COLOR][color=#007700]([/color][color=#0000bb]FindWindow[/color][color=#007700]([/color][color=#0000bb]Nothing[/color][color=#007700], [/color][color=#dd0000]"Form1"[/color][COLOR=#007700]))  
[/COLOR][/COLOR]

سنقوم بالحصول على مقبض النافذة التي عنوانها Form1

يجب ان يكون عنوان النافذة الذي تريد الحصول على مقبضه أن يكون صحيحا والا عادت هذه الدالة بالصفر

ثالثا : دالة GetForegroundWindow

وهي الدالة التي أفضلها لانها تستطيع الحصول على أي مقبض نافذة سواء كانت نشطة أو غير نشطة


و هذا مثال للاستخدام

صرح عن هذه الدالة


كود :
[color=#000000][COLOR=#007700]Declare Function [/color][color=#0000bb]GetForegroundWindow Lib [/color][color=#dd0000]"user32" [/color][color=#0000bb]Alias [/color][color=#dd0000]"GetForegroundWindow" [/color][color=#007700]() As [/color][COLOR=#0000bb]Integer  
[/COLOR][/COLOR]

في الفورم لواد ضع الكود التالي


كود :
[color=#000000][COLOR=#0000bb]MsgBox[/color][color=#007700]([/color][color=#0000bb]GetForegroundWindow[/color][COLOR=#007700])  
[/COLOR][/COLOR]


كما يمكنك الحصول على مقبض نافذة برنامجك من دون استعمال دوال Api

ضع الكود التالي في الفورم لواد



كود :
[color=#000000][COLOR=#0000bb]   MsgBox[/color][color=#007700]([/color][color=#0000bb]Me[/color][color=#007700].[/color][color=#0000bb]Handle[/color][COLOR=#007700])  
[/COLOR][/COLOR]

----------------------------------------------------------------------------------------------------


الآن أنشئ مشروع جديد واسمه HandleTest
أضف للمشروع تايمر و أداة TextBox
اجعل خاصية Interval للتايمر تساوي 1
اجعل خاصية Enabled تساوي True
اجعل خاصية TopMost للفورم تساوي True
سنستعمل الدالة GetForegroundWindow لانها الأفضل للحصول على مقبض الشاشة
في حدث التايمر Tick
ضع الكود التالي


كود :
[color=#000000][COLOR=#0000bb]  TextBox1[/color][color=#007700].[/color][color=#0000bb]Text [/color][color=#007700]= [/color][COLOR=#0000bb]GetForegroundWindow  
[/COLOR][/COLOR]

الآن جرب تشغيل البرنامج و قم باختيار أي نافذة و ستلاحظ ظهور عنوان المقبض الخاص بها في التكست بوكس

-------------------------------------------------


الآن سنقوم بالتجريب احد دوال Api
صرح عن هذه الدالة FlashWindow


كود :
[COLOR=#000000][COLOR=#0000bb]
    [/COLOR][color=#007700]Declare Function [/color][color=#0000bb]FlashWindow Lib [/color][color=#dd0000]"user32" [/color][color=#0000bb]Alias [/color][color=#dd0000]"FlashWindow" [/color][color=#007700]([/color][color=#0000bb]ByVal hwnd [/color][color=#007700]As [/color][color=#0000bb]Long[/color][color=#007700], [/color][color=#0000bb]ByVal bInvert [/color][color=#007700]As [/color][color=#0000bb]Long[/color][color=#007700]) As [/color][COLOR=#0000bb]Long  
[/COLOR][/COLOR]

تقوم هذه الدالة باضاءة النافذة
في حدث التايمر ضع الكود التالي

كود :
[COLOR=#000000][COLOR=#0000bb]
TextBox1[/COLOR][color=#007700].[/color][color=#0000bb]Text [/color][color=#007700]= [/color][COLOR=#0000bb]GetForegroundWindow
        Dim Hwnd [/COLOR][color=#007700]As [/color][color=#0000bb]String [/color][color=#007700]= [/color][color=#0000bb]TextBox1[/color][color=#007700].[/color][COLOR=#0000bb]Text
        FlashWindow[/COLOR][color=#007700]([/color][color=#0000bb]Hwnd[/color][color=#007700], [/color][color=#0000bb]1[/color][COLOR=#007700])  
[/COLOR][/COLOR]

الآن شغل أي البرنامج و ستلاحظ توهج النافذة التي تختارها

=========================================
الآن قم بالتصريح عن هذه الدالة SetWindowText


كود :
[color=#000000][COLOR=#007700]Declare [/color][color=#0000bb]Auto [/color][color=#007700]Function [/color][color=#0000bb]SetWindowText Lib [/color][color=#dd0000]"user32" [/color][color=#007700]([/color][color=#0000bb]ByVal hWnd [/color][color=#007700]As [/color][color=#0000bb]IntPtr[/color][color=#007700], [/color][color=#0000bb]ByVal Text [/color][color=#007700]As [/color][color=#0000bb]String[/color][color=#007700]) As [/color][COLOR=#0000bb]Boolean  
[/COLOR][/COLOR]

تقوم هذه الدالة بتغيير عنوان أي نافذة

في حدث التايمر ضع الكود التالي


كود :
[color=#000000][COLOR=#0000bb]    TextBox1[/color][color=#007700].[/color][color=#0000bb]Text [/color][color=#007700]= [/color][COLOR=#0000bb]GetForegroundWindow
        Dim Hwnd [/COLOR][color=#007700]As [/color][color=#0000bb]String [/color][color=#007700]= [/color][color=#0000bb]TextBox1[/color][color=#007700].[/color][COLOR=#0000bb]Text

        SetWindowText[/COLOR][color=#007700]([/color][color=#0000bb]Hwnd[/color][color=#007700], [/color][color=#dd0000]"Vb4arab"[/color][COLOR=#007700])  
[/COLOR][/COLOR]

البراماتر الأول و هو المقبض و الثاني واضح وهو العنوان الجديد

جرب الآن تشغيل البرنامج و اختر أي نافذة و ستلاحظ تغير في عنوانها

=====================================

المهم الموضوع ليس لعرض و شرح دوال Api
فقط أردت ان أقوم بتقديم بعض الأمثلة لا غير

ملاحظة : ليست كل دوال Api نستطيع استخدمها للتحكم في برنامج آخر عن طريق المقبض
يجب ان تحتوي الدالة على البراماتر الخاص بالمقبض و عادة يكون هذا البراماتر هو الأول و تجد اسمه hwnd



وفي المرفقات ستجد المشروع الذي قمنا بعمله اضافة الى دالتين جديدتين


و بهذا نصل الى نهاية الدرس

أتمنى أن يعجبكم







الملفات المرفقة
.rar   HandleTest.rar (الحجم : 63.96 ك ب / التحميلات : 105)
}}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [مقال] دمج كل ملفات برنامجك الى ملف تنفيذى واحد ali.alfoly 25 7,852 02-12-16, 04:04 PM
آخر رد: ali.alfoly
  [VB.NET] شرح انشاء برنامج لتسجيل الدخول للمنتدى CLARO 2 427 27-10-16, 04:03 PM
آخر رد: rafaag777
  طباعة بيانات موجودة في برنامج على ( 2003 Microsoft Office Word ) abulayth 1 267 11-09-16, 07:20 AM
آخر رد: أبووسم
  حصرياً ( إطبع على الوورد من خلال برنامجك ) ( شرح بالصور ) m.sami.ak 20 1,957 20-08-16, 11:53 PM
آخر رد: الوادي
  الاستفادة من بارمترات الاخراج من SQL Server داخل برنامجك ابو ليلى 1 195 20-08-16, 02:16 AM
آخر رد: الوادي
Information تحميل برنامج الفيجوال بيسك 2010 download visual basic 2010 mohamed atef2018 0 256 09-07-16, 08:30 PM
آخر رد: mohamed atef2018
  العلاقات بين الجداول-الاضافة و الحذف و التعديل-برنامج لحفظ مصادر الموقع ابو ليلى 10 862 23-06-16, 01:13 PM
آخر رد: yasser_72
  شرح انشاء برنامج تحويل صيغ الملفات الصوتيه CLARO 9 312 02-06-16, 11:13 AM
آخر رد: CLARO
  [مشروع] مشروع برنامج لتشغيل ملفات mp3 alking-0999 1 386 01-06-16, 10:20 PM
آخر رد: CLARO
Star [VB.NET] شرح عمل امتداد خاص لبرامجك وجعل برنامجك يقرأ هذة الملفات mohammed_gamal381 22 7,361 01-06-16, 02:55 PM
آخر رد: ابراهيم كركوكي

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


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