1

我有一种情况,我试图在按下键mouse-click时发送一个。ctrl

我发现接收鼠标单击事件的应用程序将ctrl键解释为按下。

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

mouse_event用来发送LeftDown消息,如果这是一个有用的线索。

谢谢!

4

3 回答 3

0

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

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == Keys.Ctrl)
    {
        //send mouse event
        return true;
    }
}
于 2013-10-16T23:10:39.420 回答
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() ...
于 2013-10-16T23:25:29.040 回答
0

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

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

再次感谢您的回答!

于 2013-10-17T12:59:10.227 回答