C#實現掃描槍掃描二維碼并打印(實例代碼)-創新互聯

1.使用usb口輸入的掃描槍,這里實現使用了winform

成都網站建設哪家好,找成都創新互聯!專注于網頁設計、網站建設、微信開發、微信小程序開發、集團成都企業網站定制等服務項目。核心團隊均擁有互聯網行業多年經驗,服務眾多知名企業客戶;涵蓋的客戶類型包括:被動防護網等眾多領域,積累了大量豐富的經驗,同時也獲得了客戶的一致贊譽!

首先創建一個CS文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
namespace am_sign
{
 class BardCodeHooK
 {
  public delegate void BardCodeDeletegate(BarCodes barCode);
  public event BardCodeDeletegate BarCodeEvent;
  public struct BarCodes
  {
   public int VirtKey;//虛擬嗎
   public int ScanCode;//掃描碼
   public string KeyName;//鍵名
   public uint Ascll;//Ascll
   public char Chr;//字符
   public string BarCode;//條碼信息
   public bool IsValid;//條碼是否有效
   public DateTime Time;//掃描時間
  }
  private struct EventMsg
  {
   public int message;
   public int paramL;
   public int paramH;
   public int Time;
   public int hwnd;
  }
  [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
  private static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
  [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
  private static extern bool UnhookWindowsHookEx(int idHook);
  [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
  private static extern int CallNextHookEx(int idHook, int nCode, Int32 wParam, IntPtr lParam);
  [DllImport("user32", EntryPoint = "GetKeyNameText")]
  private static extern int GetKeyNameText(int IParam, StringBuilder lpBuffer, int nSize);
  [DllImport("user32", EntryPoint = "GetKeyboardState")]
  private static extern int GetKeyboardState(byte[] pbKeyState);
  [DllImport("user32", EntryPoint = "ToAscii")]
  private static extern bool ToAscii(int VirtualKey, int ScanCode, byte[] lpKeySate, ref uint lpChar, int uFlags);
  delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam);
  BarCodes barCode = new BarCodes();
  int hKeyboardHook = 0;
  string strBarCode = "";
  private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)
  {
   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(225);
     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.Ascll = uKey;
      barCode.Chr = Convert.ToChar(uKey);
     }
     TimeSpan ts = DateTime.Now.Subtract(barCode.Time);
     if (ts.TotalMilliseconds > 50)
     {
      strBarCode = barCode.Chr.ToString();
     }
     else
     {
      if ((msg.message & 0xff) == 13 && strBarCode.Length > 3)
      {
       barCode.BarCode = strBarCode;
       barCode.IsValid = true;
      }
      strBarCode += barCode.Chr.ToString();
     }
     barCode.Time = DateTime.Now;
     if (BarCodeEvent != null) BarCodeEvent(barCode);//觸發事件
     barCode.IsValid = false;
    }
   }
   return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
  }
  //安裝鉤子
  public bool Start()
  {
   if (hKeyboardHook == 0)
   {
    //WH_KEYBOARD_LL=13
    hKeyboardHook = SetWindowsHookEx(13, new HookProc(KeyboardHookProc), Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0);
   }
   return (hKeyboardHook != 0);
  }
  //卸載鉤子
  public bool Stop()
  {
   if (hKeyboardHook != 0)
   {
    return UnhookWindowsHookEx(hKeyboardHook);
   }
   return true;
  }
 }
}

另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

網頁名稱:C#實現掃描槍掃描二維碼并打印(實例代碼)-創新互聯
文章URL:http://m.kartarina.com/article2/egjoc.html

成都網站建設公司_創新互聯,為您提供網站改版、App設計、用戶體驗微信小程序、軟件開發、面包屑導航

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都做網站
主站蜘蛛池模板: 粉嫩高中生无码视频在线观看| 国产v亚洲v天堂无码网站| 中日韩亚洲人成无码网站| 影音先锋中文无码一区| 中文字幕日产无码| 国产啪亚洲国产精品无码| 久久亚洲精品成人av无码网站 | 人妻无码aⅴ不卡中文字幕| 在线精品无码字幕无码AV| 一本大道在线无码一区| 久久无码AV中文出轨人妻| 老司机亚洲精品影院无码| 久久人妻少妇嫩草AV无码蜜桃| 亚洲AV无码专区在线观看成人| 中文无码久久精品| 无码国产精品一区二区高潮| 日韩精品无码一区二区三区| 国产无码网页在线观看| 亚洲欧洲无码AV不卡在线| 亚洲AV人无码激艳猛片| 亚洲精品无码av天堂| 中日韩精品无码一区二区三区| 亚洲日韩精品无码专区网站| 无码日韩精品一区二区免费| 精品成在人线AV无码免费看| 亚洲熟妇无码八AV在线播放| 亚洲一级Av无码毛片久久精品| 亚洲Aⅴ在线无码播放毛片一线天 亚洲av成本人无码网站 | 国产亚洲人成无码网在线观看| 国产精品无码无卡在线观看久| 中文字幕无码不卡免费视频 | 亚洲AV人无码激艳猛片| 中文无码成人免费视频在线观看| 日韩精品无码Av一区二区| 亚洲AV无码成人精品区日韩| 亚洲AV无码无限在线观看不卡| 亚洲av无码潮喷在线观看| 亚洲AV综合色区无码另类小说| 国产日韩AV免费无码一区二区| 狠狠躁狠狠爱免费视频无码| 亚洲精品一级无码鲁丝片|