欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#模擬鍵盤輸入、鍵狀態(tài)和監(jiān)聽鍵盤消息

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

模擬鍵盤輸入

模擬鍵盤輸入的功能需要依賴Windows函數(shù)實(shí)現(xiàn),這個(gè)函數(shù)是SendInput,它是專門用來模擬鍵盤、鼠標(biāo)等設(shè)備輸入的函數(shù)。

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

另一個(gè)是keybd_event函數(shù),這個(gè)函數(shù)依然是有用的,但是目前官方已經(jīng)推薦使用SendInput替代它了。

SendInput的定義

INPUT對(duì)象中保存了輸入內(nèi)容,nInputs和cbSize代表pInputs的長(zhǎng)度和INPUT結(jié)構(gòu)的大小,這兩個(gè)參數(shù)能幫助SendInput正確解析INPUT對(duì)象。返回值0表示失敗,非零表示正確執(zhí)行。

 

INPUT的定義

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

FieldOffset(0)將三個(gè)結(jié)構(gòu)的起始都放在0位置,所以只能使用其中一個(gè)內(nèi)容,因?yàn)橐粋€(gè)INPUT也只能表示一個(gè)消息,這樣設(shè)計(jì)可以節(jié)省空間。

KEYBDINPUT結(jié)構(gòu)中的wVK表示虛擬鍵碼 ,dwFlags的第一位bit默認(rèn)0表示鍵盤按下事件,1表示鍵盤釋放事件。

虛擬鍵碼是一種能讓W(xué)indows以與設(shè)備無關(guān)的方式處理鍵盤的技術(shù),可以簡(jiǎn)單理解為:鍵盤上的每個(gè)鍵用一個(gè)數(shù)字來表示。

 

模擬A鍵

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

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

 

模擬Ctrl+A

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

 

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

KEYBDINPUT結(jié)構(gòu)的wScan表示字符內(nèi)容,將dwFlags的第二位bit置1表示使用wScan屬性而非wVK。

文本輸入

 

鍵狀態(tài)

有時(shí)需要知道鍵盤按鍵的當(dāng)前狀態(tài),可以使用GetKeyState函數(shù)。

GetKeyState的定義

參數(shù)是鍵的虛擬碼,對(duì)于開關(guān)鍵(Caps Look、Num Lock和Scroll Lock),返回值1表示開啟狀態(tài)。對(duì)于其它鍵返回負(fù)數(shù)表示按下狀態(tài)。

CapsLock鍵狀態(tài)

 

監(jiān)聽鍵盤消息

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

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

鉤子是Windows系統(tǒng)消息處理機(jī)制中的一個(gè)節(jié)點(diǎn),可以安裝鉤子來監(jiān)聽系統(tǒng)中的Windows消息。

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

鉤子的安裝需要調(diào)用系統(tǒng)SetWindowsHookEx方法。

 

SetWindowsHookEx的定義

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

 

安裝鉤子

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

 

消息處理

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

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

應(yīng)避免在消息處理過程中進(jìn)行耗時(shí)操作。

 

卸載鉤子需要使用UnhookWindowsHookEx

UnhookWindowsHookEx的定義

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

作者:左眼水星
轉(zhuǎn)載請(qǐng)注明原文鏈接:https://www.cnblogs.com/yxllxy/p/18361608



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