新手在这里,我的表单正在监控Caps Lock状态,但是使用了大约50%的CPU,我认为这与Application.Idle + = Application_Idle和Application.Idle - = Application_Idle有关。一旦我删除了那些我的表单没有监控Caps Lock状态,有什么建议吗?
c := int64(22)
答案 0 :(得分:0)
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.KeyDown += CapsLockMonitor;
this.KeyPreview = true;
}
private void CapsLockMonitor(object sender, KeyEventArgs e)
{
if (Control.IsKeyLocked(Keys.CapsLock))
{
this.label1.Text = "Caps lock enabled!";
}
else
{
this.label1.Text = "Caps lock disabled!";
}
}
}
这似乎没有咀嚼我的所有CPU,我订阅了我的自定义委托的KeyDown事件。
答案 1 :(得分:0)
老实说,即使应用程序处于空闲状态,仍然会持续监视CapsLock
状态,对我来说看起来有点过分。我的意思是,我不怀疑它是一个很好的功能,但我不知道它是否值得为它实现它。
如果您的应用程序必须在用户打开CapsLock
时打字时警告用户,那么最好(和更简单)的方法是在用户尽快显示工具提示或小警告框关注允许文本编辑的Control
。即使代码基于WPF
框架,您也可以很好地了解我所谈论的here。
为了执行您要查找的内容,您需要根据Global Keyboard Hook
设置一个非常复杂的系统。在this link之后,您可以找到一篇非常详细的文章("在C#中处理全局鼠标和键盘钩子" ),描述如何完成此任务。该链接还包含一个用C#
编写的演示代码,您可以部署并尝试。
一点摘录:
此类允许您点击键盘和鼠标和/或检测它们 活动,即使应用程序在后台运行或不运行 有任何用户界面。这个类引发了常见的.NET事件 使用KeyEventArgs和MouseEventArgs,您可以轻松检索任何内容 你需要的信息。