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




السلام عليكم
-
----------------------------


تعلم كيف تتحكم في برنامج آخر من برنامجك ...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  
[/COLOR][/COLOR]

أضف هذه الدوال أيضا

GetWindowText للحصول على التكست


كود :
[COLOR=#000000][COLOR=#0000bb]
    [/COLOR][color=#007700]Declare [/color][color=#0000bb]Auto [/color][color=#007700]Function [/color][color=#0000bb]GetWindowText 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 lpString [/color][color=#007700]As [/color][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]Text[/color][color=#007700].[/color][color=#0000bb]StringBuilder[/color][color=#007700], [/color][color=#0000bb]ByVal nMaxCount [/color][color=#007700]As [/color][color=#0000bb]Integer[/color][color=#007700]) As [/color][COLOR=#0000bb]Integer  
[/COLOR][/COLOR]


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  
[/COLOR][/COLOR]

أضف هذه الدالة البسيطة 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  
[/COLOR][/COLOR]

و الآن هذه هي الدالة المهمة EnumChildWindows


كود :
[COLOR=#000000][COLOR=#0000bb]
    Friend [/COLOR][color=#007700]Declare Function [/color][color=#0000bb]EnumChildWindows Lib [/color][color=#dd0000]"User32" [/color][color=#007700]([/color][color=#0000bb]ByVal hWndParent [/color][color=#007700]As [/color][color=#0000bb]IntPtr[/color][color=#007700], [/color][color=#0000bb]ByVal funcCallBack [/color][color=#007700]As [/color][color=#0000bb]funcCallBackParent[/color][color=#007700], [/color][color=#0000bb]ByVal lParam [/color][color=#007700]As [/color][color=#0000bb]IntPtr[/color][color=#007700]) As [/color][COLOR=#0000bb]Boolean  
[/COLOR][/COLOR]

هذه هي الدالة المهمة و التي ستمكننا من الوصول الى الكنترولات
وكما ترى لديها عدة براماتر مثل المقبض و برماتر الدالة السابقة(funcCallBackParent)

الآن أنشئ هذه ال Function



كود :
[COLOR=#000000][COLOR=#0000bb]
[/COLOR][color=#007700]Public Function [/color][color=#0000bb]EnumChildProc[/color][color=#007700]([/color][color=#0000bb]ByVal hwnd [/color][color=#007700]As [/color][color=#0000bb]Long[/color][color=#007700], [/color][color=#0000bb]ByVal lParam [/color][color=#007700]As [/color][color=#0000bb]Long[/color][color=#007700]) As [/color][COLOR=#0000bb]Long
     هنا نضع جميع العمليات التي نريدها  
        EnumChildProc [/COLOR][color=#007700]= [/color][COLOR=#0000bb]1
    End [/COLOR][COLOR=#007700]Function  
[/COLOR][/COLOR]

كما قلت سابقا سنقوم بوضع أسماء الكنترولات في الليست بوكس

لذا سنحتاج الى الدالتين 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
        Str[/COLOR][color=#007700].[/color][color=#0000bb]Capacity [/color][color=#007700]= [/color][color=#0000bb]GetWindowTextLength[/color][color=#007700]([/color][color=#0000bb]hwnd[/color][color=#007700]) + [/color][COLOR=#0000bb]1
        GetWindowText[/COLOR][color=#007700]([/color][color=#0000bb]hwnd[/color][color=#007700], [/color][color=#0000bb]Str[/color][color=#007700], [/color][color=#0000bb]Str[/color][color=#007700].[/color][color=#0000bb]Capacity[/color][COLOR=#007700])
        [/COLOR][color=#0000bb]ListBox1[/color][color=#007700].[/color][color=#0000bb]Items[/color][color=#007700].[/color][color=#0000bb]Add[/color][color=#007700]([/color][color=#0000bb]Str[/color][color=#007700].[/color][color=#0000bb]ToString[/color][COLOR=#007700])  
[/COLOR][/COLOR]

ليصبح الكود كما يلي


كود :
[COLOR=#000000][COLOR=#0000bb]
[/COLOR][color=#007700]Public Function [/color][color=#0000bb]EnumChildProc[/color][color=#007700]([/color][color=#0000bb]ByVal hwnd [/color][color=#007700]As [/color][color=#0000bb]Long[/color][color=#007700], [/color][color=#0000bb]ByVal lParam [/color][color=#007700]As [/color][color=#0000bb]Long[/color][color=#007700]) As [/color][COLOR=#0000bb]Long
        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
        Str[/COLOR][color=#007700].[/color][color=#0000bb]Capacity [/color][color=#007700]= [/color][color=#0000bb]GetWindowTextLength[/color][color=#007700]([/color][color=#0000bb]hwnd[/color][color=#007700]) + [/color][COLOR=#0000bb]1
        GetWindowText[/COLOR][color=#007700]([/color][color=#0000bb]hwnd[/color][color=#007700], [/color][color=#0000bb]Str[/color][color=#007700], [/color][color=#0000bb]Str[/color][color=#007700].[/color][color=#0000bb]Capacity[/color][COLOR=#007700])
        [/COLOR][color=#0000bb]ListBox1[/color][color=#007700].[/color][color=#0000bb]Items[/color][color=#007700].[/color][color=#0000bb]Add[/color][color=#007700]([/color][color=#0000bb]Str[/color][color=#007700].[/color][color=#0000bb]ToString[/color][COLOR=#007700])
        [/COLOR][color=#0000bb]EnumChildProc [/color][color=#007700]= [/color][COLOR=#0000bb]1
    End [/COLOR][COLOR=#007700]Function  
[/COLOR][/COLOR]

الآن أضف CheckBox و سمه Enabled
في حدث CheckBox1_CheckedChanged

ضع الكود التالي


كود :
[COLOR=#000000][COLOR=#0000bb]
[/COLOR][color=#007700]If [/color][color=#0000bb]Me[/color][color=#007700].[/color][color=#0000bb]CheckBox1[/color][color=#007700].[/color][color=#0000bb]Checked [/color][color=#007700]= [/color][COLOR=#0000bb]True Then
            Timer1[/COLOR][color=#007700].[/color][color=#0000bb]Enabled [/color][color=#007700]= [/color][COLOR=#0000bb]True

        End [/COLOR][COLOR=#007700]If  
[/COLOR][/COLOR]


ضع بعض التكست بوكس على الفورم و غير نصهم وقت التصميم
انتقل الى حدث التايمر و ضع الكود التالي


كود :
[COLOR=#000000][COLOR=#0000bb]
[/COLOR][color=#007700]If [/color][color=#0000bb]CheckBox1[/color][color=#007700].[/color][color=#0000bb]Checked [/color][color=#007700]= [/color][COLOR=#0000bb]True Then
            TextBox1[/COLOR][color=#007700].[/color][color=#0000bb]Text [/color][color=#007700]= [/color][COLOR=#0000bb]GetForegroundWindow
            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])
            [/COLOR][color=#0000bb]Timer1[/color][color=#007700].[/color][color=#0000bb]Enabled [/color][color=#007700]= [/color][COLOR=#0000bb]False

        End [/COLOR][COLOR=#007700]If  
[/COLOR][/COLOR]

كما ترى في الكود فان الجزء المهم هو هذا الكود


كود :
[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])  
[/COLOR][/COLOR]

استعملنا EnumChildWindows للوصول الى الكنترولات
حيث
TextBox1.Text يحمل عنوان مقبض النافذة المحددة
EnumChildProc الاجراء الذي نريد تنفيذه
IntPtr.Zero لا يهمك

جرب تشغيل البرنامج واختر أي نافذة وانظر الى الليست بوكس
--------------------------------------------------------

الآن سنحاول أن نقوم باخفاء كافة الكنترول الموجودة في الفورم (أي فورم)

أي جعل الخاصية visible=false

سنحتاج الى دالة api المسماة ShowWindow



كود :
[COLOR=#000000][COLOR=#0000bb]
    [/COLOR][color=#007700]Declare Function [/color][color=#0000bb]ShowWindow Lib [/color][color=#dd0000]"user32" [/color][color=#007700]([/color][color=#0000bb]ByVal hwnd [/color][color=#007700]As [/color][color=#0000bb]Integer[/color][color=#007700], [/color][color=#0000bb]ByVal nCmdShow [/color][color=#007700]As [/color][color=#0000bb]Integer[/color][color=#007700]) As [/color][COLOR=#0000bb]Integer  
[/COLOR][/COLOR]

الدالة تحمل 2 برمتر
البرمتر الأول خاص بالمقض
و البرمتر الثاني خاص بالاخفاء أو الاظهار
اذا أردت الاخفاء اجعل البرمتر الثاني يساوي 0 أما العكس اذ أردت الاظهار اجعل البرمتر 1


الاستعمال :

في الدالة EnumChildProc ضع الكود التالي


كود :
[COLOR=#000000][COLOR=#0000bb]
    ShowWindow[/COLOR][color=#007700]([/color][color=#0000bb]hwnd[/color][color=#007700], [/color][color=#0000bb]0[/color][COLOR=#007700])  
[/COLOR][/COLOR]

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

هكذا


كود :
[COLOR=#000000][COLOR=#0000bb]
  ShowWindow[/COLOR][color=#007700]([/color][color=#0000bb]hwnd[/color][color=#007700], [/color][color=#0000bb]1[/color][COLOR=#007700])  
[/COLOR][/COLOR]

-----------------------------------------------------------
بنفس الطريقة نستطيع تغيير النص الموجود في التكست بوكس


سنحتاج الى داة Api
SetWindowText


كود :
[COLOR=#000000][COLOR=#0000bb]

    [/COLOR][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]
في الدالة EnumChildProc ضع الكود التالي


كود :
[color=#000000][COLOR=#0000bb]        SetWindowText[/color][color=#007700]([/color][color=#0000bb]hwnd[/color][color=#007700], [/color][color=#dd0000]"Smp3"[/color][COLOR=#007700])  
[/COLOR][/COLOR]

الآن جرب البرنامج ولاحظ تغير خاصية Text الخاصة ب TextBox الى "Smp3"

و بهذا نصل الى نهاية الجزء الثاني

أترككم لتحاولوا ان تقوموا باستخدام بعض الدوال الأخرى مثل تفعيل وتعطيل الكونترول و... و ... من دوال Api

و هذا مثال لكل ما قمنا به

http://vb4arb.com/vb/uploaded/18_01349243365.zip

أتمنى أن يعجبكم الموضوع
}}}}
تم الشكر بواسطة:


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

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


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