|

楼主 |
发表于 2010-8-26 22:43:59
|
显示全部楼层
公怖一下答案
USB 條碼槍, 發出跟 K/B 一樣的 ASC II 訊號, 用其刷入條碼時信號跟 Keyboard 一樣都是從 KEY DOWN 進來
本來就只是個資料輸入方式, 當初客戶要求我程式一定要能判斷資料是人工從 Keyboard 鍵入的還是 USB 條碼槍刷進來的
(以便後續跑不同的處理流程)我也傻住了
後來想到一個方法, 方式很簡單,
宣告兩個 TDateTime 變量(Global)
var T1,T2: TDateTime;
在 KeyDown 事件中紀錄每次 KeyDown 的當時時間 T1, 當下一次 KeyDown 進來時
先讓 T2=T1 , 再把當時時間紀錄在 T1
所以
T1 : 本次 KeyDown 的時間
T2 : 上次 KeyDown 的時間
把這兩個時間相減, 就知道從 KeyDown 事件讀進來的條碼是人工手 Key 的, 還是 USB 條碼槍刷進來的
經過測試 , 通常
人工手 Key : 每個按鍵與按鍵間隔 > 170 ms
USB 條碼槍刷進來 : 每個按鍵與按鍵間隔 < 20 ms
折衷取 90 ms 來判斷
if (T1-T2)>90 then
................//人工手 Key
else
................//USB 條碼槍刷入
客戶經驗, 和大家分享, 技術的東西說穿了也沒什麼, 但總要有人樂意去分享出來 |
|