【原創】小鍵盤NumLock狀態指示工具


工具介紹:  

  我現在這個筆記本電腦沒有NumLock指示燈,有時候用小鍵盤經常打不出數字來,非常苦惱。

  在小眾軟件里也找到一些類似的工具,那些工具很不錯,但是功能太多,

  尤其Caps和Scroll鍵狀態對我來說不需要,我不想為此多花費一丁點CPU資源:)

  因此自己做了一個功能專一的小工具~

  軟件運行后就會在右下角顯示一個圖標,對號是開,叉號是關,沒有界面,只有圖標,不能多開。

  NumLock狀態變化時可以實時顯示,鼠標點擊圖標就可以退出程序。

  

  

  同樣有此需要的同學拿走吧~ 下載

  Winform做的,.net framework 版本是2.0,上面的是Release版本,內存占用大約10M,CPU占用可以忽略……

核心邏輯:

  需要在NumLock鍵按下的時候實時捕捉到變化,因此下了全局鈎子;

  但是卻不可以通過按鍵來判斷狀態的變化(鍵盤鍵位的按下和彈起對NumLock狀態的變化影響情況比較復雜),

  還是要讀鍵盤碼狀態比較穩定,因此還需要有一個循環去讀。

  但是循環一直進行,在性能方面不是好的思路,因為很多時候大家都不會去按NumLock。

  循環空轉是不好的,因此我是在鈎子捕捉到NumLock按下的時候馬上啟動一個持續4秒的循環,每秒讀50次狀態(絕對夠精准了……)。

核心代碼:  

 1         public int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam)
 2         {
 3             kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct));
 4             if (kbh.vkCode == (int)Keys.NumLock)
 5             {
 6                 if (!isRunning)
 7                 {
 8                     ThreadPool.QueueUserWorkItem(delegate {
 9                         isRunning = true;
10                         curCount = 200;
11                         while (curCount > 0)
12                         {
13                             SetStatus();
14                             Thread.Sleep(20);
15                             curCount--;
16                         }
17                         isRunning = false;
18                     });
19                 }
20             }
21             return 0;
22         }

 

 1         private void SetStatus()
 2         {
 3             if (GetKeyState(0x90) != 0)
 4             {
 5                 notifyIcon.Icon = Properties.Resources.Open;
 6                 notifyIcon.Text = "NumLock On";
 7             }
 8             else
 9             {
10                 notifyIcon.Icon = Properties.Resources.Close;
11                 notifyIcon.Text = "NumLock Off";
12             }
13         }

 

PS:我非常小眾軟件那個網站,尤其是他們“簡潔、實用、干凈”的主張我非常欣賞,包括他們友情鏈接的網站(也是非常精致實用的風格)……


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM