我目前正在为我的一个应用程序实现一个应用程序范围的键盘钩子。
这是通过使用覆盖PreFilterMessage方法的IMessageFilter实现并将该IMessageFilter添加到我的主窗体来实现的。
据我所能测试的,大多数数字和字母键都可以正常工作,但是当涉及到Keys.Left (代码37)时,Message的WParam似乎包含一个错误的值(代码39)。
是的,我已经做了一点--还有Keys.KeyCode ( 65535 btw。这意味着它甚至无关紧要)。
如果任何人有一个想法或提示,为什么它适用于字母/数字键,而不是Keys.Left,我将非常感谢。
代码:
public bool PreFilterMessage(ref Message m)
{
if(m.Msg == WM_KEYDOWN)
{
_keyTable[(Keys)m.WParam & Keys.KeyCode] = true;
}
if(m.Msg == WM_KEYUP)
{
_keyTable[(Keys)m.WParam & Keys.KeyCode] = false;
}
return false;
}发布于 2018-01-10 17:58:51
我在Numpad Keys中也遇到了同样的问题。
我做了以下工作:
VB.NET:
Dim KeyPressed As String
Select Case CType(m.WParam.ToInt32(), Keys)
Case Keys.NumPad1 : KeyPressed = "1"
Case Keys.NumPad2 : KeyPressed = "2"
Case Keys.NumPad3 : KeyPressed = "3"
Case Keys.NumPad4 : KeyPressed = "4"
Case Keys.NumPad5 : KeyPressed = "5"
Case Keys.NumPad6 : KeyPressed = "6"
Case Keys.NumPad7 : KeyPressed = "7"
Case Keys.NumPad8 : KeyPressed = "8"
Case Keys.NumPad9 : KeyPressed = "9"
Case Keys.NumPad0 : KeyPressed = "0"
Case Else : KeyPressed = Microsoft.VisualBasic.ChrW(m.WParam)
End Selecthttps://stackoverflow.com/questions/30758699
复制相似问题