首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IMessageFilter.PreFilterMessage中的WParam值错误

IMessageFilter.PreFilterMessage中的WParam值错误
EN

Stack Overflow用户
提问于 2015-06-10 22:04:36
回答 1查看 368关注 0票数 0

我目前正在为我的一个应用程序实现一个应用程序范围的键盘钩子。

这是通过使用覆盖PreFilterMessage方法的IMessageFilter实现并将该IMessageFilter添加到我的主窗体来实现的。

据我所能测试的,大多数数字和字母键都可以正常工作,但是当涉及到Keys.Left (代码37)时,MessageWParam似乎包含一个错误的值(代码39)。

是的,我已经做了一点--还有Keys.KeyCode ( 65535 btw。这意味着它甚至无关紧要)。

如果任何人有一个想法或提示,为什么它适用于字母/数字键,而不是Keys.Left,我将非常感谢。

代码:

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

发布于 2018-01-10 17:58:51

我在Numpad Keys中也遇到了同样的问题。

我做了以下工作:

VB.NET:

代码语言:javascript
复制
    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 Select
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30758699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档