【问题标题】:c# winforms how to check keypress out of formc# winforms如何检查keypress脱离形式
【发布时间】:2015-10-08 19:52:57
【问题描述】:

我尝试做屏幕像素颜色选择器,如果用户按下 [CTRL]+[ALT]+[C],我想复制像素 html 颜色。

但这可以从申请表中挤出来。所以我不能使用Form的keydown事件。

我该怎么做?也许是一些 API 函数?

【问题讨论】:

  • 您可以使用RegisterHotKey API 将组合捕获为热键组合,或者通过使用WH_KEYBOARD_LL 的低级键盘挂钩。如果您想要的组合键已经被另一个使用 RegisterHotKey 的应用程序占用,则后者是必要的。

标签: c# winforms winapi events


【解决方案1】:

你需要这样的东西 http://www.c-sharpcorner.com/UploadFile/ChrisBlake/HowToPre-FilterWindowsMessgaes11232005225819PM/HowToPre-FilterWindowsMessgaes.aspx

这里是代码列表 http://wiki.winehq.org/List_Of_Windows_Messages

我以前用鼠标左键做过,但你必须看看如何用键盘来做。

基本上,您拦截应用程序收到的每条消息,并过滤您需要的消息(通过检查代码值)。我认为您可以等待消息告诉您按下了键盘按钮(任何按钮),然后使用 Keyboard 类检查按下的键。

if ((Keyboard.IsKeyDown(Key.LeftCtrl) ||
        Keyboard.IsKeyDown(Key.RightCtrl)) &&
        (Keyboard.IsKeyDown(Key.LeftAlt) ||
        Keyboard.IsKeyDown(Key.RightAlt)) && 
        Keyboard.IsKeyDown(Key.C))
{
      //your code
}

https://msdn.microsoft.com/en-us/library/system.windows.input.keyboard(v=vs.110).aspx

【讨论】:

  • "但是这个可以从申请表中挤出来。"如果应用程序不是前台应用程序,IMessageFilter 将无济于事......
  • 嗯,是的,你是对的,如果它不是前台,它将无法工作。
  • 我有一个想法,如果您找不到解决方案,这是更多的解决方法。您可以在应用程序中拥有一个线程,并将其用于忙等待。它休眠 50 毫秒,检查用户是否按下了按钮,然后再次休眠。我花了 50 毫秒,因为这里 stackoverflow.com/questions/22505698/… 我看到按键的平均长度约为 100 毫秒,所以如果这不起作用,你可以花更短的时间,直到你得到可接受的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多