C#在mouse_event中隐藏ctrl键

时间:2013-10-16 23:01:58

标签: c# winapi mouseevent

我遇到的情况是,当按下 ctrl 键时,我正在尝试发送mouse-click

我发现接收鼠标点击事件的应用程序将 ctrl 键解释为关闭。

在发送鼠标事件之前,我可以对代码中的release ctrl 键做些什么?

我正在使用mouse_event发送LeftDown消息,如果这是一个有用的线索。

谢谢!

3 个答案:

答案 0 :(得分:0)

如果要阻止默认行为,请从控件中的此重写方法返回true:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == Keys.Ctrl)
    {
        //send mouse event
        return true;
    }
}

答案 1 :(得分:0)

在使用mouse_event之前尝试使用keybd_event():

    [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)]
    public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int extraInfo);

    [DllImport("user32.dll")]
    static extern short MapVirtualKey(int wCode, int wMapType);

    // ...
        keybd_event((int)Keys.ControlKey, (byte)MapVirtualKey((int)Keys.ControlKey, 0), 2, 0); // Control Up                
        // ... call mouse_event() ...

答案 2 :(得分:0)

感谢您的回答。我担心有人会认为我正在使用WinForms控件:)

我发现Windows输入模拟器库(http://inputsimulator.codeplex.com/)能够得到我需要的东西。我在用“鼠标按下”消息之前用它来发送“按键”信息,一切都很好。

再次感谢您的回答!