PDA

View Full Version : دریافت کد اسکی



sr2m72
سه شنبه 22 آذر 1390, 18:39 عصر
سلام دوستان.
می خوام یه برنامه بنویسم که کد اسکی هر کلیدی که زده شد رو نشون بده.
باید چکار کنم؟
میشه راهنمایی کنید.

ho3ein.3ven
سه شنبه 22 آذر 1390, 19:44 عصر
بفرمایید
Private Sub Form_KeyPress(KeyAscii As Integer)
Print KeyAscii
End Sub

Restlesa
سه شنبه 22 آذر 1390, 20:14 عصر
کمی پیش رفته تر از کد قرار داده شده توسط دوستمون

sr2m72
سه شنبه 22 آذر 1390, 22:34 عصر
ممنون دوستان.
حالا چطور میشه موقعی که فوکوس روی فرم نیست بازم کد اسکی کلید رو نمایش بده؟
لطفا راهنمایی کنید.

ho3ein.3ven
سه شنبه 22 آذر 1390, 23:04 عصر
خب تو رویداد keypress همون شی ای که فوکوس روشه کد نویسی می کنیم.

sr2m72
چهارشنبه 23 آذر 1390, 00:20 صبح
خب تو رویداد keypress همون شی ای که فوکوس روشه کد نویسی می کنیم.

منظور من اینه که فوکوس خازج از برنامه ما باشه. مثلا روی دسکتاپ یا روی یه برنامه غیر از برنامه ما.

mr-adler
چهارشنبه 23 آذر 1390, 00:27 صبح
api:GetAsyncKeyState

سلام از تابع بالا استفاده کنید.....

just4froum
چهارشنبه 23 آذر 1390, 00:36 صبح
اینم از کدش :


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

Private Sub Form_Load()
Timer1.Interval = 1
End Sub

Private Sub Timer1_Timer()
Dim x As Integer
For x = 1 To 256
If GetAsyncKeyState(x) = -32767 Then
Print x
End If
Next x
End Sub

mr-adler
چهارشنبه 23 آذر 1390, 00:58 صبح
سلام

اینم از کدش :
من یه سوال داشتم جواب میدید؟؟؟:خجالت:(در مورد همین کد هستش)

just4froum
چهارشنبه 23 آذر 1390, 07:40 صبح
من یه سوال داشتم جواب میدید؟؟؟:خجالت:(در مورد همین کد هستش)

بفرمایید جناب mr-adler . ما اینجا عضو شدیم تا به همدیگر آموزش بدیم (البته اگر از دستم بر بیاد)

mr-adler
چهارشنبه 23 آذر 1390, 14:51 عصر
ممنونم....:لبخندساده:
ببینید این کدی که نوشتید بر این اساس کار میکنه که تو تابع getasync... اعداد 1 تا 256 رو پیمایش میکنه به این ترتیب متوجه میشه که ما کدوم کلیدرو زدیم.اما یه مشکلی وجود داره فرض کلید من در لحظه t یه کلید رو فشار دادم.و کد شما رو تو برنامم از قبل نوشتم.همون طور که میدونیم سرعت پردازش کد ها بسیار بسیار بالاست.حالا در این بین ممکنه کاربر کلیدی رو چند لحظه بیشتر یا کمتر نگه داره به این ترتیب یا برنامه کلید رو ثبت نمیکنه یا چند بار ثبت میکنه.بزارید منظورمو یک مقدار روشن تر بیان کنم:
در لحظه t ما یک کلید رو فشار میدیم.برنامه ممکنه در حین فشار کلید چند بار این حلقه را پیمایش کرده باشه و در نتیجه به جای یک حرف چند حرف چاپ کنه.
اگه باز هم متوجه منظورم نشدید بگید باز هم توضیح بدم.
حالا شاید جواب شما این باشه که اینترول تایمر رو ببرش بالا. در این صورت ممکنه در لحظه فشار دادن کلید برنامه i مورد نظر(مربوط به کلید فشرده شده)را رد کرده باشه و دیگه هیچی چاپ نشه به عنوان کلید فشار داده شده.
من میخوام برنامه وقتی کلیدی زده شد چه یک ثانیه نگه داشته شد چه یک لحظه فقط یک بار کلید مورد نظرمون رو چاپ کنه....

چند روز بود داشتم روی سورس یه ثبت کننده کلید بسیار ساده کار میکردم اما این مشکل بزرگ رو دیدم دیگه بیخیالش شدم.اگه راهی به نظرتون میرسه از راهنمایی دریغ نکنید...

خیلی خیلی ممنونم.:قلب:

Mr'Jamshidy
چهارشنبه 23 آذر 1390, 14:57 عصر
اینم از کدش :


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

Private Sub Form_Load()
Timer1.Interval = 1
End Sub

Private Sub Timer1_Timer()
Dim x As Integer
For x = 1 To 256
If GetAsyncKeyState(x) = -32767 Then
Print x
End If
Next x
End Sub



در ادامه توضیح دوستمون باید بگم که برای استفاده از این روش حواستون باشه
آنتی ویروس هایی از قبیل Kasperskey به این کد گیر میدن

sr2m72
چهارشنبه 23 آذر 1390, 18:06 عصر
ممنونم....:لبخندساده:
ببینید این کدی که نوشتید بر این اساس کار میکنه که تو تابع getasync... اعداد 1 تا 256 رو پیمایش میکنه به این ترتیب متوجه میشه که ما کدوم کلیدرو زدیم.اما یه مشکلی وجود داره فرض کلید من در لحظه t یه کلید رو فشار دادم.و کد شما رو تو برنامم از قبل نوشتم.همون طور که میدونیم سرعت پردازش کد ها بسیار بسیار بالاست.حالا در این بین ممکنه کاربر کلیدی رو چند لحظه بیشتر یا کمتر نگه داره به این ترتیب یا برنامه کلید رو ثبت نمیکنه یا چند بار ثبت میکنه.بزارید منظورمو یک مقدار روشن تر بیان کنم:
در لحظه t ما یک کلید رو فشار میدیم.برنامه ممکنه در حین فشار کلید چند بار این حلقه را پیمایش کرده باشه و در نتیجه به جای یک حرف چند حرف چاپ کنه.
اگه باز هم متوجه منظورم نشدید بگید باز هم توضیح بدم.
حالا شاید جواب شما این باشه که اینترول تایمر رو ببرش بالا. در این صورت ممکنه در لحظه فشار دادن کلید برنامه i مورد نظر(مربوط به کلید فشرده شده)را رد کرده باشه و دیگه هیچی چاپ نشه به عنوان کلید فشار داده شده.
من میخوام برنامه وقتی کلیدی زده شد چه یک ثانیه نگه داشته شد چه یک لحظه فقط یک بار کلید مورد نظرمون رو چاپ کنه....

چند روز بود داشتم روی سورس یه ثبت کننده کلید بسیار ساده کار میکردم اما این مشکل بزرگ رو دیدم دیگه بیخیالش شدم.اگه راهی به نظرتون میرسه از راهنمایی دریغ نکنید...

خیلی خیلی ممنونم.:قلب:

توی این کدی که جناب just4froum گذاشتن به جای print x اون x رو توی لیبل نشون بدین.
بعد از این کار توی رویداد change اون لیبل اینو بنویسین: Print label1.caption

just4froum
چهارشنبه 23 آذر 1390, 21:18 عصر
ممنونم....:لبخندساده:
ببینید این کدی که نوشتید بر این اساس کار میکنه که تو تابع getasync... اعداد 1 تا 256 رو پیمایش میکنه به این ترتیب متوجه میشه که ما کدوم کلیدرو زدیم.اما یه مشکلی وجود داره فرض کلید من در لحظه t یه کلید رو فشار دادم.و کد شما رو تو برنامم از قبل نوشتم.همون طور که میدونیم سرعت پردازش کد ها بسیار بسیار بالاست.حالا در این بین ممکنه کاربر کلیدی رو چند لحظه بیشتر یا کمتر نگه داره به این ترتیب یا برنامه کلید رو ثبت نمیکنه یا چند بار ثبت میکنه.بزارید منظورمو یک مقدار روشن تر بیان کنم:
در لحظه t ما یک کلید رو فشار میدیم.برنامه ممکنه در حین فشار کلید چند بار این حلقه را پیمایش کرده باشه و در نتیجه به جای یک حرف چند حرف چاپ کنه.
اگه باز هم متوجه منظورم نشدید بگید باز هم توضیح بدم.
حالا شاید جواب شما این باشه که اینترول تایمر رو ببرش بالا. در این صورت ممکنه در لحظه فشار دادن کلید برنامه i مورد نظر(مربوط به کلید فشرده شده)را رد کرده باشه و دیگه هیچی چاپ نشه به عنوان کلید فشار داده شده.
من میخوام برنامه وقتی کلیدی زده شد چه یک ثانیه نگه داشته شد چه یک لحظه فقط یک بار کلید مورد نظرمون رو چاپ کنه....

چند روز بود داشتم روی سورس یه ثبت کننده کلید بسیار ساده کار میکردم اما این مشکل بزرگ رو دیدم دیگه بیخیالش شدم.اگه راهی به نظرتون میرسه از راهنمایی دریغ نکنید...

خیلی خیلی ممنونم.:قلب:


اتفاقا من هم این مشکل رو داشتم ولی اگر از کدی که گذاشتم استفاده کنید مشکل حل شده است دلیلشم برای این است که از عدد -32767 در کد استفاده شده

برای مثال شما دو تا تکست باکس روی فرمتون قرار بدین و به جای کد :
print x
کد :
text1.text = text1.text & chr(x)
را جایگزین کنید حالا خاصیت Enabled تکست 1 را برابر false قرار دهید.

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


امید وارم توانسته باشم منظورم رو برسونم.

mr-adler
پنج شنبه 24 آذر 1390, 00:28 صبح
سلام
ممنونم دوستان
فقط یه چند تا سوال دیگه هم داشتم:
GetAsyncKeyState(x) = -32767
این کد با این کد چه تفاوتی داره که در کد بالا عمل میکنه و در کد زیر اون خطایی رو که من گفتم داره؟
GetAsyncKeyState(x) <>0

مشکل بزرگی رو از من برطرف کردید.سرم یکم خلوت شد حتما پروژه رو ادامه خواهم داد....

تشکر...

just4froum
پنج شنبه 24 آذر 1390, 13:40 عصر
سلام
ممنونم دوستان
فقط یه چند تا سوال دیگه هم داشتم:
GetAsyncKeyState(x) = -32767
این کد با این کد چه تفاوتی داره که در کد بالا عمل میکنه و در کد زیر اون خطایی رو که من گفتم داره؟
GetAsyncKeyState(x) <>0

مشکل بزرگی رو از من برطرف کردید.سرم یکم خلوت شد حتما پروژه رو ادامه خواهم داد....

تشکر...

-32767 نماد keypress است ولی وقتی شما از کد خودتون استفاده می کنید اول عدد -32768 بر گشت داده میشود که نماد keydown است.

حالا در همون کد بالا به جای -32767 از -32768 استفاده کنید منظورمو متوجه می شوید.

موفق باشید

just4froum
پنج شنبه 24 آذر 1390, 13:53 عصر
راستی من قبلا یک پست دادم که توش هر حرفی رو که میزدی نشون میداد با قابلیت تشخیص شیفت اگه خواستی نمیخواد بنویسی برو به لینک زیر.

آدرس پست (http://barnamenevis.org/showthread.php?314586-%D8%AB%D8%A8%D8%AA-%D9%83%D9%84%D9%8A%D8%AF-%D9%87%D8%A7%D9%8A-%D9%81%D8%B4%D8%B1%D8%AF%D9%87-%D8%B4%D8%AF%D9%87-%D8%AA%D9%88%D8%B3%D8%B7-%D9%83%D9%8A%D8%A8%D9%88%D8%B1%D8%AF&p=1381375&viewfull=1#post1381375)

mr-adler
پنج شنبه 24 آذر 1390, 19:24 عصر
سلام
حالا متوجه میشم این اعداد واسه چی بودن.

حالا در همون کد بالا به جای -32767 از -32768 استفاده کنید منظورمو متوجه می شوید.
دقیقا متوجه شدم .ممنونم

راستی من قبلا یک پست دادم که توش هر حرفی رو که میزدی نشون میداد با قابلیت تشخیص شیفت اگه خواستی نمیخواد بنویسی برو به لینک زیر.
حتما از مطالبتون استفاده خواهم کرد...
:قلب: