在 WPF 应用程序中,我使用一个模块NHotkey来处理热键。
using System;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
namespace test
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
NHotkey.Wpf.HotkeyManager.Current.AddOrReplace("Test", Key.G, ModifierKeys.Alt, Test);
}
async private static void Test(object sender, EventArgs e)
{
await Task.Delay(300);
KeyboardManager.ModifiedKeyStroke(Key.A, ModifierKeys.Control);
}
}
}
感谢构造函数中的第 2 行MainWindow(),当您按下ALT+快捷键时,G将调用该方法,该方法以编程方式按下+Test()组合键来选择任何输入字段中的文本。CTRLA
问题:
如果您从代码中删除该行,那么当您以编程方式按+await Task.Delay(300);时,输入字段中的文本将不会突出显示,因为该方法会立即调用,即使是在按钮时(来自+组合)没有被释放。CTRLAALTALTG
结果是一个键盘快捷键ALT++ ,由于额外的CTRL键A,它不会突出显示文本ALT。
临时解决方案:
为了解决这个问题,我在方法代码中添加了 300ms 的延迟,以留出释放Test()按钮的时间。在这种情况下,如果在按下后 300 毫秒内释放,从+突出显示文本有效,但这不是问题的正常解决方案。ALTCTRLA
此外,我想到在调用该方法之前以某种方式“按下”所有按下的键,但这是正确的吗?
代码使用类KeyboardManager,这里是它的代码:https ://pastebin.com/f1xmZUW0
我了解您似乎需要等到用户释放键盘上的所有按钮才能开始自动化。
好吧,像这样打电话
如果 5 秒后键盘没有松开,那么显然有问题。不幸的是,在我的实践中,我什至不得不重新启动计算机,因为键盘真的很糟糕,但这实际上是很少见的。一般来说,不能排除此选项,因为应用程序可能根本不会等待 Claudia 的释放并永远冻结。