[سلسلة التحكم] {1} - طرق التحكم في البرامج - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة السي شارب C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=175) +--- قسم : قسم مقالات C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=177) +--- الموضوع : [سلسلة التحكم] {1} - طرق التحكم في البرامج (/showthread.php?tid=443) |
[سلسلة التحكم] {1} - طرق التحكم في البرامج - الشاكي لله - 08-10-13 بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته -- اهلا وسهلا بكم اخواني الكرام في اول مقالة من سلسلة [سلسلة التحكم] في هذه المقالة سنتحدث عن طريقتين للتحكم ببرنامج ما من خلال السي شارب لست اعني ضرورة تنفيذ الطرق بالسي شارب ، الاكواد نفسها يمكنك تحويلها إلى vb.net وتنفيذها هناك ، ولكن بما اننا في قسم السي شارب فاضطررت لتقديم الدروس بلغة #c نكتفي الان بهذه المقدمة وندخل الى صلب الموضوع . -- -- -- صفر :- أجزاء المقالة اولا : التعامل مع برنامج من خلال مكتبات COM ثانيا : التحكم في برنامج من خلال دوال API ثالثا : الخاتمة -- -- -- اولا :- التعامل مع برنامج من خلال مكتبات COM بعض البرامج وخاصة البرامج الكبيرة ، تقوم بإنشاء مكتبة COM تمكننا من التعامل مع برامجها ابسط مثال هو برنامج IDM الذي يمكننا طلب التحميل منه من خلال برنامجنا وهذا باستعمال مكتبة COM خاصته. والمسمى بـ IDMan 1.0 Type library بعد ان نقوم بإضافتها سنتمكن من استدعاء بعض دوال برنامج IDM للقيام بعملية معينة كتحميل ملف . ((احيانا توجد اكثر من مكتبة COM للتعامل مع البرنامج الهدف)) في الصورة تحت ، تشوف هناك 4 مكتبات للتعامل مع برنامج IDM بعد اضافة IDMan 1.0 Type library نرى انه تم اضافة مكتبة اسمها IDManLib الى References لنستعرض محتويات هذه المكتبة الان ، لهذا ندخل على نافذة الكود ونكتب اسم المكتبة لنرى محتوياتها نرى وجود 1 كلاس و3 انترفيس ، بما ان الانترفيس هو مجرد كلاس فارغ نقوم بتركه ولهذا يضل امامنا كلاس (فئة) لانعلم عنها شيئا واسمها CIDMLinkTransmitterClass . طبيعي اي إنسان مايعرف عن شيئ معين يقوم بالسؤال او البحث ، ونحن في هذا العصر يوجد لدينا الانترنت وقوقل مما يسهل علينا عملية البحث . كيف نقوم بالبحث ؟؟ شخصيا عندما اواجه فئة لااعلم عنها شيئا اقوم بكتابة اسمها في قوقل وأرى النتائج وهذا ماسنقوم به : اول نتيجة ظهرت تبدو هي ضالتنا ، سنقوم بالدخول عليها ، ليظهر لنا موقع البرنامج وفيه شرح كامل عن استخدام الفئة : بعد قرائتي للصفحة ، عرفت انه توجد هناك دالتين باسم SendLinkToIDM2 SendLinksArray ولهما بارمترات عديدة وقد شرح الموقع كل شيئ عنهما ماعلينا الان سوا تطبيق ذلك بالسي شارب . -- بما ان اعضاء الفئة ليست Static ، سنقوم بإنشاء Instance للفئة : PHP كود : IDManLib.CIDMLinkTransmitterClass IDM = new IDManLib.CIDMLinkTransmitterClass(); بعدها نقوم باستدعاء الدالة SendLinkToIDM2 لنقوم بتحميل ملف من خلال برنامج IDM PHP كود : IDM.SendLinkToIDM2 الان علينا بملأ بارمترات الدالة التي عددها 11 بارمتار وقد شرح موقع البرنامج البرامترات بالتفصيل : إقتباس :Parameters of SendLinkToIDM2 function: الان كل شيئ يبدو واضحا بالنسبة لي ، سأقوم باضافة البارمترات للدالة وسيكون الكود النهائي هكذا PHP كود : IDManLib.CIDMLinkTransmitterClass IDM = new IDManLib.CIDMLinkTransmitterClass(); كما ترى ان اغلب البارمترات قيمتها null لأن قيمها ليست متوفرة لدي ، لهذا تركتها null وسيقوم برنامج IDM باللجوء الى الاعدادات الافتراضية وسيكمل المهمة بعد تشغيل البرنامج سترى ظهور نافذة التحميل الخاصة ب IDM طبعا يمكننا إلغاء ظهور نافذة التحميل من خلال تغيير قيمة البارمتار lFlags - كما نرا انه يمكننا التعامل مع البرامج من خلال مكتبات COM خاصتها الكثير من البرامج التي تقوم بتنصيبها لديها مكتبة (او مكتبات) COM يمكنك التعامل معها بنفس طريقة المثال السابق ، الاخ ناجي ابراهيم طبق نفس الفكرة على برنامج الوورد (المشاركة هنا) -- -- -- ثانيا :- التحكم في برنامج من خلال دوال API دوال Win32 API هي دوال تعتبر كنز لكل مبرمج يعمل تحت مظلة الوندوز وهي دوال غنية عن التعريف في هذا الجزء سنقوم ببعض العمليات على form برنامج معين بس اول شيئ بذكر لكم اهم الدوال التي تتحكم في البرنامج وتتعامل معها - 1- FindWindow : الحصول على مقبض form 2- FindWindowEx : الحصول على مقبض فورم او كنترول داخل TopLevel form 2-SendMessage : تنفيذ عملية معينة على فورم (قائمة العمليات المتاحة هنا) 3-MoveWindow : تحريك فورم او تغيير ابعاده 4-SetParent : تغيير مكان الفورم ليكون داخل مكان معين 5-SetForegroundWindow : جعل فورم ما في المقدمة - ربما توجد دوال اخرى لكن هذي اهم الدوال التي تعاملت معها سابقا وسأقوم الان بعرض مثال لكل دالة وننتهي من هذا الموضوع . ----- FindWindow - الحصول على مقبض برنامج Notepad : PHP كود : [DllImport("user32.dll", SetLastError = true)] -- FindWindowEx + SendMessage : الضغط على زر داخل برنامج الحاسبة : مقالة رائعة جدا للضغط على زر داخل الحاسبة طبعا بإمكان دالة SendMessage عمل الكثير ، منها الغاء تفعيل زر او حذفه او ارسال نص للبرنامج وغيرها .. -- MoveWindow : تغيير مكان وابعاد فورم برنامج النوت باد : PHP كود : [DllImport("user32.dll", SetLastError = true)] نرى انه في كل العمليات نحتاج الى الحصول على المقبض ، لذلك دالة findwindow ضرورية جدا ، ولكن يمكنك الاستغناء عنها بكتابة كود في السي شارب يمكنك من الحصول على مقبض اي نافذة -- SetParent : تغيير مكان عرض فورم برنامج إلى داخل برنامجي PHP كود : [DllImport("user32.dll", SetLastError = true)] لاحظ هذه المرة قمت بالاستغناء عن FindWindow وقمت بجلب المقبض من خلال Process النتيجة : -- SetForegroundWindow : دالة بسيطة تقوم بجعل فورم ما في المقدمة PHP كود : [DllImport("user32.dll", SetLastError = true)] -- طبعا عن الحديث عن دوال API لاتنسى اضافة مجال الاسماء التالي : PHP كود : using System.Runtime.InteropServices; -- -- -- ثالثا :- الخاتمة اتمنى انكم قد استفدتم من هذا المقال البسيط وارجو انني فد وفقت في ايصال المعلومة والله الموفق ، والسلام عليكم إنتهى RE: [سلسلة التحكم] {1} - طرق التحكم في البرامج - Sajad - 08-10-13 السلام عليكم بارك الله فيك اخونا المبدع جزاك الله خيرا درس منظم ورائع ومفيد ننتظر مزيدك تحياتي RE: [سلسلة التحكم] {1} - طرق التحكم في البرامج - ali.alfoly - 09-10-13 (08-10-13, 01:56 PM)Sajad كتب : السلام عليكم السلام عليكم بالفعل كما قال اخى سجآد وننتظر مثل هذه الشروح الممتازة ربنا يجعلها فى موازين حسناتك وجزاك الله خيرا RE: [سلسلة التحكم] {1} - طرق التحكم في البرامج - الجنرال - 02-11-13 تسلم بارك الله فيك اخي الكريم RE: [سلسلة التحكم] {1} - طرق التحكم في البرامج - hoob computer - 30-03-14 درس ممتاز و رائع, و لكن لي سؤال, هل إستخدام API بكثرة داخل المشروع تجعله بطئ نسبياً أم ليس لها هذا التأثير عليه؟ السلام عليكم RE: [سلسلة التحكم] {1} - طرق التحكم في البرامج - الشاكي لله - 30-03-14 والله ماعتقد ابدا لان اصلا اغلب دوال الدوت نت تستدعي دوال API WIN32 مثلا Form.Focus تقوم خلف الكواليس بارسال WM_Setfocus الى الفورم فلو قمت بارسال رسالة WM_Setfocus بواسطة دالة SendMessage فاني اختصرت الطريق لا اكثر -- مثال اخر Cursor.Position .. تقوم خلف الكواليس باستدعاء دالة GetCursorPos وهذا كودها : PHP كود : [DllImport("user32.dll")] فلو قمت مباشرة بطلب الدالة الي فوق بكون الموضوع مختصر لذلك لا اضن ابدا انها تبطئ البرنامج لأن الدوت نت وجميع برامج الوندوز تعتمد على الAPI بشكل كامل RE: [سلسلة التحكم] {1} - طرق التحكم في البرامج - hoob computer - 30-03-14 مشكور على التوضيح أخي محمد السلام عليكم RE: [سلسلة التحكم] {1} - طرق التحكم في البرامج - nani49 - 12-02-16 زادك الله علما نفع به الناس |