[size=xx-large]تشخیص فشرده شدن کلیدهاي کیبرد
چگونه می توان کلیدهاي کیبرد را
حتی وقتی فوکوس روي برنامه ما نیست تشخیص داد مانند دیکشنري
ها که Keylogger فعال می شوند و یا CTRL+F ها که مثلاً با 12
کلیدهاي فشرده شده را ثبت می کنند .
من دو روش زیر را براي اینکار پیشنهاد می کنم :
GetAsyncKeyState 1 - استفاده از یک تابع کتابخانه اي به اسم
این تابع ، فشرده شدن یا رها شدن یک . user32.dll موجود در کتابخانه
کردن این تابع بصورت زیر declare کلید را تشخیص می دهد . نحوه
است :
Private Declare Function GetAsyncKeyState Lib "user32"
(ByVal vKey As Long) As Integer
آن کد زیر را قرار event قرار داده و در timer حال در برنامه تان یک
دهید :
For i = 1 To 255
results = 0
results = GetAsyncKeyState(i)
If results <> 0 Then
Msgbox(Chr(i))
End If
Next
قلاب ، یک ابزار در مکانیزم مدیریت پیغام : Hook 2 - استفاده از قلاب یا
سیستم ویندوز است که توسط آن برنامه ها می توانند یک روتین را
براي مدیریت و پردازش پیغامهاي خاصی قبل از اینکه آن پیغامها به
برنامه مقصد برسند نصب نمایند . قلابها باعث کندي سیستم می شوند
زیرا حجم پردازشی سیستم روي هر پیغام را افزایش می دهند بنابراین
بایستی زمانیکه واقعا به قلاب نیاز دارید آنرا نصب نموده و هر چه
زودتر آنرا حذف نمایید . سیستم ویندوز از انواع زیادي از قلابها
پشتیبانی می کند که هر کدام امکان دستیابی به پیغامهاي خاصی را مهیا
می نمایند براي مثال یک برنامه کاربردي می تواند با استفاده از قلاب
کیبرد براي مدیریت و پردازش پیغامهاي مربوط به آن ( مثل فشرده
شدن یک کلید خاص یا رها شدن آن ) استفاده کند .
براي نصب یک قلاب در برنامه از یک تابع کتابخانه اي به اسم
استفاده می شود . این تابع یک قلاب را به SetWindowsHookEx
کردن این تابع declare زنجیره قلابهاي سیستم اضافه می کند . نحوه
بصورت زیر است :
Declare Function SetWindowsHookEx Lib "user32" Alias
"SetWindowsHookExA" (ByVal idHook As Long, ByVal
lpfn As Long, ByVal hmod As Long, ByVal dwThreadId
As Long) As Long
همچنین براي آزاد کردن یک قلاب و حذف آن از زنجیره قلابها از تابع
استفاده می گردد . نحوه UnhookWindowsHookEx کتابخانه اي
کردن این تابع بصورت زیر است : declare
Declare Function UnhookWindowsHookEx Lib "user32"
(ByVal hHook As Long) As Long
براي ایجاد قلاب کیبرد همچنین نیاز به تعریف یک ثابت است که شماره
قلاب کیبرد در آن قرار دارد :
Public Const WH_KEYBOARD = 2
نوشت که به Callback Function حال بایستی یک تابع پس زمینه یا
ازاي فشرده شدن کیبرد اجرا شود و آدرس آنرا ( با استفاده از کلمه
بهمراه ثابت فوق به تابع ( Address Of کلیدي
فرستاد . SetWindowsHookEx[/size]