gpt4 book ai didi

c# - 如何在未聚焦时检测按键?

转载 作者:可可西里 更新时间:2023-11-01 08:02:56 24 4
gpt4 key购买 nike

我正在尝试检测 Print Screen 按钮是否按下,而表单不是当前事件的应用程序。

如果可能,该怎么做?

最佳答案

好吧,如果您遇到系统 Hook 问题,这里有现成的解决方案(基于 http://www.dreamincode.net/forums/topic/180436-global-hotkeys/ ):

在你的项目中定义静态类:

public static class Constants
{
//windows message id for hotkey
public const int WM_HOTKEY_MSG_ID = 0x0312;
}

在你的项目中定义类:

public class KeyHandler
{
[DllImport("user32.dll")]
private static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk);

[DllImport("user32.dll")]
private static extern bool UnregisterHotKey(IntPtr hWnd, int id);

private int key;
private IntPtr hWnd;
private int id;

public KeyHandler(Keys key, Form form)
{
this.key = (int)key;
this.hWnd = form.Handle;
id = this.GetHashCode();
}

public override int GetHashCode()
{
return key ^ hWnd.ToInt32();
}

public bool Register()
{
return RegisterHotKey(hWnd, id, 0, key);
}

public bool Unregiser()
{
return UnregisterHotKey(hWnd, id);
}
}

添加使用:

using System.Windows.Forms;
using System.Runtime.InteropServices;

现在,在您的表单中,添加字段:

private KeyHandler ghk;

在表单构造函数中:

ghk = new KeyHandler(Keys.PrintScreen, this);
ghk.Register();

将这 2 个方法添加到您的表单中:

private void HandleHotkey()
{
// Do stuff...
}

protected override void WndProc(ref Message m)
{
if (m.Msg == Constants.WM_HOTKEY_MSG_ID)
HandleHotkey();
base.WndProc(ref m);
}

HandleHotkey 是您的按钮按下处理程序。您可以通过在此处传递不同的参数来更改按钮:ghk = new KeyHandler(Keys.PrintScreen, this);

现在,即使您的程序没有聚焦,您的程序也会对按钮输入使用react。

关于c# - 如何在未聚焦时检测按键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18291448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com