PDA

View Full Version : سوال: تشخیص بین کیبورد و اسکنر بارکد



hooooman
جمعه 22 بهمن 1389, 14:23 عصر
سلام
سوال قبلیمو که هیشکی جواب نداد
حالا چجوری میشه تشخیص داد رشته وارد شده توی 1 textbox از کیبورد وارد شده یا از اسکنر بارکد

hooooman
شنبه 23 بهمن 1389, 08:21 صبح
نبود!؟!
آقا اگه ميدونين بگين تو رو خدا

virtual_matador
شنبه 23 بهمن 1389, 09:15 صبح
سلام.
تا اونجایی که من میدونم، کارکرد بارکد خوان دقیقا شبیه صفحه کلیده. بنابراین نمیشه تشخیص داد رشته ای که وارد شده از طریق صفحه کلید بوده یا بارکد خوان. مگر اینکه از طریق بافر صفحه کلید بتونی تشخیص بدی.

hooooman
شنبه 23 بهمن 1389, 23:26 عصر
خب چجوریش مهمه

Alghoochi
شنبه 23 بهمن 1389, 23:40 عصر
بهتر نیست هدف و قصدت رو از این کار بگی. شاید راه حل دیگه‌ای هم داشت.

hooooman
یک شنبه 24 بهمن 1389, 22:22 عصر
من از اسکنر بارکد تو برنامم استفاده میکنم
روی فرمم چندتا textbox دارم که فقط میخام توی 1 textbox مشخص بارکد قرار بگیره
واسه همین میخام ورودی اسکنر رو تشخیص بدم که اونو توی textbox مورد نظرم بریزم

gilsoft
یک شنبه 21 آبان 1391, 04:22 صبح
من از اسکنر بارکد تو برنامم استفاده میکنم
روی فرمم چندتا textbox دارم که فقط میخام توی 1 textbox مشخص بارکد قرار بگیره
واسه همین میخام ورودی اسکنر رو تشخیص بدم که اونو توی textbox مورد نظرم بریزم

سلام دوستان


من هم دنبال یه همچین چیزی هستم ...
از دوستان کسی هست که راهنمایی کنه ؟

برام خیلی مهمه !

zarifcomputer
یک شنبه 21 آبان 1391, 06:39 صبح
تنها تفاوتی که میشه بین ورودی کیبرد و اسکنر قائل بود سرعت ورود اطلاعات است
اسکنر تمامی داده ها را در کسری از ثانیه می خواند و همه را با هم در قالب یک رشته و در انتهای آن یک کاراکتر Enter به نرم افزار ارسال میکند در صورتیکه کاربر هر چقدر هم سرعت تایپ بالایی داشته باشد نمیتواند از اسکنر سریعتر ورود اطلاعات انجام دهد.

شاید شما بتوانید از همین تفاوت استفاده کنید
یک تایمر در فرم قرار دهید و از زمان اولین فشرده شدن کیبرد زمان بگیرید و مثلا اگر اختلاف زمان ورود اولین کلید و دومین کلید حدودا 100 میلی ثانیه شد یعنی کاربر تایپ کرده و در غیر اینصورت اسکنر خوانده است

امیدوارم این روش جواب بده

حسین شهریاری
یک شنبه 21 آبان 1391, 07:14 صبح
من از اسکنر بارکد تو برنامم استفاده میکنم
روی فرمم چندتا textbox دارم که فقط میخام توی 1 textbox مشخص بارکد قرار بگیره
واسه همین میخام ورودی اسکنر رو تشخیص بدم که اونو توی textbox مورد نظرم بریزم
کد خوانده شده توسط بارکدخوان، در مکانی که مکان نما(کرسر) قرر داره ریخته میشه.
شما میتونی با کنترل مکان قرار گرفتن کرسر مشکلتونا حل کنید.

arman_Delta2002
یک شنبه 21 آبان 1391, 08:25 صبح
سلام دوستان


من هم دنبال یه همچین چیزی هستم ...
از دوستان کسی هست که راهنمایی کنه ؟

برام خیلی مهمه !

من هم همین طور

gilsoft
سه شنبه 23 آبان 1391, 19:21 عصر
یک تایمر در فرم قرار دهید و از زمان اولین فشرده شدن کیبرد زمان بگیرید و مثلا اگر اختلاف زمان ورود اولین کلید و دومین کلید حدودا 100 میلی ثانیه شد یعنی کاربر تایپ کرده و در غیر اینصورت اسکنر خوانده است

با چه کدی اولین فشرده شدن کلید (رو کیبرد) رو چک کنیم ؟ :متفکر:
آیا باید از توابع API استفاده کنیم ؟

arman_Delta2002
سه شنبه 23 آبان 1391, 19:22 عصر
رویداد key peres form

gilsoft
سه شنبه 23 آبان 1391, 20:39 عصر
رویداد key peres form

سلام دوست عزیز ..... بابت جوابتون ممنونم

اونجایی که میخوام اولین فشرده شدن کلید (رو کیبرد) رو چک کنم .. فوکوس نداره و در واقع تو یه ماجول ( و یا احتمالا Timer1_Tick ) باید چک بشه
با توابع API و تابع GetAsyncKeyState میتونم چک کنم اما یه مشکلی داره .. ابتدا کد زیر رو ملاحظه بفرمایید :


Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim iKey As Integer
For iKey = 0 To 255
If GetAsyncKeyState(iKey) Then ListBox1.Items.Add(iKey)
Next
End Sub

کد فوق از یک حلقه ی 256 تایی برای چک کردن کلید فشرده شده استفاده میکنه ! :ناراحت:
اما برای من فرقی نمیکنه که چه کلیدی زده شده ... میخوام یه شرط بذارم که با فشردن هر کلیدی تایمر Stop بشه و یا از ماجول بپره بیرون .. :متفکر:

برای من کدوم کلید فشرده شده مهم نیست ! هرکلیدی که فشرده بشه حسابه ... :لبخندساده:

نمیدونم تونستم منظورمو برسونم یانه ؟ :متفکر:

zarifcomputer
سه شنبه 23 آبان 1391, 21:42 عصر
سلام دوست عزیز ..... بابت جوابتون ممنونم

اونجایی که میخوام اولین فشرده شدن کلید (رو کیبرد) رو چک کنم .. فوکوس نداره و در واقع تو یه ماجول ( و یا احتمالا Timer1_Tick ) باید چک بشه
با توابع API و تابع GetAsyncKeyState میتونم چک کنم اما یه مشکلی داره .. ابتدا کد زیر رو ملاحظه بفرمایید :


Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim iKey As Integer
For iKey = 0 To 255
If GetAsyncKeyState(iKey) Then ListBox1.Items.Add(iKey)
Next
End Sub

کد فوق از یک حلقه ی 256 تایی برای چک کردن کلید فشرده شده استفاده میکنه ! :ناراحت:
اما برای من فرقی نمیکنه که چه کلیدی زده شده ... میخوام یه شرط بذارم که با فشردن هر کلیدی تایمر Stop بشه و یا از ماجول بپره بیرون .. :متفکر:

برای من کدوم کلید فشرده شده مهم نیست ! هرکلیدی که فشرده بشه حسابه ... :لبخندساده:

نمیدونم تونستم منظورمو برسونم یانه ؟ :متفکر:

سلام
اول اینکه فکر میکنم نیازی به یک حلقه از 0 تا 255 ندارید.

در ابتدا هر دو تایمر فعال هستند
دوتا متغیر عمومی تعریف کنید
زمان هر دو تایمر را برابر با 100 قرار بدهید
مقدار پیش فرض هر دو متغیر را در ابتدا برابر 0 قرار بدید
در تایمر اول متغیر اول را مقدار دهی کنید و هر بار که تایمر اجرا میشه یک واحد به مقدار متغیر اول اضافه کنید
در تایمر دوم هم متغیر دوم را مقدار دهی کنید و هر بار که تایمر اجرا میشه یک واحد به مقدار متغیر دوم اضافه کنید

وقتی یک کلید فشرده شد ابتدا چک کنید که هر دو تایمر فعال باشند
در صورتیکه هر دو فعال بودند ، تایمر اول را غیر فعال کنید . در این حالت متغیر اول دیگر مقدار دهی نمیشود و فقط متغیر دوم مقدار دهی خواهد شد
با فشردن کلید دوم چک کنید در صورتیکه تایمر اول غیر فعال است و تایمر دوم فعال است

1- تایمر دوم را غیر فعال کنید
2- مقدار متغیر اول را از مقدار متغیر دوم کم کنید
3- اگر مقدار بدست آمده در مرحله شماره 2 بزرگتر از صفر بود یعنی کاربر با تاخیر تایپ کرده و اگر برابر با صفر بود یعنی بار کد خوانده شده است
4- هر دو تایمر را فعال کنید و مقادیر متغیر ها را به صفر برگردانید

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

gilsoft
سه شنبه 23 آبان 1391, 22:07 عصر
وقتی یک کلید فشرده شد ابتدا چک کنید که هر دو تایمر فعال باشند

دوست عزیز .. ممنون از جوابتون ... :لبخندساده:

این کلید فشرده شده رو چه جوری چک کنم ؟ :متفکر:

تایمر از کجا باید بفهمه که کلیدی فشرده شده !؟ :متفکر:

zarifcomputer
چهارشنبه 24 آبان 1391, 05:02 صبح
دوست عزیز .. ممنون از جوابتون ... :لبخندساده:

این کلید فشرده شده رو چه جوری چک کنم ؟ :متفکر:

تایمر از کجا باید بفهمه که کلیدی فشرده شده !؟ :متفکر:

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

برای اینکه سریع تر به جواب برسید اینها را هم ببینید
[/URL]
[URL="http://www.programmersheaven.com/mb/VBasic/263630/263630/vb6-detect-keypress/"]VB6 Detect Keypress - Visual Basic (http://stackoverflow.com/questions/1100285/how-to-detect-the-currently-pressed-key)


یا


Find Out If Any Key Is Pressed - VB.NET | Dream.In.Code (http://www.dreamincode.net/forums/topic/156009-find-out-if-any-key-is-pressed/)

یا
Capture Key Press - Visual Basic .NET (http://bytes.com/topic/visual-basic-net/answers/362828-capture-key-press)

یا
How do I get the Keypress/Keydown fucntion for Visual Basic 2010 ... (http://uk.answers.yahoo.com/question/index?qid=20110504125707AAz6NYb)

یا
How to check if a key is pressed - DelphiDabbler.com (http://www.delphidabbler.com/tips/45)

یا
c# - How to detect the currently pressed key? (http://stackoverflow.com/questions/1100285/how-to-detect-the-currently-pressed-key)

gilsoft
چهارشنبه 24 آبان 1391, 14:10 عصر
در هر فرم یک رویداد وجود داره تحت عنوان KeyPress که کارش مدیریت کردن کلید های فشرده شده توسط کاربر است
هر بار که هر کلیدی فشرده بشه این رویداد اجرا میشه . اینجا همون جاییست که شما میتونید تایمر ها تونو فعال یا غیر فعال کنید

دوست عزیز ممنون از توجه تون

همانطور که در پست 13# عرض کردم .. فوکوس در اختیار من نیست و در واقع من توی یه ماجول در یک Class Library به کد مورد نظرم احتیاج دارم ...

بهرحال مجبور شدم با همان کدی که در پست 13# اشاره کردم .. مشکلم رو حل کنم

در واقع نمیخواستم با حلقه ی For زدن یک کلید ( .... Press any Key to Continue ) رو چک کنم ... (یه چیزی مثل Console.ReadKey میخواستم ...)

من همش فکر میکردم که دستور یا تابعی برای گرفتن یک کلید (حالا هر کلیدی میتونه باشه) تو VB.NET وجود داره ....