![]() |
|
تعلم كيف تتحكم في برنامج آخر من برنامجك 2 - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : تعلم كيف تتحكم في برنامج آخر من برنامجك 2 (/showthread.php?tid=4978) |
تعلم كيف تتحكم في برنامج آخر من برنامجك 2 - RaggiTech - 03-10-12 كاتب الموضوع : SAFMEHDI
في الدالة EnumChildProc ضع الكود التالي السلام عليكم - ---------------------------- تعلم كيف تتحكم في برنامج آخر من برنامجك ...2 الجزئ الثاني ---------------------------------------- لقد تطرقت في هذا الموضوع تعلم التحكم في برنامج آخر من داخل برنامجك الى مقدمة الى التحكم في النوافذ عن طريق المقبض و استخدام دوال Api الشرسة في هذا الموضوع سنحاول الوصول الى جميع الأدوات الموجودة في النافذة أو في البرنامج بحيث نستطيع تعديلهم كلهم لكن ليس كل على حدى (لي موضوع حول هذا ان شاء الله ) أولا ما يجب أن نفهم أن كل شيئ يتم و سيتم باستخدام دوال Api اذن على بركة الله افتح حبيبنا الفيجوال 2008 و انشئ مشروع جديد و سمه HandleTest2 أضف الى المشروع ليست بوكس (سنحتاجها لعرض اسماء الكنترولات ) و تكست بوكس و تايمر الآن انتقل الى محرر الأكواد صرح عن هذه الدالة 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 أضف هذه الدوال أيضا GetWindowText للحصول على التكست كود : [COLOR=#000000][COLOR=#0000bb]GetWindowTextLength للحصول على طول النص كود : [color=#000000][COLOR=#007700]Declare [/color][color=#0000bb]Auto [/color][color=#007700]Function [/color][color=#0000bb]GetWindowTextLength Lib [/color][color=#dd0000]"user32" [/color][color=#007700]([/color][color=#0000bb]ByVal hWnd [/color][color=#007700]As [/color][color=#0000bb]IntPtr[/color][color=#007700]) As [/color][COLOR=#0000bb]Integer أضف هذه الدالة البسيطة funcCallBackParent , ليست من دوال Api كود : [color=#000000][COLOR=#007700]Public [/color][color=#0000bb]Delegate [/color][color=#007700]Function [/color][color=#0000bb]funcCallBackParent[/color][color=#007700]([/color][color=#0000bb]ByVal hWnd [/color][color=#007700]As [/color][color=#0000bb]IntPtr[/color][color=#007700], [/color][color=#0000bb]ByVal lParam [/color][color=#007700]As [/color][color=#0000bb]IntPtr[/color][color=#007700]) As [/color][COLOR=#0000bb]Boolean و الآن هذه هي الدالة المهمة EnumChildWindows كود : [COLOR=#000000][COLOR=#0000bb]هذه هي الدالة المهمة و التي ستمكننا من الوصول الى الكنترولات وكما ترى لديها عدة براماتر مثل المقبض و برماتر الدالة السابقة(funcCallBackParent) الآن أنشئ هذه ال Function كود : [COLOR=#000000][COLOR=#0000bb]كما قلت سابقا سنقوم بوضع أسماء الكنترولات في الليست بوكس لذا سنحتاج الى الدالتين GetWindowText & GetWindowTextLength طريقة الا ستخدام سهلة في EnumChildProc ضع الكود التالي كود : [color=#000000][COLOR=#0000bb]Dim Str [/color][color=#007700]As New [/color][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]Text[/color][color=#007700].[/color][COLOR=#0000bb]StringBuilder ليصبح الكود كما يلي كود : [COLOR=#000000][COLOR=#0000bb]الآن أضف CheckBox و سمه Enabled في حدث CheckBox1_CheckedChanged ضع الكود التالي كود : [COLOR=#000000][COLOR=#0000bb]ضع بعض التكست بوكس على الفورم و غير نصهم وقت التصميم انتقل الى حدث التايمر و ضع الكود التالي كود : [COLOR=#000000][COLOR=#0000bb]كما ترى في الكود فان الجزء المهم هو هذا الكود كود : [color=#000000][COLOR=#0000bb] EnumChildWindows[/color][color=#007700]([/color][color=#0000bb]TextBox1[/color][color=#007700].[/color][color=#0000bb]Text[/color][color=#007700], [/color][color=#0000bb]AddressOf EnumChildProc[/color][color=#007700], [/color][color=#0000bb]IntPtr[/color][color=#007700].[/color][color=#0000bb]Zero[/color][COLOR=#007700]) استعملنا EnumChildWindows للوصول الى الكنترولات حيث TextBox1.Text يحمل عنوان مقبض النافذة المحددة EnumChildProc الاجراء الذي نريد تنفيذه IntPtr.Zero لا يهمك جرب تشغيل البرنامج واختر أي نافذة وانظر الى الليست بوكس -------------------------------------------------------- الآن سنحاول أن نقوم باخفاء كافة الكنترول الموجودة في الفورم (أي فورم) أي جعل الخاصية visible=false سنحتاج الى دالة api المسماة ShowWindow كود : [COLOR=#000000][COLOR=#0000bb]الدالة تحمل 2 برمتر البرمتر الأول خاص بالمقض و البرمتر الثاني خاص بالاخفاء أو الاظهار اذا أردت الاخفاء اجعل البرمتر الثاني يساوي 0 أما العكس اذ أردت الاظهار اجعل البرمتر 1 الاستعمال : في الدالة EnumChildProc ضع الكود التالي كود : [COLOR=#000000][COLOR=#0000bb]الآن جرب تشغيل البرنامج اختر أي نافذة و انظر ماذا حدث لقد اختفىت جميع الكنترولات الموجودة على سطح النافذة و الآن اذا أردنا اظهارهم , ماذا نفعل ؟ استبدل الصفر بالواحد هكذا كود : [COLOR=#000000][COLOR=#0000bb]----------------------------------------------------------- بنفس الطريقة نستطيع تغيير النص الموجود في التكست بوكس سنحتاج الى داة Api SetWindowText كود : [COLOR=#000000][COLOR=#0000bb]كود : [color=#000000][COLOR=#0000bb] SetWindowText[/color][color=#007700]([/color][color=#0000bb]hwnd[/color][color=#007700], [/color][color=#dd0000]"Smp3"[/color][COLOR=#007700]) الآن جرب البرنامج ولاحظ تغير خاصية Text الخاصة ب TextBox الى "Smp3" و بهذا نصل الى نهاية الجزء الثاني أترككم لتحاولوا ان تقوموا باستخدام بعض الدوال الأخرى مثل تفعيل وتعطيل الكونترول و... و ... من دوال Api و هذا مثال لكل ما قمنا به http://vb4arb.com/vb/uploaded/18_01349243365.zip أتمنى أن يعجبكم الموضوع |