PDA

View Full Version : تغییر در کلید فشرده شده از کیبورد



hossein-khoshseyar
چهارشنبه 07 مهر 1389, 09:02 صبح
دوستان من نیاز به یه کدی دارم که بتونم با اون توی....

بهتره این طوری بگم

فرض کنید می خوام یه برنامه داشته باشم که وقتی برنامم ران هست کاربر مثلا برنامه ورد رو باز کرده و مشغول تایپ هست مثلا اگر کاربر حرف a رو تایپ کرد رو صفحه حرف b رو ببینه . این شدنی هست ؟
کاربر وقتی داره حرف a رو تایپ می کنه اون موقع برنامه من پنجره فعال نیست و ویندوز اصلا دکمه فشرده شده رو به من پاس نمیده

تازه حالا اگه با یک ترفندی بتونیم کلید فشرده شده رو بفهمیم آیا میشه ارسال اون رو به برنامه ورد کنسل کرد و جاش یک کد دیگه ارسال کرد ؟

hossein-khoshseyar
چهارشنبه 07 مهر 1389, 09:06 صبح
بزارید اصل کارم رو بگم شاید این طوری راحت تر بتونید کمک کنید

یک نرم افزاری هست که به یک سخت افزار خارجی وصل میشه
وقتی نرم افزار ران هست نگه داشتن کلید z دستگاه رو به جلو و نگه داشتن کلید x دستگاه رو به عقب میبره

حالا میخوام با یک جویستیک بیسیم بتونم از فاصله دور دستگاه رو کنترل کنم

برنامه من وقتی فعال هست میتونه کلید های فشرده شده جویستیک رو بفهمه . اما وقتی غیر فعال باشه طبعی هست که چیزی دریافت نمیکنه

تازه حتی اگر موقعی که غیر فعال باشه بتونم بگیرم هم نمی تونم به اون نرم افزار اصلی کد x یا z رو بفرستم

hossein-khoshseyar
چهارشنبه 07 مهر 1389, 10:30 صبح
دوستان مدیران صاحب نظران لطفا کمک کنید
حداقلش اگه نمیشه بگید که نمیشه که ما الکلی الافش نشیم و بریم سراغ یک راه حل دیگه

b.mahsa
چهارشنبه 07 مهر 1389, 12:09 عصر
درست متوجه منظورتون نشدم. ولي با توجه به چيزي كه از پست اول برداشت كردم. براي اينكه با زدن يك دكمه به جاي char a , char b فرستاده بشه
تو رويداد key_press مربوطه كد زير رو بنويسيد.




If e.KeyChar = "b" Then
e.KeyChar = "a"
End If

hossein-khoshseyar
چهارشنبه 07 مهر 1389, 12:55 عصر
درست متوجه منظورتون نشدم. ولي با توجه به چيزي كه از پست اول برداشت كردم. براي اينكه با زدن يك دكمه به جاي char a , char b فرستاده بشه
تو رويداد key_press مربوطه كد زير رو بنويسيد.




If e.KeyChar = "b" Then
e.KeyChar = "a"
End If





ممنون از جوابت ولی این به درد کار من نمی خوره
با این کد که شما می گی من نمی تونم توی یک برنامه دیگه تغییری ایجاد کنم

بزار ساده بگم
من یه کد می خوام که وقتی اجرا شد وقتی کاربر برنامم رو مینیمایز هم کرد و توی ورود خواست بنویسه a برنامم دخاللت کنه و a رو تبدیل به b کنه

این کدی که شما گفتی اگر برنامم فعال باشه و تازه توی همون تکست باکسی که دارم تایپ می کنم جای این دوتا کاراکتر رو عوض میکنه
اما من هدفم نوشتن متن توی برنامه خودم نیست بلکه میخوام توی ورود یا برنامه های دیگه تغییر ایجاد کنم

تونستم منظورم رو برسونم ؟

hero4000
پنج شنبه 08 مهر 1389, 08:05 صبح
دوست عزيز اول خط زير رو توي قسمت تعاريف متغيرهاي عمومي تعريف کن

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
بعدش تابع زير رو تعريف کن


Function GetPressedKey() As Integer
For Cnt = 20 To 255
If GetAsyncKeyState(Cnt) <> 0 Then
GetPressedKey = Cnt
Exit For
End If
Next Cnt
End Function

حالا يک تايمر توي برنامت بزار و با گذاشتن دستور زير توي تيک تايمر کليد فشرده شده رو چک کن ببين هموني که ميخواي هست يا نه


If GetPressedKey()= ??? Then ???

hossein-khoshseyar
پنج شنبه 08 مهر 1389, 08:27 صبح
دوست عزيز اول خط زير رو توي قسمت تعاريف متغيرهاي عمومي تعريف کن

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integerبعدش تابع زير رو تعريف کن


Function GetPressedKey() As Integer
For Cnt = 20 To 255
If GetAsyncKeyState(Cnt) <> 0 Then
GetPressedKey = Cnt
Exit For
End If
Next Cnt
End Function
حالا يک تايمر توي برنامت بزار و با گذاشتن دستور زير توي تيک تايمر کليد فشرده شده رو چک کن ببين هموني که ميخواي هست يا نه


If GetPressedKey()= ??? Then ???



دوست عزیز ممنون از راهنماییت
تا اینجا که شما گفتید کار میکنه
یعنی درواقع یک keyloger درست کردیم
حالا می مونه قسمت دوم کار
می خوام وقتی یک کلید مثلا a فشار دادده شد .
ارسال اون رو به برنامه فعال متوقف کنم و جای اون من یک کلید دیگه رو به برنامه فعال بفرستم

همون مثال قبل
مثلا اگه برنامه ورد باز بود و برنامه من مینیمایز بود
کاربر که کلید a رو زد و من فهمیدم که a فشار داده شده می خوام ارسال a رو به ورد متوقف و b رو به ورد بفرستم
اگه میشه در این زمینه هم راهنمایی کنید

hossein-khoshseyar
جمعه 09 مهر 1389, 15:08 عصر
کسی نبود ؟ چند وقتی هروقت که سئوالی برام پیش میاد دیگه کسی تو برنامه نویس نیست جواب ما رو بده