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

شرح دوالAPI

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

أثناء تصفحي لاحد المنتديات وجدت شرح لدوال API

تعلم API من خلال شرح دوال API مدعماً بالأمثلة

API – Windows Application Programming Interface

سأشرح في هذه الفقرة API بصورة عامة. أن الفائدة من أستخدام دوالAPI لسببين هما الأول نستطيع أنجاز قسم أشياء لاتستطيع لغة VB أنجازها، والثاني تستطيع تنفيذ بعض الأشياء أسرع من تنفيذها ب VB .

أستخدام API :

هناك أربعة خطوات لأستخدام دوال 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 الأكثر أستعمالاً والتي سوف تستفاد منها في تطوير برامجك.

المثال الأول : جعل الفورم ذات شفافية . من الممكن أنكم لاحظتم من لديه نظام التشغيل ويندوز 2000 و XP أنها تمتلك بعض النوافذ تمتلك شفافية تستطيع من خلالها رؤية ماموجود تحتها. لذا غي هذا المثال سأبرمج هذه الخاصية بأستعمال دوال API مع شرح كل دالة .

سيتكون البرنامج من فورم أسمه frmMain يتكون من عنصريين HScrollBar أسمه scrTransparancy و Label أسمه lblStatus ، أما الموجل Modules أسمه modTransparant

الدوال المستخدمة:

SetLayeredWindowAttributes : دالة تستخدم لأعداد عدم الشفافية والألوان الرئيسية للويندوز ذات الطبقات.

Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long

hwnd

مناولة إلى النافذةِ ذات الطبقاتِ. أي صفّفَ النافذةَ المَخْلُوقةُ بتَحديد WS_EX_LAYERED متى َخْلقُ النافذةَ بدالة CreateWindowEx أَو بوضع WS_EX_LAYERED عن طريق SetWindowLong بعد خُلِق النافذةِ .

crKey

تركيب Colorref الذي يُحدّدُ مفتاحَ لونِ الشفافيةَ لكي يُستَعملَ متى يَعدُّ النافذةَ ذات الطبقاتَ. كُلّ نقاط الشاشة تصَبغ بالنافذةِ بهذا اللونِ وسَيَكُونُ شفّاف. لتَوليد Colorref، يَستعملُ ماكرو RGB.

bAlpha

قيمة ألفا تُستَعملُ لوَصْف عدمِ شفافية النافذةِ ذات الطبقاتِ. مشابه لSourceConstantAlpha عضو تركيبِ Blendfunction. عندما تكون bAlphaقيمتها مساوية ل 0 ، النافذة شفّافةُ جداً. عندما تكون قيمة bAlpha مساوية 255، النافذة بليدةُ.

dwFlags

يُحدّدُ العمل الذي سوف يتَخْذ. هذا البارامترِ يُمكنُ أَنْ يَكُونَ واحد أَو أكثر مِنْ القِيَمِ التاليةِ.

LWA_COLORKEY

إستعمال crKey كلون الشفافيةَ.

LWA_ALPHA

إستعمال bAlpha لتَقْرير عدمِ شفافية النافذةِ ذات الطبقاتِ.

UpdateLayeredWindow:

Private Declare Function UpdateLayeredWindow Lib "user32" (ByVal hWnd As Long, ByVal hdcDst As Long, pptDst As Any, psize As Any, ByVal hdcSrc As Long, pptSrc As Any, crKey As Long, ByVal pblend As Long, ByVal dwFlags As Long) As Long

hwnd

مناولة إلى النافذةِ ذات الطبقاتِ. أي صفّفَ النافذةَ المَخْلُوقةُ بتَحديد WS_EX_LAYERED متى َخْلقُ النافذةَ بدالة CreateWindowEx أَو بوضع WS_EX_LAYERED عن طريق SetWindowLong بعد خُلِق النافذةِ

.hdcDst

مناولة إلى سياق أداةِ (دي سي) للشاشةِ. هذه المناولة تحصل عندما تستدْعى الدالة وتكون قيمتها محددة ب Null. هو يستعمل لتطابق لونِ لوحة الألوانِ عندما تحدث محتويات النافذةَ . إذا كانت قيمة hdcDst مساوية ل NULL، سوف تكون لوحة الألوان الأصلية مستعملة.

إذا كانت hdcSrc قيمتها Null , يَجِبُ أَنْ يَكُونَ hdcDstقيمتها Null.

pptDst

مؤشر إلى تركيب النقطةِ الذي يُحدّدُ موقعَ الشاشةِ الجديدِ للنافذةِ ذات الطبقاتِ. إذا كان الموقعِ الحاليِ غير متغيّرُ , يُمكنُ أَنْ يَكُونَ قيمة pptDst مساوية ل Null..

psize

[في] مؤشر إلى a تركيب حجمِ الذي يُحدّدُ الحجمَ الجديدَ للنافذةِ ذات الطبقاتِ. إذا حجمِ النافذةِ لا يَتغيّرُ , psize يُمكنُ أَنْ يَكُونَ ملغيَ. إذا hdcSrc ملغيُ , psize يَجِبُ أَنْ يَكُونَ ملغيَ.

hdcSrc

المناولة إلى دي سي للسطحِ الذي يُعرّفُ النافذةَ ذات الطبقاتَ. هذه المناولة يُمْكِنُ أَنْ يُحْصَلَ عليه بدَعوة دالة CreateCompatibleDC. إذا لم يتغيير الشكلِ والسياقِ البصريِ مِنْ النافذةِ ,فيُمكنُ أَنْ يَكُونَ قيمة hdcSrcَ مساوية ل Null .

pptSrc

مؤشر إلى تركيب النقطةِ الذي يُحدّدُ موقعَ الطبقةِ في سياقِ الأداةَ. إذا كانت قيمة hdcSrc مساوية ل Null ,فيَجِبُ أَنْ تَكُونَ قيمة pptSrc مساوية ل Null.

crKey

تركيب Colorref الذي يُحدّدُ مفتاحَ لونِ الشفافيةَ لكي يُستَعملَ متى يَعدُّ النافذةَ ذات الطبقاتَ. كُلّ نقاط الشاشة تصَبغ بالنافذةِ بهذا اللونِ وسَيَكُونُ شفّاف. لتَوليد Colorref، يَستعملُ ماكرو RGB.

pblend

مؤشر إلى تركيب Blendfunction الذي يُحدّدُ قيمةَ الشفافيةَ لكي يُستَعملَ متى يَعدُّ النافذةَ ذات الطبقاتَ.

dwFlags

هذا المتغيير يُمكنُ أَنْ يَكُونَ أحد القِيَمِ التاليةِ.

ULW_ALPHA

إستعمال pblend كدالة للمزيجَ. إذا كان نمطِ العرضَ 256 لونُ أَو أقل، تأثير هذه القيمةِ تماماً مثل تأثير ULW_OPAQUE

ULW_COLORKEY

إستعمال crKey كلون الشفافيةَ.

ULW_OPAQUE

إسحبْ نافذةَ ذات طبقاتَ بليدةَ.

إذا كانت قيمة hdcSrc مساوية ل Null , فأَنْ قيمة dwFlags يَجِبُ أن تكون صفر

GetWindowLong : هي الدالة المستخدمة لأسترجاع المعلومات المتعلقة بالويندوز المحدد، وتكون القيم للمعلومات المسترجعة من قبل هذه الدالة 32-bit وأذا أردت أسترجاع القيم 64-bit فيجب أستخدام الدالة GetWindowLongPtr .

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long

hwnd : معالجْ أو المناولة إلى النافذةِ، وبشكل غير مباشر، صنف class للنافذة التي تَعُودُ.

nIndex : ُحدّدُ المرجع أي نقطة الصفر إلى القيمةِ الّتي سَتُستَرجعُ. القِيَم الممكنة تكون في المدى صفر الى عددِ بايتاتِ ذاكرةِ النافذةِ الإضافيةِ، ناقص أربعة؛ على سبيل المثال، إذا حدّدتَ 12 أَو بايتاتَ أكثرَ مِنْ الذاكرةِ الإضافيةِ , 8 سَتَكُونُ قيمة دليل 32-bit الثالثِ من العدد الصحيح. لإسْتِرْجاع أيّ قيمة أخرى، يُحدّدُ القِيَمِة التاليةِ.

GWL_EXSTYLE التي تمثل أسترجاع أساليب الويندوز الممتدة.

SetWindowLong : الحالة التي تُغيّرُ خاصيّةَ النافذةِ المحدّدةِ.

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

dwNewLong : يُحدّدُ قيمةَ البديلَ.

الكود بصورة كاملة – أطبع هذا الكود غي modTransparant

Option Explicit

'Transparancy API's

Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long

Private Declare Function UpdateLayeredWindow Lib "user32" (ByVal hWnd As Long, ByVal hdcDst As Long, pptDst As Any, psize As Any, ByVal hdcSrc As Long, pptSrc As Any, crKey As Long, ByVal pblend As Long, ByVal dwFlags As Long) As Long

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Const GWL_EXSTYLE = (-20)

Private Const LWA_COLORKEY = &H1

Private Const LWA_ALPHA = &H2

Private Const ULW_COLORKEY = &H1

Private Const ULW_ALPHA = &H2

Private Const ULW_OPAQUE = &H4

Private Const WS_EX_LAYERED = &H80000

Public Function isTransparent(ByVal hWnd As Long) As Boolean

On Error Resume Next

Dim Msg As Long

Msg = GetWindowLong(hWnd, GWL_EXSTYLE)

If (Msg And WS_EX_LAYERED) = WS_EX_LAYERED Then

isTransparent = True

Else

isTransparent = False

End If

If Err Then

isTransparent = False

End If

End Function

Public Function MakeTransparent(ByVal hWnd As Long, ByVal Perc As Integer) As Long

Dim Msg As Long

On Error Resume Next

Perc = ((100 - Perc) / 100) * 255

If Perc < 0 Or Perc > 255 Then

MakeTransparent = 1

Else

Msg = GetWindowLong(hWnd, GWL_EXSTYLE)

Msg = Msg Or WS_EX_LAYERED

SetWindowLong hWnd, GWL_EXSTYLE, Msg

SetLayeredWindowAttributes hWnd, 0, Perc, LWA_ALPHA

MakeTransparent = 0

End If

If Err Then

MakeTransparent = 2

End If

End Function

Public Function MakeOpaque(ByVal hWnd As Long) As Long

Dim Msg As Long

On Error Resume Next

Msg = GetWindowLong(hWnd, GWL_EXSTYLE)

Msg = Msg And Not WS_EX_LAYERED

SetWindowLong hWnd, GWL_EXSTYLE, Msg

SetLayeredWindowAttributes hWnd, 0, 0, LWA_ALPHA

MakeOpaque = 0

If Err Then

MakeOpaque = 2

End If

End Function

الكود في ال frmMain

Option Explicit

Private Sub scrTransparancy_Change()

modTransparant.MakeTransparent Me.hWnd, scrTransparancy.Value

lblStatus.Caption = CStr(scrTransparancy.Value) & "% transparancy"

End Sub

و يتبع

وأذا اعجبكم الموضع لهو بقيه

_______________________

سورس وكود برنامج التجسس علي لوحه المفاتيح

برنامج رسم تصميمي

لعبه لغز الارقام من تصميمي

لعبه سيجا من تصميمي

لعبه اكس و اووووووووو

برنامج لحساب عمرك برمجه كامله دون الاستعانه بدوال vb

لعبه الكره الناريه

#2

أكيد طبعا الموضوع جميل

بس ياريت تعمله فى مثال هيكون أوضح من كده

Never Give Up You Are Programmer

Being Genius Is The Step Before Madness

Artificial Intelligence Is No Match For Natural Stupidity

#3

الموضوع جميل..بس محتاج تنسيق وامثله.. ومعلش حنتعبك معانا..

تم تعديل هذه المشاركة بواسطة FemTo في 27 يوليو 2006 في 04:20

مدونة مهندس ميكانيكى

“Any fool can make things bigger, more complex, and more violent”

#4

يجب عليك ذكر المصدر لأنني أعرفه..

#5

السلام عليكم

أخى الكريم نحن فى إنتظار المثال

موضوع رائع..........

Never Give Up You Are Programmer

Being Genius Is The Step Before Madness

Artificial Intelligence Is No Match For Natural Stupidity

#7

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

من استفاده الجميع وانا اسف اذاكنت اخطاءت

___________________________

سورس وكود برنامج التجسس علي لوحه المفاتيح

برنامج رسم تصميمي

لعبه لغز الارقام من تصميمي

لعبه سيجا من تصميمي

لعبه اكس و اووووووووو

برنامج لحساب عمرك برمجه كامله دون الاستعانه بدوال vb

لعبه الكره الناريه

#8

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

لمن هاجم إرجع إلى أول مشاركة وشاهد هذا القول

hythamzero كتب:
أثناء تصفحي لاحد المنتديات وجدت شرح لدوال API

تم تعديل هذه المشاركة بواسطة ياسر جمال في 29 يوليو 2006 في 19:21

ادعو لي بالهداية فأنا أحتاج هذا الدعاء بشدة

منتدى تصميم التطبيقات (و يشمل نظم التشغيل) و تعريبها. <<<<<<

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

بعض ردودي ومشاراكاتي في المنتدى:

1- هل تريد التحكم بجهازك كأنك محترف, ( إذاً تعال معي وتعلم الرجستري Registry ).

...|-->> فكرة عامة عن الرجستري وكيفية التعامل معه ( رقم المشاركة 1 - 4 )

...|-->> كتابة ملف رجستري

...|-->> تشغيل الرجستري دون رسائل( في الخفاء )

...|-->> بعض التحكمات التي يقدمها الرجستري

...|-->>=>> إيقاف عمل Ctrl+Alt+delete ( Task Manager )

...|-->>=>> إخفاء قائمة ملف file وبذلك لن ترى قائمة file

...|........... في مشاركة أخرى >> حتى ولو قمت بالضغط على أي ملف أو مجلد بزر الفأرة الأيمن

...|-->>=>> لإيقاف وإخفاء عمل البحث Find من على الجهاز

...|-->> بعض المعلومات التي يقدمها الرجستري

...|-->>=>> معرفة الأجهزة المتصلة بالـIDE ورقم السريال الخاص لكل جهاز

...|-->> من أحسن مواقع الرجستري

...|-->>=>> http://technet2.microsoft.com/WindowsServe...3.mspx?mfr=true

منتدى مبرمجي لغة Microsoft Visual Basic <<<<<<

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

برامج من صنعي:

1- لعبة (من صنعي ), جربها وقول رأيك

2- ساعة حائط, من صنعي

بعض ردودي ومشاراكاتي في المنتدى:

1- طريقتان لفتح ملف معين وليكن بامتداد SWF ببرنامجك [ الطريقة الأولى - الطرقة الثانية ]

2- هل تريد ألا يتحكم أحد في الجهاز غيرك؟

3- كود ايقاف عمل زر الاغلاق x بزاوية الفورم

4- عرض صورة متحركة بالكود , أي بدون استخدام أدوات

5- اجعل الـComboBox [ تنسدل - لما تكتب فيا تنسدل وتظهر الاسماء التى تبدأ بالحرف اللي كتبته فى الكومبو ]

6- إنشاء مكون أثناء تشغيل البرنامج ثم إدخاله تحت نطاق مكون آخر مثلاً إدخاله داخل نطاق microsoft tabbed dialog control

أسئلتي في المنتدى التي تم الإجابة عليها:

1- كيف يمكن قراءة الإشارات الصوتية الخارجة من الميكروفون أو السماعات ( لرسمها أو العبث بها ) ؟ أرجو المزيد من الردود ...

2- إيقاف عمل الرجستري

أسئلتي في المنتدى التي لم يتم الإجابة عليها:

اقتباس
ردك يعطي حافذ للإجابة على أسئلتك
#9

شكرا للاخ ياسر جمال

#10

مشكور اخي هيثم

جزاك الله كل خير

و ياريت معلش لو تتعب و تعمل لنا مثال

تحياتي

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

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