2015-06-01 36 views
1

我使用的命名空間Windows.Forms.Keys翻譯Windows.forms.Keys真正本地鍵盤值

我希望能夠趕上和使用一些特殊的像喜歡E字符,è,A,C,但是當程序觸發事件KeyDown時,KeyEventArg只會將值「D1」返回給「D9」。

我能做些什麼來獲得與這些鍵相關的真正字符?

+1

KeyDown事件與輸入的字符非常不同。例如,如果同時按下Ctrl鍵,那不是一個字符等。它與實際的物理鍵有關,與輸入框碰巧聚焦時鍵的效果可能非常不同。 –

回答

0

簡答題:使用KeyPress而不是KeyDown

KeyDown是真的設計用於鍵盤的物理佈局(以及物理的邏輯佈局...忘記它:D)。這與給定物理鍵表示的字符非常不同。

另一方面KeyPress是關於從鍵盤輸入的字符,而不是真正按下的鍵。注意如何KeyPress支持像AltGr + someKey和焦炭等重複

如果你真的需要使用KeyDown/KeyUp,你將不得不效仿了Windows鍵盤系統的工作原理,確定焦炭輸出(例如,如果你的特點爲遊戲製作鍵盤映射屏幕或類似的東西)。您可以使用ToAscii WinAPI方法(https://msdn.microsoft.com/en-us/library/ms646316.aspx)。

除此之外,您還必須瞭解組合鍵的含義 - 例如,在我的鍵盤上,如果按1,我會得到+。如果我按Shift+1,我得到1。如果我按AltGr + 1,我得到!。你關心哪些人?也許Shift + 1應解釋爲1KeyPress做什麼)。也許它應該被解釋爲Shift + 1(最簡單的,你已經有了)。也許它應該被解釋爲Shift + +,它通常用於遊戲中的熱鍵綁定或鍵盤映射。

現在應該是非常明顯的,這實際上遠非微不足道。您需要一些機制來解釋「原始」輸入數據 - 不同的解釋對於不同的初始條件有不同的意義。你基本上要求在兩個明顯的選擇之間採取混合的方式 - 混合虛擬鍵和「真實」角色。

+0

恩,謝謝,我錯了。如果我想攔截字符和功能性鍵,我想我應該只發射2個事件? – GlorfSf

+0

@GlorfSf這真的很大程度上取決於你實際要做的事情。你爲什麼試圖捕捉字符/按鍵? – Luaan

+0

爲了簡單起見,我必須觀察一些用戶的操作,例如鍵入文本或點擊某處,以使程序能夠在稍後模仿這些相同的操作。我需要捕捉像F1-F9這樣的功能鍵,選項卡以及類似這樣的東西,如果能夠獲得用戶想要輸入的確切文本,我會提供很多幫助。 – GlorfSf