استخراج مشخصات سخت افزاری یک سیستم در وی بی

در این بخش یک کنترل Ocx معرفی می شود که بوسیله آن می توانید مشخصات سخت افزاری سیستم خود را استحراج کنید . 
این کنترل را که Hardware Info نام دارد می توانید از اینجا دانلود نمایید


پس از باز نمودن فایل zip دانلود شده مشاهده خواهید کرد که دو فایل dll و یک فایل ocx در آن وجود دارد . همچنین یگ فایل راهنما نیز بهمراه آنها وجود دارد که طریقه استفاده از کنترل را نشان می دهد . برای استفاده از کنترل فوق وارد محیط ویژال بیسیک شده و سپس وارد منوی Components شوید .  در آنجا روی دکمه Browse کلیک کنید . وارد پوشه ای که فایل zip را در آنجا باز کرده اید شده و فایل HWInfo.ocx را انتخاب کنید تا این کنترل به لیست کنترلهای نوار ابزار شما اضافه شود . حال می توانید از کنترل را روی فرم خود قرار دهید و از امکانات آن استفاده کنید .
این کنترل دارای خصوصیات زیر است :
BaseBoardManufacturer : مشخصات سازنده مادربورد
BaseBoardProduct : نوع چیپ ست مادربورد
BiosVendor : سازنده بایوس
BiosReleaseDate : تاریخ انتشار بایوس
BiosVersion : ورژن بایوس
BiosROMSize : سایز حافظه رام بایوس
SocketDesignation : نوع سوکت پردازنده
ProcessorType : نوع پردازنده
ProcessorManufactor : سازنده پردازنده
ProcessorID : شماره ID پردازنده
ProcessorSerialNumber : شماره سریال پردازنده
با استفاده از این کنترل همچنین می توان اطلاعات هر چهار هارد دیسک IDE سیستم را استخراج نمود برای مثال اگر بخواهید اطلاعات Primary Hard ( شماره یک ) را بدست آورید از خصوصیات زیر استفاده کنید :
HardDisk1ModelNumber : شماره مدل هارددیسک
HardDisk1SerialNumber : شماره سریال هارد دیسک ( شماره سریال کارخانه )

تشخیص فشرده شدن کليدهای کيبرد

يکي از دوستان سوال کرده بودند که چگونه مي توان کليدهاي کيبرد را حتي وقتي فوکوس روي برنامه ما نيست تشخيص داد مانند ديکشنري ها که مثلاً با CTRL+F12 فعال مي شوند و يا Keylogger ها که کليدهاي فشرده شده را ثبت مي کنند .
من دو روش زير را براي اينکار پيشنهاد مي کنم :

? - استفاده از يک تابع کتابخانه اي به اسم  GetAsyncKeyState موجود در کتابخانه user32.dll . اين تابع ، فشرده شدن يا رها شدن يک کليد را تشخيص مي دهد . نحوه declare کردن اين تابع بصورت زير است :

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

حال در برنامه تان يک timer قرار داده و در event آن کد زير را قرار دهيد :

    For i = 1 To 255
        results = 0
        results = GetAsyncKeyState(i)
        If results <> 0 Then
           Msgbox(Chr(i))
        End If
    Next

براي مشاهده يک برنامه نمونه به اين آدرس مراجعه کنيد .

? - استفاده از قلاب يا Hook : قلاب ، يک ابزار در مکانيزم مديريت پيغام سيستم ويندوز است که توسط آن برنامه ها مي توانند يک روتين را براي مديريت و پردازش پيغامهاي خاصي قبل از اينکه آن پيغامها به برنامه مقصد برسند نصب نمايند . قلابها باعث کندي سيستم مي شوند زيرا حجم پردازشي سيستم روي هر پيغام را افزايش مي دهند بنابراين بايستي زمانيکه واقعاً به قلاب نياز داريد آنرا نصب نموده و هر چه زودتر آنرا حذف نماييد . سيستم ويندوز از انواع زيادي از قلابها پشتيباني مي کند که هر کدام امکان دستيابي به پيغامهاي خاصي را مهيا مي نمايند براي مثال يک برنامه کاربردي مي تواند با استفاده از قلاب کيبرد براي مديريت و پردازش پيغامهاي مربوط به آن ( مثل فشرده شدن يک کليد خاص يا رها شدن آن ) استفاده کند .
براي نصب يک قلاب در برنامه از يک تابع کتابخانه اي به اسم 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 فرستاد .