ams 4 arab
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

منتدى تعليمي متعلق بالاتوبلاي ميديا ستوديو
 
الرئيسيةأحدث الصورالتسجيلدخول

 

 شرح دوال Api مع بعض الامثله

اذهب الى الأسفل 
كاتب الموضوعرسالة
الامل الطائر




المساهمات : 57
تاريخ التسجيل : 12/03/2013

شرح دوال Api مع بعض الامثله Empty
مُساهمةموضوع: شرح دوال Api مع بعض الامثله   شرح دوال Api مع بعض الامثله Emptyالخميس أبريل 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


دمتم في رعاية الله
الرجوع الى أعلى الصفحة اذهب الى الأسفل
 
شرح دوال Api مع بعض الامثله
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1
 مواضيع مماثلة
-
»  كيفية تكوين دوال Global Function
»  إستغلال دوال النظام و قل وداعا لأغلب الإضافات

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
ams 4 arab :: منتديات الأوتو بلاي وصناعة الأسطوانات :: منتدى الدروس والشروحات-
انتقل الى: