الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الأسمبلر و API للوندوز

مغلق
بدأه chik في 12 نوفمبر 2003 · 2 رد · 2,872 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

إن برمجة الوندوز بالأسمبلر تتطلب معرفة برمجة API للوندوز وهي مجموعة دوال تكون في مكاتب الوندوز DLL ك kernel user gdi وغيرهم وهي تعطي كل ما يلزم لبرمجة الوندوز. وبالطبع لبرمجة الوندوز يجب أن نعرف برمجة API وإدا كنا نعرف هده البرمجة في لغة أخرى فتطبيقها على الأسمبلر سيساعد كثيرا وقد قمت وأعطيت مقارنة بين الأسمبلر و س++ في هده البرمجة. و API عددها كبير.

هنا أقترح أننا كل مرة نبدأ بتعريف واحدة منها ونعطي ما يمكن أن تفعله وكيف تتم برمجتها بالأسمبلر مع مثال لها. وأضن أن بعد هدا بقليل يمكن للشخص الدي عنده بعض مبادء الأسمبلر ولا أقول كلها أن يبدأ ببرمجة الوندوز ونعلم أن 32 Masm يسهل علينا كثيرا هده البرمجة.

والآن أنتضر اقتراحاتكم وآرائكم حتى ينتعش هدا المنتدى وتعم الفائدة.

كل من له دراية بهدا النوع يمكن أن يبدأ بهدا وأنا سأبدأ إن شاء الله في غضون الأسبوع المقبل وهدا طبعا إدا قبل اإخوان.

في انتضار آرائكم أقول لكم إلى اللقاء.

لتتبع هدا يجب ضروريا الحصول على نسخة من 32 Masm فهي موجودة في عدة مواقع على النت.

#2

السلام عليكم,

لكل من يريدوا برمجة الوندوز سأقوم هنا بالتعريف كل مرة بدالة API مع مثال بسيط لها وأضن أن من يعرف برمجة API فهو يعرف برمجة الوندوز إذ هي تتركز كليا على هذا.

المطلوب هنا :

- التوفر على MASM32 هذا سيمكننا من صنع برامجنا ويحتوي على المكتبات الرأسية اللازمة.ويمكن الحصول عليه بسهولة من النت ونفترض هنا أنه مثبت في C:\MASM32 وإذا كان في مسار آخر يمكن تبديل هذا المسار كلما ظهر ذلك.

- بعض الأسس في الأسمبلر وسنلاحظ أن العديد من الماكرو في MASM32 تسهل كثيرا هذه البرمجة إذ يمكن للبرنامج أن يبدو وكأنه ليس مبرمجا بالأسمبلر فمثلا يمكن أن نستعمل .if و .endif كما نستعملها في الباسيك.

- نافذتنا الأساسية في البداية ستكون من نوع Dialog Box وفي الأول سنأخذها بدائية وفي كل مرة نزيد في تطويرها.هذه النافذة سنصنعها ب Resource Editor في VC++ وسنلاحظ أن هذا لا يتطلب صعوبة كبيرة أو أي برنامج آخر لصنع Resource.وفي البداية سأعطي هيكلا لهذا النوع من البرمجة سيكون هو أساسنا في البرامج المتتالية فهذا يمكن أن نستعمله عند أي برمجة نافذة ديالوغ بإضافة المتغيرات فقط.وحتى إذا لم نفهم هذا الهيكل الآن يمكن أن نتخطاه مع العلم أننا سنعود إليه كل مرة وحين نتعلم بعض API سيبتدء هذا الهيكل في التوضيح.

مقدمة :

إن API أو ما يعرف ب Application Programming Interface هي مجموعة من الدوال يوفرها السيستم للمستعمل للبرمجة.فحين نريد مثلا فتح ملف على القرص فنحن سوف لن نهتم بإدارة وتشغيل القرص وإنما السيستم سيوفر لنا رابطة مع كل دلك , نحن سنقوم بطلب لدالة والبقية يتكلف بها السيستم. وهده الدوال كثيرة ومختلفة وهي توجد في ملفات DLL للوندوز مثل Kernel32.dll فيها كل ما يتعلق بالداكرة والملفات وغيرها , Gdi32.dll هده فيها كل ما يتعلق بالرسم user32.dll فيها على سبيل المثال جميع النوافد التي تستعملها الوندوز إلى غير دلك.

ومن بين هده API مثلا :

ShowWindow ستستعمل إما لإضهار أو اخفاء نافدة

EndDialog تنهي نافدة من نوع ديالوغ

ReadFile لنقرأ داخل ملف إلى غير دلك وسنتطرق إلى مختلف هده الدوال في كل مرة.

إن برنامجا في الوندوز غالبا ما يكون على شكل نافذة وهذه الأخيرة تبقى تنتظر المعلومات التي ستتلقاها من المستعمل لتقوم بالإجراءات المناسبة للتعليمات الموكلة لها. وهذه التعليمات تكون في شكل نقر على Button مثلا تحريك الفأرة على النافذة, ضغط على زر في الكايبورد , تصغير أو تكبير النافذة إلى غير ذلك.وهذه التعليمات تكون في شكل Messages يرسلها السيستم إلى النافذة الخاصة بها ,و Message هو عبارة عن رقم وكل رقم يدل على Message معين ومعروف. وبما أن ذاكرتنا لا تستوعب الأرقام فنجد أن في الملف الرأسي windows.inc يعطينا لكل رقم من هذا النوع اسم ليسهل لنا استيعاب ومعرفة Message من خلال اسمه وأغلبيتها تبتدء ب WM_ بمعنى Window Message .فمثلا حين ننقر على علامة X لنغلق نافذة ما فإن الوندوز ترسل رسالة WM_CLOSE ورقم هذاه الرسالة 16 إلى النافذة المعنية لتخبرها بأن المستعمل يريد أن يقفل هذه الأخيرة. حين ننقر على أي Button داخل نافذة ما أو حين ننقر على أي menu فالرسالة تكون هي WM_COMMAND والسائل كثيرة وسنرجع إليها كل ما ضهرت رسالة جديدة في برنامجنا وهذه بعضها :

WM_LBUTTONDOWN و WM_LBUTTONUP حين نضغط أو نترك الزر الأيسر للماوس وإذا غيرنا L ب R يكون الزر الأيمن.

WM_KEYDOWN و WM_KEYUP هي بالنسبة للكايبورد.

وهكذا فإن برنامج وندوز يمكن أن نقسمه إلى قسمين أو دالتين. واحدة تقوم بانشاء النافذة مثل Dialog Box مثلا والأخرى تقوم باستقبال Messages ومعالجتهم. وهذه الدالة تكون على الشكل التالي:

function(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)

hwnd هو ما يعرف ب هاندل النافذة وهو مجرد رقم DWORDيعرف به نافذة فكل واحدة يكون عندها رقم معين يميزها عن بقية الآخرين. وإذا عرفنا هذا الرقم يمكن أن نتعرف على جميع مميزات النافذة الخاصة بهذا الهاندل.

Msg هو رقم Message المرسل إلى النافذة فقد يكون مثلا WM_COMMAND إذا نقرنا على Button أو غير ذلك.

wParam و lParam هما رقمان من 32 بايت إضافيان يختلفان حسب نوع الرسالة ويحملان خصائص الرسالة الموجهة إلى النافذة.فمثلا إذا كان Message هو WM_CLOSE ف wParam lParam لا يستعملان لأن هذه الرسالة لا تحتاج لتوضيحات إضافية.وإذا كانت الرسالة هي WM_COMMAND فإن wParam يحدد نوع ورقم الزر الذي قمنا بالنقر عليه بينما lParam يعطينا هاندل نافذة Button الذي نكون نقرنا عليه. ومن هنا يتضح أن هذين البارامترين الأخيرين يوضحان خصائص Message حتى لا يبقى فيه أي لبس.

في الملف المرافق ستجدون الهيكل لبرمجة وندوز من نوع Dialog Box ويحمل اسم body.asm وكما ستجدون الملفات التالية:

script1.res نصنعه مثلا في الفيجووال س++ ونسجله تحت اسم script1.res ولصنعه نقووم كالتالي :

نشغل فيجوال س++ ثم Insert -> Resource -> Dialog نختار Dialog وستظهر لنا نافذة فيها Button OK و Cancel ننقر على واحد منهما ونضغط على زر Delete لنمحي الإثنين وتبقى لنا نافذة خالية. ننقر عليها باليمين وننقر على Properties في خانة Caption نعطيها أي اسم نريد فهذا ما سيظهر في عنوان النافذة حين نشغل البرنامج.

وفي خانة ID سيكون عندنا شيء من في شكل IDD_DIALOG ونغيره ب « BODYDLG » لا ننسى الشرطتين.ونسجل هذا في script1.res مع ملفنا body.asm .

ووهناك الملف make.bat هذا الملف هو لكمبايل البرنامج واللنك مع الرسورس لبناء البرنامج وسيعطينا ملف exe إذا لم تكن هناك أي أخطاء .

هذه البداية ووسنبدأ بتعريف API في المرة القادمة وسنستعمل كل مرة هذا الهيكل لبرامجنا.

في انتضار اقتراحاتكم وآرائكم أقول لكم إلى اللقاء.

يمكن تتبع نفس الموضوع ب س++ في هدا الرابط في هدا المنتدى:

http://www.arabteam2000.com/ib/index.php?s...showtopic=35802

Body_Asm.zip

#3

جميل جدا

قطرة الماء تـثـقب الحجر.. لا بالعنف. لكن بتكرار المحاولة

at4re.gif

منتديات الفريق العربي للهندسة العكسية 不喜欢的勿入! www.at4re.com

هذا الموضوع مغلق.

مواضيع مشابهة