GHOST2010

اقتراح لشرح دوال API

82 ردود في هذا الموضوع

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

تحياتى لكل اعضاء هذا الصرح العظيم وكل القائمين عليه

لقد كتبت هذا الموضوع نظراً لمعاناة الكثير مع دوال الـAPI وأنا على رأسهم ولقد طرح الاخ العزيز حازم الموضوع من قبل وكان الرد (Copy----Paste) لكن نحن نريد ان نفهم مانكتبه حتى لانصبح مثل (------) لانفقه شيئأً فى حياتنا وانا اقترح ان كل من يعرف شرح لاى دالة من دوال الـ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 مع هذه الدالة لمعرفة مقبض النافذة الموجودة تحت المؤشر.

وهناك المزيد من الشرح ان شاء الله وارجو ممن يعرف معلومات اى دالة ان يقوم بشرحها هنا :rolleyes:

تم تعديل بواسطه ghost2010
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

والى مزيد من الدوال

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 ثم مرر له القيم الجديدة وبعد ذلك مرر ذلك المتغير الى الدالة فيتم التغيير المطلوب :rolleyes:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

وهذه دالة اخرى

6-الدالة GetForegroundWindow

طريقة الكتابة:

Private Declare Function GetForegroundWindow Lib "User32"() As Long

هذه الدالة تعود بمقبض النافذة الظاهرة فى مقدمة الشاشة.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

ومع المزيد

7-الدالة SetWindowText

طريقة الكتابة:

Declare Function SetWindowText Lib "user32.dll" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long

تمكنك هذه الدالة من تغيير خاصية Caption للنافذة التى تحددها وتحتاج لمعاملين هما

1-hwnd وهو مقبض النافذة التى تريد تغيير عنوانها

2-lpString عنوان النافذة الجديد

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

8- الدالة SndPlaySound لتشغيل الملفات الصوتية من نوع wav

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

تم تعديل بواسطه عبد الله فتحي
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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 ..

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

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 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

تم تعديل بواسطه عبد الله فتحي
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكراً لتواجد الاستاذ عبدالله فتحى معنا فى هذا الموضوع وارجو منه ان يقوم بتثبيت الموضوع.

10-الدالة Beep

طريقة الاعلان:

Declare Function Beep Lib "kernel32.dll" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long

تقوم هذه الدالة باخراج صوت على السماعة الداخلية للجهاز وتحتاج لمعاملين هما:

1-dwFreq ويعبر عن تردد الصوت المطلوب بالهرتز

2-dwDuration ويعبر عن مدة استمرار الصوت بالمللى ثانية :rolleyes:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

الفق شكر لك أخي الكريم على طرح هذا الموضوع الجميل

وهذه مشاركه بسيطه فيها بعض الأمثله المعتمده على ال API

API.zip

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكرا لك اخى Semsem Basha وأعدك اننى سأبحث لك عن الحل

11-الدالة IsIconic

طريقة الاعلان:

Private Declare Function IsIconic Lib "user32.dll" (ByVal hwnd As Long) As Long

هذه الدالة تخبرك مااذا كانت النافذة مصغرة فى شريط المهام ام لا وتحتاج لمعامل واحد وهو مقبض النافذة التى تريد معرفة حالتها وتعود الدالة بالقيمة 0 اذا كانت النافذة مكبرة وتعود بالقيمة 1 اذا كانت النافذة مصغرة فى شريط المهام :rolleyes:

تم تعديل بواسطه ghost2010
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

12-الدالة IsWindowEnabled

طريقة الاعلان:

Private Declare Function IsWindowEnabled Lib "user32.dll" (ByVal hwnd As Long) As Long

تعود هذه الدالة بالقيمة 1 اذا كانت الدالة ممكنة Enabled وتعود بالقيمة 0 اذا كانت الدالة غير ممكنة Disabled ونحدد النافذة المطلوبة عن طريق تمرير قيمة مقبضها الى المعامل hwnd :rolleyes:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

تم تعديل بواسطه GHOST2010
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

وسيتم حذف ما عداها

وللإخوة الذين يطرحون أسئلة فهذا ليس المكان المناسب

والمنتدى مفتوح لذلك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

14-الدالة IsZoomed

طريقة الاعلان:

Private Declare Function IsZoomed Lib "user32.dll" (ByVal hwnd As Long) As Long

نمرر مقبض النافذة الى المعامل hwnd فتعود الدالة بالقيمة 1 اذا كانت النافذة مكبرة وتعود بالقيمة 0 اذا كانت الدالة فى حالتها العادية او الحالة المصغرة :rolleyes:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

15-الدالة IsChild

طريقة الاعلان:

Private Declare Function IsChild Lib "user32.dll" (ByVal hWndParent As Long, ByVal hWnd As Long) As Long

المعاملات:

1-hWndParent ويعبر عن مقبض النافذة الاب وغالبا ماتكون من النوع MDI

2-hWnd يعبر عن مقبض النافذة التى نريد ان نعرف مااذا كانت ابنا للنافذة الاولى ام لا

تعود الدالة بالقيمة 1 اذا كانت النافذة الثانية ابنا للنافذة الاولى وتعود بالقيمة 0 ان لم يكن كذلك :rolleyes:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

16-الدالة BringWindowToTop

طريقة الاعلان:

Declare Function BringWindowToTop Lib "user32.dll" (ByVal hwnd As Long) As Long

تقوم هذه الدالة باحضار النافذة التى نمرر مقبضها الى المعامل hwnd الى المقدمة اى انها تعمل عمل الامر ZOrder :rolleyes:

تم تعديل بواسطه GHOST2010
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

كمشاركة اولي لي اضع هذه الدالة

وهي لتحديد الوقت الفاصل بين النقرتين في الماوس

Private Declare Function SetDoubleClickTime Lib "user32" Alias "SetDoubleClickTime" (ByVal wCount As Long) As Long

الوسيط :

wCount وهو الوقت الزمني بالميلي ثانية

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

18-الدالة SetParent

تكتب الدالة بالطريقة الاتية:

Declare Function SetParent Lib "user32.dll" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

هذه الدالة تجعل احد الكائنات ابنا لكائن اخر وهذا الكائن ممكن ان يكون فورم او اداة بشرط ان يكون لها مقبض والمعامل الاول hWndChild هو مقبض الكائن الابن والمعامل الثانى hWndNewParentهو مقبض الكائن الاب :rolleyes:

تم تعديل بواسطه GHOST2010
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اسم الدالة : PaintDesktop

تقوم هذه الدالة بأخذ صورة من سطح المكتب وهذه الدالة لها وسيط واحد وهو المكان( هذا المكان لابد ان يكون له خاصية hdc ) الذي تريد وضع الصورة فيه مثلا picturebox او على الفورم نفسه picture1.hdc , me.hdc

الصورة العامة لهذه الدالة هي :

Declare Function PaintDesktop Lib "user32" (ByVal hdc As Long) As Long

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اسم الدالة :FindWindow

بواسطة هذه الدالة تستطيع الحصول على مقبض أي نافذه(الام) وهذه الدالة لها وسيطين

الاول: اسم الصنف للنافذه التي تريد اخذ مقبضها وهو عبارة عن نص . يمكنك استخدام برنامج spy الذي يأتي مع فيجوال بيسك للحصول على اسم الصنف

الثاني : وهو حل أخر اذا كنت لاتعرف اسم الصنف (الوسيط الاول) فقط ضع اسم النافذة وهو عبارة عن نص والمقصود هو الاسم الموجود في ال Titlebar بحيث تضع الاسم بالضبط للنافذة كما هو موجود وايضا تضع الوسيط الاول الى vbnullstring

الصورة العامة للدالة :

Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

وايضا

اسم الدالة :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 nCmdShow As Long) As Long

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شرح اكثر من رائع

الله يوفقكم جميعا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

وين التفاعل يأخوان وكأن الموضوع غير مهم لهذه الدرجة ماهو معقوله ياجماعة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

خذ عندك هذه الدالة

الوظيفة : هذه الدالة هى (أحد ) طرق الحماية للبرامج من الكراكرز وهى ترجع قيمة غير الصفر اذا كان البرنامج الخاص بك يعمل تحت برامج ال debugging التى يستخدمها الكراكرز لفك حماية برامجك و بالتالى تستطيع غلق البرنامج من خلال هذه الدالة ..... و ليس معنى ذلك انها غير قابلة للكسر و لكنها احد الطرق التى تدعم الحماية الخاصة ببرنامجك

الاسم :

IsDebuggerPresent

الاعلان :

Private Declare Function IsDebuggerPresent Lib "kernel32" () As Long

العائد :

0 : إذا كان البرنامج يعمل منفردا

1 : اذا كان البرنامج يعمل من خلال Debugger مثل olly debug و soft ice

وبالتالى ممكن تعمل عداد وقت واذا كان العائد لا يساوى صفر فأغلق البرنامج

if IsDebuggerPresent <> 0 then end

ولقد جربت هذه الطريقة مع برنامج OLLY Debug و نجحت تماما

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اسم الدالة : 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 dwReserved As Long) As Long

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .