حقيقة بعد البحث الجاد لعدة شهور ، للبحث عن خفايا نظام التشغيل وكيفية تعامله مع النوافذ وإدارتها ، وجدت انه امر يمكن الوصول له بكل بساطة ، طبعا كلنا يعرف ان البرمجة تحت نظام التشغيل ويندوز هي عبارة عن (برمجة مسيرة بالاحداث) اي لكل حركة او ضغطة زر او نقرة علي زر الماوس لها حدث عبارة عن رسالة يقوم ويندوز بارسالها الي رتل الرسائل المنتظرة ليقوم بعد ذلك بارسالها للنافذة او للتطبيق المستهدف ، طبعا عند إرسال رسالة ما الي نافذة فان هذه الرسالة تصل الي كافة النوافد المفتوحة في التطبيق والنافذة الستهدفة هي التي تتفاعل مع النظام (عن طريق مقبض النافذة).
* رسائل ،،، ماهي الرسائل و من أين تأتي ؟يقوم ويندوز بتعريف المئات بل الآلآف من الرسائل المتنوعه وغالبية هذه الرسائل تبدأ بالأحرف _WM وهي إختصار Window Message وأهم شي يجب أن
تعرفه هي الدور الفعال التي تلعبه هذه الرسائل ... إذاً الرسائل معرفة مسبقاً من قبل نظام التشغيل ، نعم هي عبارة عن ثوابت تأخذ قيم يعرفها النظام وعلي
أساسها يعمل .
تعرف الرسالة بالشكل التالي :
Private Const WM_PAINT = &HF
أنظر الي تلك الرسائل :
WM_CREATE وهي رسالة لخلق أو إنشاء نافذة .
WM_PAINT وهي رسالة ترسلة للنافذة لرسمها من جديد وهي ما نعرفه بـRefresh وترسل هذه الرسالة الي النافذة من نظام التشغيل في حال تم تغطية
النافذة بنافذة وأخري وعاودت الظهور مرة أخري يرسل النظام الي النافذة هذه الرسالة ليقوم بإعادة رسمها .
WM_SIZE وهي لتغيير أبعاد النافذة أي يأمر نظام التشغيل النافذة بتغيير حجمها .
WM_QUIT وترسل هذه الرسالة للتطبيق لانهاء عمله .......
. الخ الخ ،، ويوجد المئات من الرسائل لا أستطيع سردها كلها الأن ولكن سوف أقوم بسرها وشرحها بنوع من التفصيل فيما بعد إن شاء الله .
*كيف نستهدف نافذه معينه ؟
اولا/ لكل نافذة يوجد لها مقبض (Handle Window)وهو عبارة عن رقم (كود) لا يمكن ان يتكرر ،، هذا الرقم عبارة عن مقبض للنافذة يتم من خلاله تمرير الرسائل الي النافذة المحددة . وايضا رقم النافذة يتغير في كل مرة يتم إستدعاء النافذة .
*كيف يتعامل نظام التشغيل مع الادوات مثل (الزر ، صندوق النص ، اداة الصورة ، الخ)؟
نظام التشغيل يتعامل مع كافة الادوات علي انها نوافذ ، (نعم نوافذ) هناك مثل يقول (ليس كل ما هو أخضر ملوخية) ولكن نظام التشغيل كسر هذه القاعدة فمبدأ تعامله مع كافة الادوات واحد كأنها نوافذ , ومن هنا ترجع سرعة نظام التشغيل ،، فهو لا يعرف ان تلك هي اداة نص ، او زر ، او اداة صورة . ويستوجب لكل
أداة تعامل خاص بيها .
*كيف تظهر لنا النوافذ علي اشكال مختلفة مثل الازرار وصناديق النصوص وادوات الصور الخ الخ مع ان النوافذ لها شكلها الخاص؟
لقد اعتمدت مايكروسوفت علي مجموعة (صفوف Classes) جاهزة وهي محدودة طبعا وكل صف من هذه الصفوف تحمل بعض الخصائص القياسية التي تضاف
علي النافذة فينتج عنها شكل جديد وهي ما تسمى بالاداة . طبعا لا تحمل تلك الادوات اي خصائص اضافية مثلا عند استدعاء صف الزر فان ويندوز يقوم ببناؤه
علي شكل الزر الذي نعرفة ولكن دون اي خاصية اضافية مثل خاصية العنوان للزر(Caption) و خاصية لون الخلفية (BackColor) ، (فقط شكل الزر) وبعد ذلك
عليك انت ان تضيف ما تريد من خصائص تريدها علي اداتك الجديدة ، (ولو فكرت قليلا لوجدت اننا طبقنا مبدأ الوراثة البرمجية ) نعم لقد ورثنا خصائص الزر
القياسية من نظام التشغيل ويمكننا اضافة ما نريد من خصائص ليقوم بالعمل المنشود .
طبعا قبل كل شي يجب ان نعرف بأن فيجوال بيسك وحدها لا تمتلك القدرة علي عمل مثل تلك الامور إلا بمساعدة نظام التشغيل وبالكاد يكون هو الاساس في
العمل ، فنظام التشغيل يمتلك مكتبات كثيرة جدا تخدم جميع المجالات تقريبا ، فلغة الفيجوال بيسك ما هي الا أداة للوصول الي إمكانيات نظام التشغيل الهائلة عن طريق دوال API .
*من أين نحصل علي دوال الـ API ?يأتي مع حزمة الفيجوال ستوديو 6 ،، فبعد تنزيل فيجوال بيسك الاصدار السادس يمكنك إستدعاء برنامج (عارض دوال API) من قائمة Add-ins أختر Add-Ins Manager ثم قم بالنقر المزدزج علي VB 6 API Viewer ثم أضغط موافق . ثم بعد ذلك سيتم إدراجه في نفس القائمة Add-ins جرب ولاحظ بنفسك .
ولتحميل دوال API من قائمة ملف ثم Load Text File .. ثم اختر الملف WIN32API.TXT وسيقوم البرنامج بسرد مئات الدوال المختلفة التي توصلك الي بحار نظام التشغيل أسراره و إمكانياته العجيبة .
*مافائدة إستخدام الـAPI مع ان كل شيئ تقريبا متاح وجاهز ؟جرب وضع أكثر من 255 أداة علي الفورم الواحد ،، بالتأكيد لن تستطيع لان فيجوال بيسك لا يستطيع التعامل مع أكثر من 255 ، لانه محدود الإمكانيات .
حتي ولو قلت بأنك تستطيع مضاعفة العدد عن طريق عمل مصفوفة للأداة ونسخها مئات المرات أقول لك بأن أتخن جهاز حاسوب لا يستطيع نسخ أكثر من ألف وبعدها ستحتاج إلي إعادة تشغيل . لان الذاكرة إمتلئت . عوضا عن البطئ الرهيب .
-- ولكن عن طريق إاستخدام دوال API يمكن انشاء 32767 نافذة في نظام التشغيل 98 والاقدم منه وكما قلنا يمكن تخصيص بعض النوافذ لصناعة أدوات
دون أي جهد لجهازك الحاسوب وبسرعه فائقة . ما بالك بنظم التشغيل الحالية مثل XP و 2000 وغيرها فأعتقد أنها تضاعف هذا العدد . ولكن لست متأكدا من ذلك
فمثلا أنا الان أقوم بعمل برنامج لانشاء أفلام الرسوم المتحركة ،، تصور عدد الكادرات الموجوده فيه أثناء التشغيل ،، فلا بأس الان بعد إستخدام API فلم أجد اي مشاكل تذكر حتي الان في عدد انشاء الكادرات
* رسائل ،،، ماهي الرسائل و من أين تأتي ؟يقوم ويندوز بتعريف المئات بل الآلآف من الرسائل المتنوعه وغالبية هذه الرسائل تبدأ بالأحرف _WM وهي إختصار Window Message وأهم شي يجب أن
تعرفه هي الدور الفعال التي تلعبه هذه الرسائل ... إذاً الرسائل معرفة مسبقاً من قبل نظام التشغيل ، نعم هي عبارة عن ثوابت تأخذ قيم يعرفها النظام وعلي
أساسها يعمل .
تعرف الرسالة بالشكل التالي :
Private Const WM_PAINT = &HF
أنظر الي تلك الرسائل :
WM_CREATE وهي رسالة لخلق أو إنشاء نافذة .
WM_PAINT وهي رسالة ترسلة للنافذة لرسمها من جديد وهي ما نعرفه بـRefresh وترسل هذه الرسالة الي النافذة من نظام التشغيل في حال تم تغطية
النافذة بنافذة وأخري وعاودت الظهور مرة أخري يرسل النظام الي النافذة هذه الرسالة ليقوم بإعادة رسمها .
WM_SIZE وهي لتغيير أبعاد النافذة أي يأمر نظام التشغيل النافذة بتغيير حجمها .
WM_QUIT وترسل هذه الرسالة للتطبيق لانهاء عمله .......
. الخ الخ ،، ويوجد المئات من الرسائل لا أستطيع سردها كلها الأن ولكن سوف أقوم بسرها وشرحها بنوع من التفصيل فيما بعد إن شاء الله .
*كيف نستهدف نافذه معينه ؟
اولا/ لكل نافذة يوجد لها مقبض (Handle Window)وهو عبارة عن رقم (كود) لا يمكن ان يتكرر ،، هذا الرقم عبارة عن مقبض للنافذة يتم من خلاله تمرير الرسائل الي النافذة المحددة . وايضا رقم النافذة يتغير في كل مرة يتم إستدعاء النافذة .
*كيف يتعامل نظام التشغيل مع الادوات مثل (الزر ، صندوق النص ، اداة الصورة ، الخ)؟
نظام التشغيل يتعامل مع كافة الادوات علي انها نوافذ ، (نعم نوافذ) هناك مثل يقول (ليس كل ما هو أخضر ملوخية) ولكن نظام التشغيل كسر هذه القاعدة فمبدأ تعامله مع كافة الادوات واحد كأنها نوافذ , ومن هنا ترجع سرعة نظام التشغيل ،، فهو لا يعرف ان تلك هي اداة نص ، او زر ، او اداة صورة . ويستوجب لكل
أداة تعامل خاص بيها .
*كيف تظهر لنا النوافذ علي اشكال مختلفة مثل الازرار وصناديق النصوص وادوات الصور الخ الخ مع ان النوافذ لها شكلها الخاص؟
لقد اعتمدت مايكروسوفت علي مجموعة (صفوف Classes) جاهزة وهي محدودة طبعا وكل صف من هذه الصفوف تحمل بعض الخصائص القياسية التي تضاف
علي النافذة فينتج عنها شكل جديد وهي ما تسمى بالاداة . طبعا لا تحمل تلك الادوات اي خصائص اضافية مثلا عند استدعاء صف الزر فان ويندوز يقوم ببناؤه
علي شكل الزر الذي نعرفة ولكن دون اي خاصية اضافية مثل خاصية العنوان للزر(Caption) و خاصية لون الخلفية (BackColor) ، (فقط شكل الزر) وبعد ذلك
عليك انت ان تضيف ما تريد من خصائص تريدها علي اداتك الجديدة ، (ولو فكرت قليلا لوجدت اننا طبقنا مبدأ الوراثة البرمجية ) نعم لقد ورثنا خصائص الزر
القياسية من نظام التشغيل ويمكننا اضافة ما نريد من خصائص ليقوم بالعمل المنشود .
طبعا قبل كل شي يجب ان نعرف بأن فيجوال بيسك وحدها لا تمتلك القدرة علي عمل مثل تلك الامور إلا بمساعدة نظام التشغيل وبالكاد يكون هو الاساس في
العمل ، فنظام التشغيل يمتلك مكتبات كثيرة جدا تخدم جميع المجالات تقريبا ، فلغة الفيجوال بيسك ما هي الا أداة للوصول الي إمكانيات نظام التشغيل الهائلة عن طريق دوال API .
*من أين نحصل علي دوال الـ API ?يأتي مع حزمة الفيجوال ستوديو 6 ،، فبعد تنزيل فيجوال بيسك الاصدار السادس يمكنك إستدعاء برنامج (عارض دوال API) من قائمة Add-ins أختر Add-Ins Manager ثم قم بالنقر المزدزج علي VB 6 API Viewer ثم أضغط موافق . ثم بعد ذلك سيتم إدراجه في نفس القائمة Add-ins جرب ولاحظ بنفسك .
ولتحميل دوال API من قائمة ملف ثم Load Text File .. ثم اختر الملف WIN32API.TXT وسيقوم البرنامج بسرد مئات الدوال المختلفة التي توصلك الي بحار نظام التشغيل أسراره و إمكانياته العجيبة .
*مافائدة إستخدام الـAPI مع ان كل شيئ تقريبا متاح وجاهز ؟جرب وضع أكثر من 255 أداة علي الفورم الواحد ،، بالتأكيد لن تستطيع لان فيجوال بيسك لا يستطيع التعامل مع أكثر من 255 ، لانه محدود الإمكانيات .
حتي ولو قلت بأنك تستطيع مضاعفة العدد عن طريق عمل مصفوفة للأداة ونسخها مئات المرات أقول لك بأن أتخن جهاز حاسوب لا يستطيع نسخ أكثر من ألف وبعدها ستحتاج إلي إعادة تشغيل . لان الذاكرة إمتلئت . عوضا عن البطئ الرهيب .
-- ولكن عن طريق إاستخدام دوال API يمكن انشاء 32767 نافذة في نظام التشغيل 98 والاقدم منه وكما قلنا يمكن تخصيص بعض النوافذ لصناعة أدوات
دون أي جهد لجهازك الحاسوب وبسرعه فائقة . ما بالك بنظم التشغيل الحالية مثل XP و 2000 وغيرها فأعتقد أنها تضاعف هذا العدد . ولكن لست متأكدا من ذلك
فمثلا أنا الان أقوم بعمل برنامج لانشاء أفلام الرسوم المتحركة ،، تصور عدد الكادرات الموجوده فيه أثناء التشغيل ،، فلا بأس الان بعد إستخدام API فلم أجد اي مشاكل تذكر حتي الان في عدد انشاء الكادرات