الامل الطائر
المساهمات : 57 تاريخ التسجيل : 12/03/2013
| موضوع: شرح دوال Api مع بعض الامثله الخميس أبريل 17, 2014 10:10 pm | |
| السلام عليكم ورحمة الله وبركاته
أحببت أن أنقل لكم هذا الدرس من أحد المنتديات
شرح دوال Api مع بعض الامثله
API – Windows Application Programming Interface أن الفائدة من أستخدام دوالAPI لسببين هما الأول نستطيع أنجاز قسم أشياء لاتستطيع لغة VB أنجازها، والثاني تستطيع تنفيذ بعض الأشياء أسرع من تنفيذها ب VB .
هناك أربعة خطوات لأستخدام دوال API 1- حدد أي برنامج فرعي تريد أن تستخدمه هنالك دوال عديدة ل API وهي موضحة في Help الموجود في VB6.0 .
2- حدد هوية أو نوع البيانات التي ترغب بتمريرها الى البرنامج الفرعي . والعبارة TYPE تقوم بعملية التمرير.
3- تثبيت أو تعريف Declare البرنامج الفرعي بأستخدام العبارة Declare ، للعلم API هو ليس جزء من لغة VB لهذا السبب تستخدم عبارة Declare لغرض أخبار VB أين يستطيع أن يجد هذه الدوال. والصيغة لعبارة التثبيت هي: Declare Sub name lib "lib" [ Alias, "alias"] (arguments) Declare Function name Lib "Lib" [Alias, "alias"] (arguments) As type name : هو أسم الدالة التي تحددها lib : موقع وجود المكتبة library وعلى سبيل المثال أسم المكتبة gdi32 ، kernel32 ، user32 ،....ألخ alias :هي أسم الدلالة حيث يتم عن طريقها تعريف البرنامج الفرعي أو الدالة في المكتبة arguments : هي أسم المتغيرات المستقلة المستخدمة من قبل دالة API التي تعرف بعبارة TYPE . type : نوع المتغير المرجع لدالة API .
تمرير المتغيرات المستقلة Arguments : لغة VB بصورة أساسية تمرر المتغيرات أستناداً الى المرجع ، أي بمعنى VB تمرر عناويين الذاكرة المخزونة فيها هذه المتغيرات يدلاً من تمرير قيمة المتغيير ، فلهاذا سنلاحظ كثيراً أستخدام ByVal وذلك لتغيير أسلوب التمرير للتمرير بقيمة المتغيير.
الجزم strings : عند تمرير الحزم يجب أن تمرر باسلوب التمرير بالقيمة دائماً أي أستخدام ByVal
القيم Null : عند عدم تثبيت قيمة المتغيير الحزمي فأن حالة API ستمرر القيمة البدائية Null بدلاً عن أنه فارغ . وهناك شئ أخر يجب عمله قبل تعريف دوال API المستخدمة مع الحزم وهو تعريف حجم الحيز الخاص بالحزمة عن طريق أستخدام DIM ، مثال DIM txt As String * 256 .
المناولة Handles : كثير من دوال API تستخدم المناولة في برنامجها الفرعي لتمثيل عناصرها. ومنها مناولة التي تشير للويندوز HWND ، مناول الصور HBITMAP ومناولة تحديد الجهاز HDC .......ألخ. المناولات هي لاشئ سوى أنها أعداد صحيحة تمثل العنصر وعند أستخدامها من قبل دالة API يجب تعريفها على أنها ByVal Long وهي فقط أرقام وليست لها معنى أذا أستعملت خارج الجالة.
4- أستدعاء الدالة أو البرنامج الفرعي call routine : بعد الأنتهاء من تعريف المحتويات أو البيانات يجب تثبيت دالة API ويتم أستدعائها كما تستدعى أي دالة أعتيادية في VB .
دوال API الاكثر استخداما :
-1 الدالة ClipCursor
طريقة كتابتها: Declare Function ClipCursor Lib "user32.dll" (lpRect As RECT) As Long
عن طريق الكود التالى: RECT يجب تعريف المتغير
Purivate Type RECT Bottom As Long Left As Long Right As Long Top As Long End Type
تقوم هذه الدالة بتقييد مؤشر الماوس فى مستطيل نحدد ابعاده عن طريق المعامل lpRect بحيث لايمكن للمؤشر ان يخرج عن هذه الابعاد.
2- الدالة SwapMouseButton
طريقة كتابتها: Declare Function SwapMouseButton Lib "user32.dll" (ByVal bSwap As Long) As Long
تقوم هذه الدالة بتغيير الزر الافتراضى للماوس وتحتاج لمعامل واحد هو bSwap فاذا اردنا ان نجعل الزر الايسر هو المتحكم الاساسى نمرر لهذا المعامل القيمة 0 واذا اردنا ان نجعل الزر الايمن هو الاساسى نمرر القيمة 1.
3- الدالة SetCursorPos
طريقة كتابتها: Declare Function SetCursorPos Lib "user32.dll" (ByVal x As Long, ByVal y As Long)
هذه الدالة تمكنك من وضع مؤشر الماوس فى المكان الذى تريده وتحتاج لقيمتين هما المعامل X والمعامل Y حيث X هى بعد المؤشر عن الجانب الايسر للشاشة وY بعده عن الجانب العلوى.
4- الدالة WindowFromPoint
طريقة كتابتها:
Declare Function WindowFromPoint Lib "user32.dll" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
هذه الدالة تعود بمقبض النافذة الموجودة فى المكان (xPoint,yPoint) وغالباً ماتستخدم الدالة GetCursorPos مع هذه الدالة لمعرفة مقبض النافذة الموجودة تحت المؤشر.
5- الدالة SetSystemTime
طريقة كتابتها:
Private Declare Function SetSystemTime Lib "kernel32 .dll" (lpSystemTime As SYSTEMTIME) As Long
ثم تعريف المتغير SYSTEMTIME
Private Type SYSTEMTIME wYear As Integer wMonth As Integer wDayOfWeek As Integer wDay As Integer wHour As Integer wMinute As Integer wSecond As Integer wMilliseconds As Integer End type
هذه الدالة تستطيع بها تغيير وقت وتاريخ الجهاز ولتشغيلها قم بتعريف متغير من النوع SYSTEMTIME ثم مرر له القيم الجديدة وبعد ذلك مرر ذلك المتغير الى الدالة فيتم التغيير المطلوب
6- الدالة GetForegroundWindow
طريقة الكتابة: Private Declare Function GetForegroundWindow Lib "User32"() As Long
هذه الدالة تعود بمقبض النافذة الظاهرة فى مقدمة الشاشة.
7- الدالة SetWindow****
طريقة الكتابة: Declare Function SetWindow**** Lib "user32.dll" Alias "SetWindow****A" (ByVal hwnd As Long, ByVal lpString As String) As Long
تمكنك هذه الدالة من تغيير خاصية Caption للنافذة التى تحددها وتحتاج لمعاملين هما hwnd- 1وهو مقبض النافذة التى تريد تغيير عنوانها lpString- 2عنوان النافذة الجديد
ويمكنك استخدام هذه الدالة مع الدالة السابقة وكتابة الكود فى اداة تايمر وراح اشوف شغلات حلوة .
8- الدالة SndPlaySound لتشغيل الملفات الصوتية من نوع wav
طريقة الكتابة: Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags 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
9- - الدالة 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 ..
الكود في شكله النهائي:
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
10- الدالة Beep
طريقة الاعلان: Declare Function Beep Lib "kernel32.dll "(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long تقوم هذه الدالة باخراج صوت على السماعة الداخلية للجهاز وتحتاج لمعاملين هما: 1--dwFreq ويعبر عن تردد الصوت المطلوب بالهرتز -dwDuration-2ويعبر عن مدة استمرار الصوت بالمللى ثانية
11-الدالة IsIconic
طريقة الاعلان:
Private Declare Function IsIconic Lib "user32.dll" (ByVal hwnd As Long) As Long
هذه الدالة تخبرك مااذا كانت النافذة مصغرة فى شريط المهام ام لا وتحتاج لمعامل واحد وهو مقبض النافذة التى تريد معرفة حالتها وتعود الدالة بالقيمة 0 اذا كانت النافذة مكبرة وتعود بالقيمة 1 اذا كانت النافذة مصغرة فى شريط المهام
12-الدالة IsWindowEnabled
طريقة الاعلان:
Private Declare Function IsWindowEnabled Lib "user32.dll" (ByVal hwnd As Long) As Long
تعود هذه الدالة بالقيمة 1 اذا كانت الدالة ممكنة Enabled وتعود بالقيمة 0 اذا كانت الدالة غير ممكنة Disabled ونحدد النافذة المطلوبة عن طريق تمرير قيمة مقبضها الى المعامل hwnd
13 -الدالة MessageBeep
طريقة الاعلان: Private Declare Function MessageBeep Lib "user32.dll" (ByVal wType As Long) As Long
تصدر هذه الدالة الاصوات الخاصة الامر MsgBox وتحتاج لمتغير واحد هو wType والذى يعبر عن نوع الصوت المطلوب ويأخذ احد قيم الثوابت الاتية: Const MB_ICONASTERISK = &H40 Const MB_ICONEXCLAMATION = &H30 Const MB_ICONHAND = &H10 Const MB_ICONQUESTION = &H20 Const MB_OK = &H0
14-الدالة IsZoomed
طريقة الاعلان: Private Declare Function IsZoomed Lib "user32.dll" (ByVal hwnd As Long) As Long نمرر مقبض النافذة الى المعامل hwnd فتعود الدالة بالقيمة 1 اذا كانت النافذة مكبرة وتعود بالقيمة 0 اذا كانت الدالة فى حالتها العادية او الحالة المصغرة 15-الدالة IsChild
طريقة الاعلان: Private Declare Function IsChild Lib "user32.dll" (ByVal hWndParent As Long, ByVal hWnd As Long) As Long تعود الدالة بالقيمة 1 اذا كانت النافذة الثانية ابنا للنافذة الاولى وتعود بالقيمة 0 ان لم يكن كذلك
16-الدالة BringWindowToTop
طريقة الاعلان: Declare Function BringWindowToTop Lib "user32.dll" (ByVal hwnd As Long) As Long
تقوم هذه الدالة باحضار النافذة التى نمرر مقبضها الى المعامل hwnd الى المقدمة اى انها تعمل عمل الامر Zorder
18-الدالة SetParent
تكتب الدالة بالطريقة الاتية: Declare Function SetParent Lib "user32.dll"(ByVal hWndChild As Long, ByVal hWndNewParentAs Long) As Long
هذه الدالة تجعل احد الكائنات ابنا لكائن اخر وهذا الكائن ممكن ان يكون فورم او اداة بشرط ان يكون لها مقبض والمعامل الاول hWndChild هو مقبض الكائن الابن والمعامل الثانى hWndNewParentهو مقبض الكائن الاب
19-الدالة : PaintDesktop
تقوم هذه الدالة بأخذ صورة من سطح المكتب وهذه الدالة لها وسيط واحد وهو المكان( هذا المكان لابد ان يكون له خاصية hdc ) الذي تريد وضع الصورة فيه مثلا picturebox او على الفورم نفسه picture1.hdc , me.hdc
الصورة العامة لهذه الدالة هي :
Declare Function PaintDesktop Lib "user32" (ByVal hdc As Long) As Long
20- اسم الدالة :FindWindow بواسطة هذه الدالة تستطيع الحصول على مقبض أي نافذه(الام) وهذه الدالة لها وسيطين
الاول: اسم الصنف للنافذه التي تريد اخذ مقبضها وهو عبارة عن نص . يمكنك استخدام برنامج spy الذي يأتي مع فيجوال بيسك للحصول على اسم الصنف
الثاني : وهو حل أخر اذا كنت لاتعرف اسم الصنف (الوسيط الاول) فقط ضع اسم النافذة وهو عبارة عن نص والمقصود هو الاسم الموجود في ال Titlebar بحيث تضع الاسم بالضبط للنافذة كما هو موجود وايضا تضع الوسيط الاول الى vbnullstring
الصورة العامة للدالة :
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVallpWindowName As String) As Long
21- الدالة :ShowWindow وهذه الدالة تعمل على إظهار/إخفاء/تضغيرها/تكبيرها/ نافذة معينه انت تحددها عن طريق المقبض لللنافذة ولها وسيطان الاول : هي مقبض النافذة الثاني : تحدد عمل الدالة وتاخذ احدى الثوابت التالية SW_HIDE لإخفاء النافذه SW_MAXIMIZE لتكبير النافذه SW_MINIMIZE لتصغير النافذه SW_RESTORE لإظهار النافذه اذا كانت في ال taskbar SW_SHOW لاظهار النافذة اذا كانت مخفيه SW_SHOWMAXIMIZED SW_SHOWNORMAL
الصورة العامة للدالة : Declare Function ShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShowAs Long) As Long
22: IsDebuggerPresent
الوظيفة : هذه الدالة هى ](أحد ) طرق الحماية للبرامج من الكراكرز وهى ترجع قيمة غير الصفر اذا كان البرنامج الخاص بك يعمل تحت برامج ال debugging التى يستخدمها الكراكرز لفك حماية برامجك و بالتالى تستطيع غلق البرنامج من خلال هذه الدالة ..... و ليس معنى ذلك انها غير قابلة للكسر و لكنها احد الطرق التى تدعم الحماية الخاصة ببرنامجك
الاعلان:
Private Declare Function IsDebuggerPresent Lib "kernel32" () As Long
العائد : 0 : إذا كان البرنامج يعمل منفردا 1 : اذا كان البرنامج يعمل من خلال Debugger مثل olly debug و soft ice
وبالتالى ممكن تعمل عداد وقت واذا كان العائد لا يساوى صفر فأغلق البرنامج
if IsDebuggerPresent <> 0 then end ولقد جربت هذه الطريقة مع برنامج OLLY Debug و نجحت تماما.
اسم الدالة : InternetGetConnectedStateEx تقوم هذه الدالة بفحص الاتصال بالإنترنت بمعنى هل انت متصل ام لا ولها اربع وسائط الاول :هو متغير من نوع Long هذا المتغير يستقبل حالة الاتصال وعلى اساسه ترجع الدالة اما 0 في حالة عدم الاتصال(False) او واحد(True) في حالة الاتصال ويأخذ هذا الوسيط العديد من الثوابت منها : INTERNET_CONNECTION_LAN ما اذا كان الجهاز متصل بشبكة داخلية INTERNET_CONNECTION_MODEMما اذا كان الجهاز يستخدم المودم INTERNET_CONNECTION_OFFLINE ما اذا كان الجهاز غير متصل بالانتر نت طبعا لا بد من تعريف تلك الثوابت
الثاني: وهومتغير من نوع string يستقبل اسم الاتصال الذي تستخدمه ويستقبله من الرجستري ماعليك الا ان تعرف متغير من نوع string
الثالث: وهو طول اسم الاتصال تستطيع ان تضع قيمة تصل الى 255
الرابع :ضع قيمته صفر دائما الى 0
الصورة العامة للدالة : Declare Function InternetGetConnectedStateEx Lib "wininet.dll" (ByRef lpdwFlags As Long, ByVal lpszConnectionName As String, ByVal dwNameLen As Integer, ByVal dwReservedAs Long) As Long
دمتم في رعاية الله | |
|