簡體   English   中英

如何區分真實按鍵和虛擬按鍵?

[英]How to tell real and virtual keypresses apart?

我正在研究一個C#應用程序,該應用程序監視鍵盤和鼠標事件,並在發生預設的組合鍵或鼠標按鍵按下時做出反應。 通過使用鍵盤和鼠標掛鈎,熱鍵檢測已在起作用。 但是,當應用程序的答案是使用SendInput()發送新的鍵組合時,我遇到了麻煩。

假設應用等待“ Alt + RMB ”,m將其抑制,然后發送“ Shift + A ”。 當我開始物理上按“ Alt + RMB ”時,將檢測到組合,並發送虛擬的“ Shift + A ”。

但是,該假按鍵會立即與原始按鍵混合,因此該應用程序現在可以檢測到“ Alt + Shift + A + RMB ”組合,而不再是“ Alt + RMB ”,因此不再發送“ Shift + A ”。 虛擬按鍵清除系統后,將再次檢測到我真正的熱鍵按鍵,並且循環重新開始。 (其中“ A ”需要替換為“ B ”,而“ B ”替換為“ A ”的設置將導致無限循環。)

因此,看來我的主要問題是區分真實和虛擬按鍵/鼠標事件。 有什么建議么?

(是的,該任務的確與Autohotkey的任務相似。但是,我在熱鍵檢測和可選的虛擬輸入發送步驟之間具有自定義的業務邏輯。使用Autohotkey.dll可能是一個選項,但我對以下操作的性能影響保持警惕:自定義腳本解釋器在其中運行。)

事實證明,虛擬按鍵/鼠標事件的正確術語是“ 注入 ”的,並且低級鍵盤掛鈎確實在KBDLLHOOKSTRUCT中提供了相關的標志。

現在,我修改了與掛鈎相關的事件管理,以便它允許通過帶有“ LLKHF_INJECTED”標志的任何事件,而無需抑制或通知有關它的主要邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM