1. 程式人生 > 其它 >基於鍵盤鉤子實現掃碼槍輸入

基於鍵盤鉤子實現掃碼槍輸入

基於鍵盤鉤子實現掃碼槍輸入

dotNet工控上位機 已認證帳號  

鉤子

鉤子是作業系統訊息處理的一種機制。通過鉤子,應用程式可以安裝一個鉤子回撥過程讓系統呼叫,從而監視系統中的訊息佇列。在這些訊息到達目標視窗之前對這些訊息進行處理。

特點

  • 鉤子函式會降低作業系統的效能,因為它增加系統處理每一個訊息的開銷。
  • 作業系統支援多種型別的鉤子,每種型別都提供了它特有的訊息處理機制。
  • 對於每種型別的鉤子,系統都維護一個各自獨立的鉤子鏈,鉤子鏈是一個指向使用者提供的回撥函式鉤子過程的連結串列指標。
  • 鉤子儘量避免大量使用,對於一個鉤子,一般是需要的時候安裝,使用完成後,儘快解除安裝。

函式

鍵盤鉤子的使用是基於Windows自帶的dll,Windows API中的所有函式都包含在dll中。

3個最重要的DLL是:

1)kernel32.dll : 包含用於管理記憶體、程序和執行緒的各個函式

2)User32.dll : 包含用於執行使用者介面任務的(如視窗建立和訊息傳送)的各個函式

3)GDI32.dll : 包含用於畫圖和現實文字的各個函式

使用

之所以要使用鍵盤鉤子,主要是工業上有很多掃碼槍是通過獲取焦點,自動掃碼的。但是如果想要實現無焦點輸入,就需要使用鍵盤鉤子,將鍵盤鉤子的程式碼封裝成了一個類,這樣使用就非常簡單了,使用程式碼如下:

1、建立鉤子物件

  private ScanerHook listener = new ScanerHook();

2、鉤子建立及解除安裝

            //建立鉤子
            listener.Start();
            //鉤子事件
            listener.ScanerEvent += Listener_ScanerEvent;    
            //窗體關閉後,解除安裝鉤子
            this.FormClosed += (sender, e) =>
              {
                  listener.Stop();
              };

3、獲取條碼

        private void Listener_ScanerEvent(ScanerHook.ScanerCodes codes)
        {
            this.txt_Info.Text = codes.Result;
        }

實現

編輯於 2021-10-15 08:45