如何检测控件+ v粘贴

时间:2015-08-11 19:30:13

标签: c# wpf

我是C#的新手。我在键盘上按下时使用以下代码检测 Ctrl + v

while(true)
{
    bool check = (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl));

    if (check && Keyboard.IsKeyDown(Key.V))
    {
        if (Clipboard.ContainsText())
            history.Dispatcher.Invoke(new invoke_method2(update2), 
                                      new object[] { Clipboard.GetText(), history });
    }
}

该程序在后台运行。问题是,当用户按 Ctrl 然后 v 时,它可以工作。但是如果用户按下 v 然后 Ctrl ,条件也是正确的,这是一个不需要的触发器。有没有办法克服它?

1 个答案:

答案 0 :(得分:5)

要在WPF中捕获窗口中的快捷方式,请实现KeyDown事件,因此无需创建新线程:

public MainWindow()
{
    InitializeComponent();
    KeyDown += MainWindow_KeyDown;
}

void MainWindow_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyboardDevice.Modifiers == ModifierKeys.Control)
    {
        if (e.Key == Key.V)
        {

        }
    }
}

编辑:

如果您想使用您的解决方案,那么您实际上正在搜索 V 未按下的时间点,但 Ctrl 是,所以以下工作:

while (true)
{
    if (!Keyboard.IsKeyDown(Key.V))
    {
        while (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
        {
            if (Keyboard.IsKeyDown(Key.V))
            {

            }
        }
    }
}