狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C#模擬鍵盤輸入、鍵狀態和監聽鍵盤消息

freeflydom
2024年8月17日 20:1 本文熱度 829

模擬鍵盤輸入

模擬鍵盤輸入的功能需要依賴Windows函數實現,這個函數是SendInput,它是專門用來模擬鍵盤、鼠標等設備輸入的函數。

另外和鍵盤輸入相關的函數還有SendKeys,它是System.Windows.Forms. SendKeys,只能在WinFrom項目中使用,并且它的所有功能都可以由SendInput來實現。

另一個是keybd_event函數,這個函數依然是有用的,但是目前官方已經推薦使用SendInput替代它了。

SendInput的定義

INPUT對象中保存了輸入內容,nInputs和cbSize代表pInputs的長度和INPUT結構的大小,這兩個參數能幫助SendInput正確解析INPUT對象。返回值0表示失敗,非零表示正確執行。

 

INPUT的定義

INPUT結構中的type表示消息類型,值為1表示鍵盤消息。mkhi表示具體的消息內容,它可以模擬三類消息,其中鍵盤消息使用KEYBDINPUT表示,其它消息類型的結構不在這里介紹(雖然用不到MOUSEINPUT等結構,但是它們的定義不能省略,否則SendInput無法正確解析INPUT中的具體內容)。

FieldOffset(0)將三個結構的起始都放在0位置,所以只能使用其中一個內容,因為一個INPUT也只能表示一個消息,這樣設計可以節省空間。

KEYBDINPUT結構中的wVK表示虛擬鍵碼 ,dwFlags的第一位bit默認0表示鍵盤按下事件,1表示鍵盤釋放事件。

虛擬鍵碼是一種能讓Windows以與設備無關的方式處理鍵盤的技術,可以簡單理解為:鍵盤上的每個鍵用一個數字來表示。

 

模擬A鍵

A鍵的虛擬鍵碼是0x41。type=1表示這是鍵盤消息,dwFlags=2表示鍵盤釋放事件。

這里INPUT數組模擬的就是使用物理鍵盤A鍵的過程。inputs[0]模擬A鍵按下,inputs[1]模擬A鍵釋放。

 

模擬Ctrl+A

0x11是Ctrl的虛擬鍵碼,這里模擬了按下Ctrl鍵,按下A鍵,釋放A鍵,釋放Ctrl鍵的過程,實現了Ctrl+A的組合鍵效果。

 

SendInput除了能模擬擊鍵消息外還可以在文本輸入中模擬字符消息。

KEYBDINPUT結構的wScan表示字符內容,將dwFlags的第二位bit置1表示使用wScan屬性而非wVK。

文本輸入

 

鍵狀態

有時需要知道鍵盤按鍵的當前狀態,可以使用GetKeyState函數。

GetKeyState的定義

參數是鍵的虛擬碼,對于開關鍵(Caps Look、Num Lock和Scroll Lock),返回值1表示開啟狀態。對于其它鍵返回負數表示按下狀態。

CapsLock鍵狀態

 

監聽鍵盤消息

對于WinForm和WPF程序,要監聽輸入到本程序的鍵盤消息直接使用窗口的KeyDown和KeyUp事件即可。

對于其它鍵盤消息(即給本程序以外的鍵盤消息),需要使用鉤子(hook)。

鉤子是Windows系統消息處理機制中的一個節點,可以安裝鉤子來監聽系統中的Windows消息。

Windows消息分很多種,對于特定的一類消息需要使用對應的特定類型的鉤子,這里只介紹鍵盤消息的鉤子。

鉤子的安裝需要調用系統SetWindowsHookEx方法。

 

SetWindowsHookEx的定義

idHook等于13表示全局鍵盤消息鉤子,lpfn代表鍵盤消息處理程序,返回非IntPtr.Zero表示安裝成功。

 

安裝鉤子

KeyboardHookCallback就是自定義的具體處理鍵盤消息的方法。

 

消息處理

從lParam中讀取鍵的虛擬碼(lParam其實是指向類似前文提到的KEYBDINPUT結構的指針),wParam表示擊鍵事件的類型。CallNextHookEx將消息傳遞給下一個消息處理節點。

使用前文提到的SendInput方法模擬鍵盤輸入也能被鉤子監聽到。

應避免在消息處理過程中進行耗時操作。

 

卸載鉤子需要使用UnhookWindowsHookEx

UnhookWindowsHookEx的定義

傳入SetWindowsHookEx的返回值即可,返回true則卸載成功。

作者:左眼水星
轉載請注明原文鏈接:https://www.cnblogs.com/yxllxy/p/18361608



該文章在 2024/8/19 8:44:18 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved