![]() |
|
تعلم التحكم في برنامج آخر من داخل برنامجك - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (https://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (https://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (https://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : تعلم التحكم في برنامج آخر من داخل برنامجك (/showthread.php?tid=4975) |
تعلم التحكم في برنامج آخر من داخل برنامجك - RaggiTech - 03-10-12 كاتب الموضوع : 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=#000000][COLOR=#0000bb]يعيب هذه الدالة أنها تقوم بالحصول على عنوان النافذة النشطة فقط ثانيا : دالة FindWindow تقوم هذه الدالة بالحصول على عنوان مقبض نافذة و هذا عن طريق تمرير عنزان النافذة الى أحد برماتراتها و هذا مثال للاستخدام صرح عن هذه الدالة كود : [COLOR=#000000][COLOR=#0000bb]حيث lpClassName هو الكلاس و lpWindowName عنوان النافذة ضع في الزر أو الفورم لواد الكود التالي كود : [COLOR=#000000][COLOR=#0000bb]سنقوم بالحصول على مقبض النافذة التي عنوانها 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=#000000][COLOR=#0000bb]MsgBox[/color][color=#007700]([/color][color=#0000bb]GetForegroundWindow[/color][COLOR=#007700]) كما يمكنك الحصول على مقبض نافذة برنامجك من دون استعمال دوال Api ضع الكود التالي في الفورم لواد كود : [color=#000000][COLOR=#0000bb] MsgBox[/color][color=#007700]([/color][color=#0000bb]Me[/color][color=#007700].[/color][color=#0000bb]Handle[/color][COLOR=#007700]) ---------------------------------------------------------------------------------------------------- الآن أنشئ مشروع جديد واسمه 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 الآن جرب تشغيل البرنامج و قم باختيار أي نافذة و ستلاحظ ظهور عنوان المقبض الخاص بها في التكست بوكس ------------------------------------------------- الآن سنقوم بالتجريب احد دوال Api صرح عن هذه الدالة FlashWindow كود : [COLOR=#000000][COLOR=#0000bb]تقوم هذه الدالة باضاءة النافذة في حدث التايمر ضع الكود التالي كود : [COLOR=#000000][COLOR=#0000bb]الآن شغل أي البرنامج و ستلاحظ توهج النافذة التي تختارها ========================================= الآن قم بالتصريح عن هذه الدالة 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=#000000][COLOR=#0000bb] TextBox1[/color][color=#007700].[/color][color=#0000bb]Text [/color][color=#007700]= [/color][COLOR=#0000bb]GetForegroundWindow البراماتر الأول و هو المقبض و الثاني واضح وهو العنوان الجديد جرب الآن تشغيل البرنامج و اختر أي نافذة و ستلاحظ تغير في عنوانها ===================================== المهم الموضوع ليس لعرض و شرح دوال Api فقط أردت ان أقوم بتقديم بعض الأمثلة لا غير ملاحظة : ليست كل دوال Api نستطيع استخدمها للتحكم في برنامج آخر عن طريق المقبض يجب ان تحتوي الدالة على البراماتر الخاص بالمقبض و عادة يكون هذا البراماتر هو الأول و تجد اسمه hwnd وفي المرفقات ستجد المشروع الذي قمنا بعمله اضافة الى دالتين جديدتين و بهذا نصل الى نهاية الدرس أتمنى أن يعجبكم |