التنبيهات التالية ظهرت :
Warning [2] count(): Parameter must be an array or an object that implements Countable - Line: 864 - File: showthread.php PHP 7.4.33 (Linux)
File Line Function
/showthread.php 864 errorHandler->error



تقييم الموضوع :
  • 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

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


الردود في هذا الموضوع
تعلم كيف تتحكم في برنامج آخر من برنامجك 2 - بواسطة Raggi Tech - 03-10-12, 09:51 AM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كيف تتعامل مع برنامج الإكسيل من برنامجك rinawi 7 6,626 12-11-22, 12:11 AM
آخر رد: خالد العصاوي
  نظرة على DropBox SDK و التعامل معها +برنامج رفع و تحميل ملفات ابو ليلى 4 4,871 08-09-22, 11:54 AM
آخر رد: saif2023
  برنامج مبيعات ومشتريات وإدارة أعمال ( الفاتورة الإلكترونية ) yassoo1985 2 2,246 04-06-22, 01:14 PM
آخر رد: yassoo1985
Heart طلب برنامج Advanced Installer أبو خالد الشكري 0 1,418 16-05-22, 09:12 PM
آخر رد: أبو خالد الشكري
  أهم طرق إدارة المخازن وتطبيقها على برنامج مخازن وارد ومنصرف Menna ahmeed 0 1,967 27-04-22, 12:52 PM
آخر رد: Menna ahmeed
  طريقة إنشاء برنامج طباعة ملصقات الباركود ملهمـ 1 4,398 22-12-21, 05:09 PM
آخر رد: alessam4pro
  معلومة :: تعلم كيف تحفظ صورة في My.Settings بدون الإحتياج إلى مسارها! أسامة أحمد 4 6,097 18-07-21, 02:53 AM
آخر رد: kebboud
Heart [VB.NET] برنامج ادارة المطاعم و الكافيهات mgr21002100 6 6,650 14-01-21, 07:59 PM
آخر رد: abarrak
  تفعيل برنامج Visual Studio 2019 Adilo idabdellah 4 11,514 20-05-20, 11:48 AM
آخر رد: الفاضي
  برنامج المبيعات والمشتريات والمخازن و المطاعم mgr21002100 2 3,587 07-04-20, 04:29 AM
آخر رد: mgr21002100

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


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