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

صدق أو لا تصدق أنا لا أعرف أكتب ولا داله بال API !

مغلق
بدأه hazzoom في 26 أبريل 2005 · 27 رد · 2,745 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

صدق أو لا تصدق أنا لا أعرف أكتب ولا داله بال API !!!

كل ما أنزل كتاب عشان أفهم منه دوال ال API ألاقيه يبدأ بالكلمتين دول ( api اختصار application programing interface وهي تتواجد في ملفات ال dll وتجدها في ال api viewer ...) ويقف لحد كده وفي مره نزلت كتاب لمبرمج كبير والكل بيشكر في كتابه وكاتب مقدمه طويله عريضه وفي آخرها (ولن أتعرض لدوال ال api لأنها محتاجه مبرمج مخضرم) أمال انت شغلتك ايه ؟ وكاتب الكتاب ليه ..الله أعلم , :wacko:

فسألت واحد زميلي عليها قالي متحاولش تفهم اعمل copy , paste قلتله شكرا علي النصيحه وأنا كلي غيظ , أنا محتاج حد يفهمني مكونات الداله , أنا عايز أفهم , عمر ما كانت البرمجه نسخ ولصق من غير فهم وأنا محبش أحط سطر واحد في الكود أنا مش فاهمه , مش أنا صح ولا أنا غلطان ؟ ...

:wacko:

رحت اشتريت كتاب فيجوال بيسك بتلاتين جنيه وفتحته علي الباب الخاص بدوال ال api لقيته بيشرح شرح مطول في تصميم واجهة برنامج لمعرفة نوعية كل بارتيشن عن طريق داله (GetDriveType) وبعد كده حط الكود وشكرا ولم يشرح الكود نهائيا ,ليه يا أخي هيا فيها عفريت ؟!؟ يا أخي ماتشرحها ولا انت مش فاهمها وبرضه عملت نسخ ولصق ؟!؟

:wacko:

وأطلع من الكتاب زي ما دخلت وعلي رأي المثل (وكأنك يا بو زيد ما غزيت) وأقتح ال api viewer وألاقي public , private وشويه دوال كتير مفهمتش منهم حاجه ,

والمشكله انها مهمه جدا ولا يستغني عنها أي مبرمج , ومن غيظي فكرت أنزل دروس دلفي وأبدأ فيها عشان دوال ال api فيها أسهل لكن رجعت في كلامي لأني معنديش البيئه الخاصه بها ثانيا الفيجوال بيسك اتعودت عليه وهتبقي شغلانه عشان أبدأ لغه جديده (لسه هنزل دروس وكتب و..و..و..).

:wacko:

عند فتح api viewer بنعمل load text file ونختار (WIN32API.TXT) اشمعني طب ليه ما نختارش (APILOAD.TXT ,MAPI32.TXT)

مع أنه لو اخترت APILOAD.TXT مش هتلاقي حاجه !!!

:wacko:

أنا عايز حد يكون فاهم دوال api يفهمني , في برنامج api viewer يوجد api type وتوجد 3 اختيارات (constants ,declares,types)

فما الفرق بين الثلاثه ؟ آدي حاجه

ما الفرق بين public , private دي حاجه تاني وبعد ما هنعرف الحاجتين اللي فاتو ان شاء الله عايز أعرف التركيب البنائي للداله أو مكوناتها .

وكمثال :

Public Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long

أنا عرفت ان Public يعني عام وان Private يعني خاص و Declare يعني تصريح وكلمة function يعني داله ( الحمد لله) .

أي أنه يصرح عن داله (مظبوط)؟

:wacko:

الداله هي GetDriveType صح ؟, طيب يعني ايه كلمة Lib , وأعتقد أن kernel32.dll هو الملف الذي يحتوي علي الداله , طيب يعني ايه Alias وبعد كده مكتوب اسم الداله مره تانيه وبين قوسين مكتوب ByVal nDrive As String يعني ايه ByVal والباقي بيعرف nDrive علي أنه نص وليه حاطط الباقي (As Long ).

والقصه ما بتنتهيش علي كده بلاقي معرف شوية متغيرات مره ثوابت ومره مش عارف ايه و مره ...و مره ... , ايه علاقتها بالداله وهل كل داله ليها متغيرات خاص بيها وهعرفها ازاي ؟!؟

:wacko:

حد يكسب فيا ثواب ويشرحلي الموال اللي فات عشان أنا مش عارف أتقدم خطوه واحده في الفيجوال بيسك بسبب عدم معرفتي بدوال ال api وفي دماغي أفكار ومش عارف أنفذها لأن الفيجوال بيسك كلغه بدون ال api ميقضيش مصلحه , وأرجوكم التدعيم بأمثله مختلفه في الهدف والتدرج في المستوي من السهل للصعب وادراج تعليقات في الكود عشان أفهم (وحده وحده , تاتا تاتا) ومتوهش ووضع كل مثال علي داله في مشروع خاص حتي لا تتداخل الدوال ومتغيراتها وسامحوني ان كنت طولت عليكم وربنا يقدركم علي فعل الخير والله الموفق .

#2

بسم الله الرحمن الرحيم

السلام عليكم

أدخل على هذة اللينكة

/index.ph...=0entry316060

وستجد ما تريد بأذن الله

وعندك فى قسم السى بلس بلس شرح رائع للاخوة الشمرى وgameDEV4arab عن الapi فانا مثلك محتار ولكن يعنى الحال بدا يمشى شوية بعد الاستفادة من الاخوة اللى قد ذكرتهم

جزاهم الله خيرأ

Muhammad Allam

Computer Science

@Resource(MappedURL="My Blog" )

#3

شكرا على الوصلة يااستاذ علام

قمت بتحميل بعض الكتب منها وباذن الله نجد مايفيدنا :rolleyes:

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#4

نفس مشكلتي

#5

بسم الله

اخي الكريم

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

أرجو ان لا تفهم ردي هذا غلط ,,,,

نفس المعاناة..... أتمنى ان تجد ردا شافيا لما تبحث عنه

وفقك الله والى الامام

اخوك

المبرمج الطيب :)

تم تعديل هذه المشاركة بواسطة المبرمج الطيب في 26 أبريل 2005 في 17:39

إذا كان ترك الدين يعني تقدما ***** فيا نفس موتي قبل أن تتقدمي

اعط الفقير سمكة يشبع يوما * * * * علمه الصيد يشبع مدى الحياة

قتل امرئٍ في غابةٍ ***** جريمة لا تغتفـر

وقتل شعبٍ بأكمله ****** مسألةٌ فها نظر

حتى الكلاب إذا رأت يوماً فقيراً ماشياً *** نبحت عليه وكشرت أنيابها

الاعجاز العلمي في القرآن والسنة

#6

شكرا للشباب علي الردود وباين ان المشكله دي مش مشكاتي لوحدي , لكن لغاية الآن محدش عمل فيا معروف واداني مثال مع الشرح الوافي بالعربي ! طيب الناس اللي كل شويه الاقيه حاطه برنامج مع السورس كود ومليان api و أفتحه وألاقي نفسي مش فاهم حاجه عملوا ازاي ولا برضه copy,paste ?!? :wacko: :wacko: :wacko:

#7

آه يا hazzoom أنت جيت على الجرح ..

نفس المشكلة تواجهني لدرجة إني وصلت لحالة ... مش حقول يأس .. بحاول تاني وثالث إلى أن أفهمها ..

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

Public Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long

بالنسبة للكلمات الثلاث الحمد لله أنت فاهمها .. Public Declare Function

وبعد كذا يجي أسم الدالة ( GetDriveType ) .

وبعد كذا كلمة ( Lib ) معناتها مكتبة ويذكر المكتبة التي تحتوي على هذه الدالة وهي "kernel32"

أما Alias ممكن تقول معناها تحويل أو أسم الدالة الحقيقي في المكتبة ثم يذكر أسم الدالة الحقيقي وهو "GetDriveTypeA" ... وهذا تفسير من عندي لأني رأيت هذي الكلمة من قبل في ملف من ملفات الخادم المعروف ( apache ) ..

ثم بعد ذلك تأتي المتغيرات التي نرسلها مع الدالة أو البارامترات ..

أما ByVal وهي إختصار ( By Value ) يعني قيمه .. لكن مش فاهم بالضبط ليش تستخدم وهناك ايضاً ByRef وهي إختصار ( By Reference )

وبعد كذا المتغير ونوع المتغير ..

أما آخر الدالة As Long معنى أن الدالة سترجع قيمة من النوع Long .

هذا بالنسبة للمثال إللي طرحته ..

أما عن برنامج api viewer فهو فقط يعرض لك الدوال ، والثوابت التي تستخدمها الدوال ، والأنواع .

فمثلاً إذا أخترت الدالة

Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, pDefault As PRINTER_DEFAULTS) As Long

تجد أن هناك نوع جديد وهو ( PRINTER_DEFAULTS ) إذا تذهب إلى خانة الأنواع وتبحث عن هذا النوع وتدرجه مع الدالة .. وهكذا بالنسبة للثوابت ..

هذا اللي قدرت أفهمه من هذي الدوال .. وأتمنى لك حظاً سعيداً ..

#8

بسم الله الرحمن الرحيم

اشكرك على المرور

أولا انا كنت مثلكم ومازلت ولكن مع الصبر والتعب عملت اول برنامج message box ثم بعد ذلك عملت برنامج form and menu

ولكن أيضا مع التعلم انا لسة جايب كتاب عربى يعنى جيد فى api ولكن أقراء من عل النت ايضا وانزل برامج open source وانظر فيها ويعنى الواجد بيطلع بحاجة بسيطة

بس اهو هو كدة لازم تجتهد من نفسك

Muhammad Allam

Computer Science

@Resource(MappedURL="My Blog" )

#9
/index.php?showtopic=54052

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#10

:( :( :( يبدو ان الموضوع مات وكل الناس بتعمل copy , paste ومحدش هيعرف يشرحها زي ما أنا وكل الشباب بنتمني و هحول دلفي !!! :wacko: :wacko: :wacko:

#11

هل تتوقع أن نخترع دالة الـ API من بنات أفكارنا ؟؟

أتكلم عن نفسي فأنا أقوم بكل بساطة بالنسخ واللصق، وأصلاً برنامج الـ API Viewer مخصص لذلك ..

ولكني أيضاً أجد نفسي قادراً على تمرير المتغيرات المناسبة .. وأفهم الكود بشكل معقول .. ولا يشكل ذلك عائقاً بالنسبة إلي ..

إذا كنت ستجد غايتك في الدلفي فلا تتردد ..

بالتوفيق ..

ani.gif
#12

كفايا ياس ونكد يا اخ hazzoom يمكن هيا اصلا مش مسموع التعامل معها الا بالطريقة دى

حاول الاجتهاد وتجنب api نهائيا

وريح دماغك

#13
اقتباس
يمكن هيا اصلا مش مسموح التعامل معها الا بالطريقة دى

حاول الاجتهاد وتجنب api نهائيا

أخي new.net كلامك صحيح بالفعل، هذه الدوال وضعت لكي نقوم بنسخها من الـ API Viewer ولصقها في البرنامج الخاص بنا، ثم بعد ذلك نستخدمها حسب الحاجة، ولكن هناك فرق بين من يقوم بنسخها وهو لا يعرف معناها وبين غيره ..

في عالم البرمجة لا تتوقع أن تحصل على كل شيء بسهولة، ولكن لابد أن تجتهد ولكل مجتهد نصيب ..

إذا كنت من أي مشكلة ستقول سأنتقل إلى لغة أخرى فأنت الخاسر الأول والأخير لأنك ستجد نفس الصعوبات في اللغة الجديدة ولن تحترف أياً منهما، كما أنه لن يضر الفيجول بيسيك نقص أحد مبرمجيها أو زيادته ..

لكي أوضح أن المسألة أسهل مما نتصور سنأخذ مثالاً بسيطاً:

أنا الآن أريد تشغيل ملف صوتي من نوع wav وأعرف مسبقاً أنه يوجد دالة API تقوم بذلك ..

بعد البحث وجدت أن الدالة التي تقوم بذلك اسمها sndplaysound، ولكني ما زلت لا أعرف شيئاً عنها ..

سأقوم بتشغيل برنامج الـ API Viewer المرفق مع الفيجول بيسيك وأقوم بفتح الملف Win32API.txt ليعرض لي جميع دوال الـ API وأقوم باختيار الدالة sndplaysound منها ..

بعد اختيار الدالة سأقوم بالضغط على زر copy لنسخها، وأذهب إلى مشروعي الحالي وأقوم بلصقها هناك ..

الآن سنناقش النص الملصوق كلمة كلمة ( وإن كنت لا أعتقد أنها الطريقة الصحيحة لأنه في حال عدم معرفة وظيفة كلمة معينة بالكود فهذا لا يعني أن أتجاهل الكود بأكمله ):

Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long

أول كلمة هي private وهي تحدد مدى هذه الوظيفة ويمكن عملها Public كما تعرف ..

ثاني كلمة هي Declare وهي كلمة محجوزة للإعلان عن دوال الـ API ..

ثالث كلمة هي Function وهي تدل على أننا سنعلن عن وظيفة عادية مثلها مثل أي وظيفة نقوم بعملها نحن ( يدوياً ) ..

رابع كلمة هي sndplaysound وهو اسم هذه الوظيفة، وهذا الاسم مثله مثل أي وظيفة نضع لها اسم، ويمكننا تغييره بأي اسم نريده ..

بعد ذلك Lib "winmm.dll" وهي تحدد اسم المكتبة التي سنأخذ منها هذه الوظيفة، ولا تسألني عن معنى الكلمة Lib لأنها محجوزة لهذا الغرض وهي اختصار لكلمة مكتبة Library ..

بعد ذلك Alias "sndPlaySoundA" وهي تشير إلى اسم الوظيفة التي سنستخدمها من المكتبة المُشار إليها سابقاً، ومن الطبيعي أنه لابد أن تكون هذه الوظيفة موجودة في المكتبة المذكورة وإلا فإنه سيخرج لك رسالة خطأ تخبرك بأن هذه الوظيفة غير موجودة، ولا تسألني أيضاً عن معنى الكلمة Alias فهي كلمة محجوزة لهذا الغرض ومعناها القاموسي اسم قصير ومختصر للدلالة على ما هو أشمل من ذلك، والمراد الدلالة على الكود الخاص بالوظيفة في المكتبة ..

بعد ذلك قوسين لتمرير المتغيرات إلى الوظيفة مثلها مثل أي وظيفة أخرى ..

في داخل القوسين يتم تمرير المتغيرات المطلوبة من قبل الوظيفة وبالطبع سيتم الإشارة إليها بالكلمة ByVal وليس ByRef لأننا نود تمرير القيمة فقط ولا نريد تمرير عنوان لمتغير أو ما أشبه، ومن خلال أسماء هذه المتغيرات يمكنك التعرف على فائدتها، فالمتغير lpszSoundName وهو من نوع string يدل على اسم الملف الصوتي ومساره بالطبع، والمتغير uFlags وهو من نوع long يدل على الهيئة أو الطريقة التي سيتم تشغيل الملف عليها، وبعد قليل من البحث أيضاً يمكنك معرفة أن هناك أكثر من طريقة لتشغيل الملف عليها وهي كالتالي ( في شكل ثوابت ):

Const SND_SYNC = &H0
Const SND_ASYNC = &H1
Const SND_NODEFAULT = &H2
Const SND_MEMORY = &H4
Const SND_LOOP = &H8
Const SND_NOSTOP = &H10

يمكنك - بكل بساطة - تجربة الطرق السابقة لملاحظة الفرق، كما أنه يمكنك البحث عن تفاصيل هذه الطرق وستجد الكثير والكثير عنها ..

بعد إغلاق الأقواس كما نرى فإن هذه الوظيفة تقوم بإرجاع متغير من نوع long وهذا المتغير يعود بقيمة تكون ذات فائدة في بعض الوظائف، ويمكنك عرضها أو وضعها في متغير كما هو الحال مع أي وظيفة أخرى، كما أنه يمكنك تجاهلها كما سنفعل لو قمنا باستخدام هذه الوظيفة مثلاً ..

إليكم الكود كاملاً:

Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Private Sub Command1_Click()
sndPlaySound "c:\a.wav", 1
End Sub

هل ترون أن الأمر بهذه الصعوبة !!!!!!!

ani.gif
#14

:( أولا أنا بأعتب عليك لأنك زي ما تكون زعلان مني أو عايز تخلص مني , ثانيا عشان أحول دلفي دي قصه مش سهلة أنا بقول كده من يأسي في تعلم ال api مش أكتر , ثالثا أنا عارف أن الداله لازم تتنسخ من api viewer ده شئ أساسي رابعا أنا مش قاعد ساكت أنا بجاهد عشان أتعلم وربنا يعلم ,

ودي برضه مش مشكلتي لوحدي زي ما اتضح دي مشكلة شباب كتير.........................................

خامسا الصعوبه عندي ليست في نسخ ولصق الداله وانما في التعامل مع المتغيرات يعني أنا هعرف منين أجيب المتغيرات اللي انت كتبتها :

Const SND_SYNC = &H0

Const SND_ASYNC = &H1

Const SND_NODEFAULT = &H2

Const SND_MEMORY = &H4

Const SND_LOOP = &H8

Const SND_NOSTOP = &H10

لأنها غير موجوده في ال api viewer ؟!؟!؟

وعموما شكرا يا سيدي علي الرد وان كان قاسي , أنا برضه قلبي أبيض... :lol:

وكمان شكرا لتطلع زعلان انت كمان...

وأرجو ممن لديه فكره التدعيم بأمثله أخري ....

سادسا يا عم new.net لا يمكن تجنب ال api لأنها مهمة جدا وربنا ميجيبش نكد...

تم تعديل هذه المشاركة بواسطة hazzoom في 30 أبريل 2005 في 09:09

#15

ربنا يوفقك ياحازم :rolleyes:

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#16
اقتباس
أولا أنا بأعتب عليك لأنك زي ما تكون زعلان مني أو عايز تخلص مني

عتبك مقبول يا باشا :)

وأنا فعلاً عايز أخلص منك :D

عارف ليه ؟؟ عشان طريقتك في الكلام كانت مستفزة، والإخوة وضعوا لك أكثر من رابط، كما أنك هددتنا بالتحويل إلى دلفي B) ..

اقتباس
ثانيا عشان أحول دلفي دي قصه مش سهلة أنا بقول كده من يأسي في تعلم ال api مش أكتر

أنا عارف إنها مش قصة سهلة، بس إنت اللي قلت كده ..

وقد وضحت لك أن تعلم الـ API ليس مشكلة أبداً ..

اقتباس
ثالثا أنا عارف أن الداله لازم تتنسخ من api viewer ده شئ أساسي

:lol:

اقتباس
رابعا أنا مش قاعد ساكت أنا بجاهد عشان أتعلم وربنا يعلم

إن شاء الله ربنا هيوفقك ..

اقتباس
خامسا الصعوبه عندي ليست في نسخ ولصق الداله وانما في التعامل مع المتغيرات

صدقني أنا لم أولد وأنا أعرف هذه المتغيرات :D كل ما في الأمر أني بحثت عنها .. وهذا ما يفعله جميع المبرمجين ..

سأطرح لك مثالاً آخر وهو الدالة GetDriveType والتي ذكرتها أنت بالأعلى

Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long

طبعاً الصيغة والكلمات الأساسية ذكرت لك معناها في الرد السابق ..

هذه الوظيفة تستقبل متغيراً واحداً وهو nDrive من نوع string ومن الواضح جداً أنه سيتضمن رمز محرك الأقراص الذي نريد جلب نوعه .. ( الدالة GetDriveType تقوم بمعرفة نوع محرك الأقراص الذي نمرره لها ) ..

بعد ذلك تعيد هذه الوظيفة قيمة من نوع long وهي ضرورية طبعاً، لأنه من خلالها نستطيع معرفة نوع محرك الأقراص الذي مررناه، وبإمكانك تجربة اختبار محرك الـ Flopy Disk لتجد أنه يعيد الرقم 2، وتجربة محرك الـ Hard Disk لتجد أنه يعيد الرقم 3، وتجربة محرك الـ CD-ROM لتجد أن يعيد الرقم 5 ..

وبعد قليل من البحث أيضاً ستجد جميع هذه القيم العائدة، وسأدرجها لك:

Const DRIVE_UNKNOWN As Long = 1
Const DRIVE_REMOVABLE As Long = 2
Const DRIVE_FIXED As Long = 3
Const DRIVE_REMOTE As Long = 4
Const DRIVE_CDROM As Long = 5
Const DRIVE_RAMDISK As Long = 6

اقتباس
وعموما شكرا يا سيدي علي الرد وان كان قاسي

أعتذر وأتمنى لك التوفيق ..

ani.gif
#17

نسيت وضع الكود في شكله النهائي

Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Const DRIVE_UNKNOWN As Long = 1
Const DRIVE_REMOVABLE As Long = 2
Const DRIVE_FIXED As Long = 3
Const DRIVE_REMOTE As Long = 4
Const DRIVE_CDROM As Long = 5
Const DRIVE_RAMDISK As Long = 6

Private Sub Command1_Click()
   Select Case GetDriveType("c:")
    Case DRIVE_UNKNOWN
      MsgBox "The drive type cannot be determined"
      
    Case DRIVE_REMOVABLE
      MsgBox "The disk can be removed from the drive."
      
    Case DRIVE_FIXED
      MsgBox "The disk cannot be removed from the drive."
      
    Case DRIVE_REMOTE
      MsgBox "The drive is a remote (network) drive."
      
    Case DRIVE_CDROM
      MsgBox "The drive is a CD-ROM drive."
      
    Case DRIVE_RAMDISK
      MsgBox "The drive is a RAM disk."
  End Select
End Sub

تم تعديل هذه المشاركة بواسطة عبد الله فتحي في 30 أبريل 2005 في 16:48

ani.gif
#18

اخوي عبد الله والله انك وضحت كل شي الا شغله واحده , وهي :

Const DRIVE_UNKNOWN As Long = 1

Const DRIVE_REMOVABLE As Long = 2

Const DRIVE_FIXED As Long = 3

Const DRIVE_REMOTE As Long = 4

Const DRIVE_CDROM As Long = 5

Const DRIVE_RAMDISK As Long = 6

انت قلت قليل من الحث , بس وين نبحث عنها ؟؟؟؟

#19

أحبائي المبرمجين الحلوين :D

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

أريد أن أقص عليكم موقف، في ذات يوم و نحن في محاضرة فيجوال بيسك سأل سائل ( هو احنا لازم نعرف كل أوامر و دوال فيجوال بيسك) عارفين المحاضر رد عليه وقاله ايه؟

قال له ( و مين يعرف:D)

محدش بيعرف كل حاجة في لغات البرمجة مهما بلغ احترافه، و من منطلق ايماني الشديد بان المبرمج المحترف هو من يستطيع توظيف الكود الذي لديه بطريقة احترافية و سهلة في نفس الوقت، أقول لكم انه من الممكن أن تصنع المعجزات بكود بسيط و عقل يعمل

تحياتي لكم

تم تعديل هذه المشاركة بواسطة romantic_boy في 30 أبريل 2005 في 20:32

Oracle 10G Certified Professional Developer.

عودة بعد 3 سنوات غياب، ان شاء الله سوف اتكلم معكم قريبا احبائي

#20

أنا معك أخي romantic_boy في أنه لا يوجد من يعرف كل شيء ..

كما أن الـ API أيضاً ليست كل شيء في البرمجة ..

أخي tts بالنسبة لهذه القيم العائدة فكما ذكرت يمكنني معرفتها من خلال التجربة ،، ولكن لمزيد من المعرفة بإمكانك فتح الـ www.google.com كما فعلت أنا والبحث عن ( GetDriveType nDrive ) وستجد طبعاً الكثير من المواقع، افتح واحداً منها أو اثنين وانظر إلى الأمثلة والشروحات البسيطة ( قليل من البحث :D )

ani.gif
#21

وعلي الرغم من ذلك لن أترك المنتدي ولا الفيجوال بيسك وربنا يسهل في حكاية المتغيرات ولا الثوابت

وشكرا للجميع علي الردود :lol: :lol: :lol:

#22

السلام عليكم

وظائف API أشبه ما تكون بالسهل الممتنع .

هي كثيرة جداً جداً و الإلممام بها جميعاً أشبه ما يكون بالمستحيل .

تتميز بـ :

1- السرعة :

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

2- الإمكانيات اللامحدودة :

فتستطيع بواسطة الـ API أن تصل للعتادة و قراءة الذاكرة و أشياء أخرى و بإمكانيات لا تمنحك إيها الـ VB ، خذ مثلاً : اسم الجهاز أو اسم المستخدم الحالي لا توجد دوال في الـ VB تفيدك في هذا .

3-أساس البرمجة :

فأساس نظام ويندوز هو مكتبات الربط الديناميكي DLL كـ USER32.DLL و KERNEL32.DLL و GDI32.DLL و التي تحتوي على مئات الوظائف و التي نسميها ( وظائف أو دوال API)

وبمعرفتك لـ API فسوف تعرف كيفية عمل نظام التشغيل ، بل و سيسهل عليك الإنتقال للغات أقوى كـ C++

وللإنصاف فلها عيوب من أبرزها :

1- الخطأ في كتابة الشيفرة قد يؤدي إلى إنهيار البرنامج و أحياناً إنهيار النظام .

2- صعوبة الاستخدام مقارنة بـ VB .

3- لا يمكن اكتشاف الأخطاء داخل بيئة تطوير VB بل يجب عليك أن تلجأ إلى استخدام دالة API تخبرك عن أخر خطأ حدث ، و مع هذا فليس كل الدوال تظهر أخطائها في دالة الأخطاء .

والآن ،،،

أنصح كل مبرمج VB يطمح أن يصل للإحتراف أن يتقن الـ API ولو أدى الأمر لأن يتفرغ لها وينسى VB.

فبعد أن تتعلمها ستكون :

خبيراً بنظام التشغيل

و ستستطيع أن تفهم لغات أخرى كـ C++ و أسمبلي

و الأهم من هذا كله أنك ستجد نفسك أما بحر من الإمكانيات لا ساحل له .

طبعاً مصادر المعلومات لوظائف الـ API هي مكتبة الـ MSDN وكذلك توجد بعض المواقع المختصة بدوال الـ API

أرجو التوفيق للجميع .

والسلام عليكم ورحمة الله وبركاته

أخي سوف تبكي عليك العيون * * * وتـسـأل عـنك دمـوع المـئـين

فإن جف دمعي سيبكي الغمام * * * يـرصـع قـبرك بــالـياسـمـيـن

أخـي مـا يـأسـنـا ولـن نيـأسـا * * * وما طال في القلب لبث الأسى

ومـا حـل أفــئــدة الــمــــؤمـن * * * سـوى أمـل في الـجنـان رسـى

أخي فانتظر ولتعش في غـد * * * سـيـنـبـثـق الأمـل الـسـرمـد

فـإن مـزقـتـنـا سني الــحـيـاة * * * فإنـا مع الـنصـر فـي مـوعــد

#24
اقتباس
السلام عليكم و رحمة الله و بركاتة :

أولا : التعريف :

واجهة برمجة التطبيقات Aplication Program Interface او اختصار API هي عبارة عن دوال Functionsمثلها مثل دوال فيجوال بيسك تعطيها مدخلات معينة لكي تقوم باستخراج مخرجات معينة حسب وظيفة الدالة المستدعاة .

ثانيا : مكان تواجدها :

محفوظة بداخل ملفات تعرف بملفات الربط الديناميكي Dynamic Link Libraries او اختصار DLL توجد معظم تلك الملفات بداخل مجلد system بداخل المجلد المنزل بداخلة ملفات و مجلدات نظام التشغيل ويندوز بالنسبة لنسخ نظام التشغيل المبنية على منصة win9x مثل ويندوز 95 و ويندوز 98 و ويندوز ملينيوم و على مجلد system32 بداخل المجلد المنزل بداخلة ملفات و مجلدات نظام التشغيل بالنسبة لنسخ نظام التشغيل المبنية على منصة NT مثل ويندوز NT و ويندوز XP

ثالثا : ما هي اللغات المكتوبة بها :

معظم تلك الملفات مكتوب بلغات برمجة قريبة المستوى من لغة الآلة مثل لغة التجميع Assembly و لغة سي ++C و ذلك لانها اكثر مرونة في التعامل مع المكونات المادية من الفيجوال بيسك . و كتبت تلك الملفات لاستدعائها من داخل لغات البرمجة مثل فيجوال بيسك لتقوم بمهام تعجز عنها تلك اللغات او لا تستطيع تلك اللغات ان تقوم بتلك الوظائف بكفائة مثلها .

رابعا : وظيفتها :

كما ذكرنا انها مجموعة عديدة من الوظائف Functions كل وظيفة لها مدخلاتها المناسبة لكي تقوم بمعالجتها و اخراج نتيجتها تبعا لوظيفتها . فهناك دوال للتعامل مع الملفات و دوال للتعامل مع السلاسل الحرفية و دوال للتعامل مع مسجل النظام و دوال للتعامل مع الاصوات ..... الخ .

خامسا : كيفية التعامل مع تلك الوظائف :

يتم التعامل مع تلك الوظائف باستدعائها من داخل فيجوال بيسك باسمها حيث أن لكل دالة اسم مع تمرير الوسائط لها بطريقة صحيحة , فمثلا لاستدعاء الدالة التي تعيد تشغيل نظام التشغيل Restart نكتب تعريف الدالة ExitWindowsEx في قسم التعريفات كالآتي :

Private Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long

[\code]

حيث user32 هو اسم المكتبة التي بداخلها الوظيفة , و من ثم يتم استدعائها من داخل اي حدث لعمل اعادة تشغيل للجهاز كالآتي :

[code]

(Call ExitWindowsEx (2 , 0

[\code],

سادسا : كيف اعرف تلك الوظائف و ما هي مدخلاتها الصحيحة و كيفية استدعائها :

يمكنك ذلك عبر الاطلاع على مكتبة مساعدة فيجوال ستوديو MSDN او عبر برنامج API-Guide الذي يمكنك تنزيلة من الرابط التالي :

http://www.student.kuleuven.ac.be/~...3.7/agsetup.exe

و يمكنك الاطلاع على ما كتب عن ذلك الموضوع بعمل بحث بداخل الموقع عن طريق الكلمة API في صندوق البحث .

و السلام عليكم و رحمة الله و بركاتة

منقول من موضوع للأخ S-N-A في منتديات الفيجول بيسيك للعرب ..

ani.gif
#25

بسم الله الرحمن الرحيم

يبدو اني دخلت الموضوع متأخر جدا ههههههه

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

أنت قلت أنك لا تحب النسخ وا للصق ... و من منا يحب ذلك ؟؟؟ لا أحد

تقول انك تريد أن تفهم كل سطر في كودك طبعا الكل يسعى الى ذلك

اذا سأعطيك مثالا بأبسط سطر برمجي في العالم و الذي يظن المبرمجون جميعهم أنهم يفهمونه الا و هو

MsgBox "MsgToShow"

  لو سألت اي مبرمج وقلت له ماذا يفعل هذا الكود سيجيبك : "أنه يظر رسالة الى المستعمل نصها MsgToShow ....   ممتاز

 لكن كيف يتم ذلك ؟؟؟؟ هل أبدا سألت نفسك ؟؟؟ قد تكون فعلت لكنك تجاوزت المشكل و مضيت في حياتك البرمجية

 سنقوم الآن بتحويل هذه الفنكشن الى دالة API حتى احاول أن أزيل عنك الخوف من هذه الدوال ههههههه

 لنفرض أن هذه الفانكشن لم تكن في الفيجوال بيسك أصلا و كانت API و كانت على الشكل التالي :

Private Declare Function MsgBox Lib "vb6en" Alias "ShowMsg" (ByVal prompt As String,ByVal title As String,ByVal Icon Icons) As MsgResult

---

طبعا هذا مثال فقط

---

كيف كنت اخي ستفهم هذه الدالة بكل بساطة كما قام بشرح دالة اخرى الأخوة سابقا

يتم استدعائها باسمها المعرف و هو MsgBox و هذه الدالة توجد في المكتبة vb6en و اسمها الحقيقي هناك ShowMsg و لها بارمترز و هي prompt و هو النص الذي سيظهر في المسج ثم title عنوانها و Icon من نوع "Icons" مثلا

ICON_CRITICAL

ICON_INFORMATION

.

.

.

لتحديد الأيقونة التي ستظهر في المسج

ز هذه الدالة تعيد لنا قيمة من نوع MsgResult التي تحتوي على هذه الأنواع مثلا:

Msg_Yes

Msg_No

Msg_Cancel

...

تلاحظ ان فهم الدالة في غاية البساطة

و تأكد أن هذه هي الطريقة الصحيحة في فهم الدالة لا تحاول ان تدخل الى أماكن مظلمة قد لا تفيدك في شئ لكن المهم ان تفهم وظيفة الدالة و البارامترز التي تأخذها و كذلك متى يمكنك الأستفادة منها

و تأكد أن التجربة هي التي تكسبنا معرفة التعامل مع هذه الدوال و حفظها عن ظهر قلب (مع فهمها طبعا) كما نفعل مع اوامر البرمجة العادية

اتمنى أن يكون ردي موفقا

و السلام عليكم

تم تعديل هذه المشاركة بواسطة crazy-man في 7 مايو 2005 في 19:27

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…