2011-04-06 156 views
2

我需要監聽特定的鍵盤事件鍵盤設備&瞭解在(C#)WPF應用程序中按哪個鍵。理想情況下,這不應該依賴於窗口,只要應用程序具有焦點,就可以工作。鍵盤事件

不幸的是我不能想到/找到任何方式來做到這一點。

有什麼想法?

DR

編輯:我一直在尋找進入OpenTK.Input庫,它有一個漂亮的界面按鍵...有誰知道如何獲得KeyboardDevice而無需創建一個GameWindow

信息:順便說一下,這是一個模擬鍵盤的條碼掃描器...誰的聰明想法是,呃?

+3

我不相信這是可能的。 Windows將接受並處理來自任何鍵盤的關鍵事件。 Windows在鍵盤緩衝區方面就像一個盲人,任何設備(例如遊戲手柄)都可以將密鑰放入緩衝區。 – 2011-04-06 11:54:15

+0

@Rhhound:我必須同意 - 不管寫驅動程序過濾器還是其他什麼東西。 – 2011-04-06 11:59:40

+0

看看我剛​​剛提出的鍵盤問題的答案。它可以幫助你找到一個適合你的要求的dll API http://stackoverflow.com/questions/172353/how-to-push-a-key-and-release-it-using-c – Larry 2011-04-06 12:00:05

回答

0

在msdn上管理找到這個tutorial。以及一個Sample Scanner對象,它與POS.Net SDK

我還沒有真正有時間來分辨它的工作方式還沒有給出一個適當的概述,但它似乎我應該能夠編寫一個自定義服務對象抽象適用於任何「鍵盤楔」HID設備。

0

看看下面的2篇文章。

Using global keyboard hook (WH_KEYBOARD_LL) in WPF/C#

https://gist.github.com/471698

都應該正是你想要的......

+0

你將如何去做這個鍵盤特定的,我已經嘗試使它打印內部值,但無法找到任何設備特定的類。據我所知,所使用的WinAPI函數都不能限制爲單個設備... – 2011-04-06 13:39:38

+0

@Dead。Rabit,這是我的壞,我沒有專注於具體的部分(你會認爲,因爲它是粗體的,我會注意到它:-() – 2011-04-06 14:40:46

1

實際上我工作所做的正是這一個項目。檢查出Kaptivate。它安裝一個全局鍵盤鉤子,並將原始輸入api連接在一起(然後使用魔術),然後調用一個回調函數,以便你可以決定(1)這是我所使用的設備?(2)我應該允許其他應用程序來查看它,或者只保留我自己的按鍵。目前它只是C++,但最終的目標之一是擁有C#包裝器。

對於鍵盤,每個生成的事件會告訴您vkey,掃描碼和源設備。

+0

順便說一下,我現在將它標記爲pre-alpha。如果我是你可以繼續前進,並瞭解它是如何工作的,也可以根據自己的需要來設置它。圖書館還有一段路要走。 – 2011-04-12 22:16:32

+0

它看起來像一個很好的項目,但我無法獲取樣本不幸的是,在我的機器上工作...當我玩弄Pos.Net自定義服務對象時,我會再看看一個樣子[ – 2011-04-13 10:33:23

+0

]是的,樣本非常有人氣,其實我需要改變它。現在大多數情況下它的工作狀態,但有時它並不是。祕密是有一個不同的焦點窗口(即控制檯需要在後臺)。再次,pre-alpha – 2011-04-13 14:02:04