這幾天要開發一個程式,用USB二維碼掃描器讀取中文二文碼。基本思路是用虛擬鍵盤的方式處理,但處理后發現,中文內容全部丟失。誰處理過此類問題。
代碼如下
private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)
{
barCode.IsValid = false;
bool notChar = false;
if (nCode == 0)
{
EventMsg msg = (EventMsg)Marshal.PtrToStructure(lParam, typeof(EventMsg));
if (wParam == 0x100) //WM_KEYDOWN = 0x100
{
barCode.VirtKey = msg.message & 0xff; //虛擬碼
barCode.ScanCode = msg.paramL & 0xff; //掃描碼
StringBuilder strKeyName = new StringBuilder(255);
if (GetKeyNameText(barCode.ScanCode * 65536, strKeyName, 255) > 0)
{
barCode.KeyName = strKeyName.ToString().Trim(new char[] { ' ', '\0' });
}
else
{
barCode.KeyName = "";
}
byte[] kbArray = new byte[256];
uint uKey = 0;
GetKeyboardState(kbArray);// 取得的按鍵狀態中文全部丟失!!!
if (ToAscii(barCode.VirtKey, barCode.ScanCode, kbArray, ref uKey, 0))
{
barCode.AscII = uKey;
//Console.WriteLine(uKey);
barCode.Chr = Convert.ToChar(uKey);
}
else
{
notChar = true; //轉到ascii字符失敗,這不是一個正常字符,要去掉
}
if (DateTime.Now.Subtract(barCode.Time).TotalMilliseconds > 30) //30ms可以過濾掉連續按住一個鍵時的情況
{
if (notChar == false)
strBarCode = barCode.Chr.ToString();
else
strBarCode = "";
barCode.IsValid = false;
}
else
{
if (strBarCode.Length >= 5)
{
barCode.IsValid = true; //isValid為true表明這是個條碼
}
if (notChar == false)
{
strBarCode += barCode.Chr.ToString();
}
barCode.BarCode = strBarCode;
}
barCode.Time = DateTime.Now;
if (BarCodeEvent != null && barCode.IsValid) BarCodeEvent(barCode); //觸發事件
}
}
return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
}
uj5u.com熱心網友回復:
按照設備的廠家的例子編程設計,正常地(不需要編程地)去處理應用程式中的按鍵事件,不要低級的地方浪費時間。根本不需要做任何東西。uj5u.com熱心網友回復:
如果我讓人編程,我就知道,這個人坑我的經費了。我讓他寫一個簡單程式,他來給我 hook 底層,干什么?僅僅因為他想實作一個叫做 BarCodeEvent 的方法就 hook 底層?那還是別用這樣的開發者。uj5u.com熱心網友回復:
樓主解決這個問題了嗎?uj5u.com熱心網友回復:
掃碼器內部有介面,從打開閃光燈到自動拍照都有,如果你要獲取識別后的資料請打開它自有的掃碼驅動程式(exe部分),監視剪貼板即可。
uj5u.com熱心網友回復:
https://blog.csdn.net/superwfei/article/details/101005215uj5u.com熱心網友回復:
你那個設備沒有 介面或是 SDK嗎。如果你能用 USB 讀取到二進制資料可以用 c# 版本的 二維碼決議庫 決議即可。轉載請註明出處,本文鏈接:https://www.uj5u.com/net/117630.html
標籤:C#
上一篇:C# DShowNET 視頻錄制時加入日期時間戳 和攝像頭圖片截取功能
下一篇:下拉框隱藏
