仅在第一种情况下检测到的下移键

时间:2014-06-20 19:49:23

标签: c# .net winapi keyboard registerhotkey

我的应用程序能够检测是否按下了shift键,但仅检测到第一个修改后的键。即使仍然按住键,第二个修改的键(即使在按住shift时)也会被检测为未修改。

我希望能够正确检测在第一个修改后的密钥之后是否通过shift修改密钥(例如,对于第二个,第三个等等)。

注册代码如下:

[DllImport("user32.dll")]
public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);
[DllImport("user32.dll")]
public static extern bool UnregisterHotKey(IntPtr hWnd, int id);

public Form1()
    {
        InitializeComponent();
        RegisterHotKey(this.Handle, 1, 0, (int)Keys.A);
        RegisterHotKey(this.Handle, 101, 4, (int)Keys.A);
    }

事件处理程序(按下键时):

protected override void WndProc(ref Message m)
    {
        if (m.Msg == 0x0312)
        {
            switch (m.WParam.ToInt32())
            {
                case 1:
                    //add to a textbox
                    keypresstext.AppendText("a");
                    //unregister so the app doesnt rerecord it resulting in a loop
                    UnregisterHotKey(this.Handle, 1);
                    //send the key after intercepting
                    SendKeys.SendWait("a");
                    //reregister
                    RegisterHotKey(this.Handle, 1, 0,(int)Keys.A);
                    break;
                case 101:
                    keypresstext.AppendText("A");
                    UnregisterHotKey(this.Handle, 101);
                    SendKeys.Send("+{a}");
                    RegisterHotKey(this.Handle, 101, 4, (int)Keys.A);
                    break;
             }
        }
        base.WndProc(ref m);
    }

0 个答案:

没有答案