我是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 ,条件也是正确的,这是一个不需要的触发器。有没有办法克服它?
答案 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))
{
}
}
}
}