公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

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

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

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

模擬鍵盤輸入

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

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

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

SendInput的定義

INPUT對象中保存了輸入內(nèi)容,nInputs和cbSize代表pInputs的長度和INPUT結(jié)構(gòu)的大小,這兩個參數(shù)能幫助SendInput正確解析INPUT對象。返回值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)將三個結(jié)構(gòu)的起始都放在0位置,所以只能使用其中一個內(nèi)容,因為一個INPUT也只能表示一個消息,這樣設(shè)計可以節(jié)省空間。

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

虛擬鍵碼是一種能讓W(xué)indows以與設(shè)備無關(guān)的方式處理鍵盤的技術(shù),可以簡單理解為:鍵盤上的每個鍵用一個數(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鍵的過程,實現(xiàn)了Ctrl+A的組合鍵效果。

 

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

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

文本輸入

 

鍵狀態(tài)

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

GetKeyState的定義

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

CapsLock鍵狀態(tài)

 

監(jiān)聽鍵盤消息

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

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

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

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

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

 

SetWindowsHookEx的定義

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

 

安裝鉤子

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

 

消息處理

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

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

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

 

卸載鉤子需要使用UnhookWindowsHookEx

UnhookWindowsHookEx的定義

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

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



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

主站蜘蛛池模板: 国产三级午夜视频在线观看 | 国产精品三p一区二区视频 国产精品三级 | 国产成人精品午夜日本亚洲 | 国产午夜精品美女短视频 | 国产福利不卡在线观看 | 成人亚洲a片v一区二区三区动漫 | 精品午夜福利无人区乱码一区 | 精品国产v无码免费看扒衣 精品国产成人国产在线观看 | 国产成人精品高清在线观看 | 国产成人综合亚洲日韩欧美 | 2025国产精品自产拍在线观看 | 丰满人妻无码aⅴ一区二区 丰满人妻无码专区视频 | av中文字幕在线观看 | 国产极品在线观看 | 国产精品视频一区国模私拍 | 91成人午夜性a一级毛 | 91人妻无码精品一区二区夜色 | 丰满人妻熟妇乱又精品视频 | 国产一级a级免费视频 | 91久久精品国产一区二区 | 国产微拍一区二区三区四区 | 国产一区二区精品久久岳√ | 白嫩一区二区在线视频 | 国产做a爰片毛片a片美国 | 国产精品高潮呻吟久久 | 91久久视频平台是否值得尝试 | 国产精品午夜未成人免费观看 | 国产精品日韩欧美亚洲另类 | 国产经典三级av在线播放 | 国产精品户露av在线户外直播 | 国产在线观看免费视频软件 | 97人妻在线公开视频 | 国产91专区一 | 高潮视频免费 | 国产毛片特级av片 | 国产三级国产三级欧美三级 | 国产97久久精品一区二区 | 国产欧美综合在线 | 国产精品大陆高清 | 国产亚洲日韩精品欧美一区二区 | 国产精品乱子伦一区二区三区 |