如何绑定热键
How to bind a hotkey
我正在尝试创建一个程序,我可以在玩游戏时按下热键,该程序将接收到按键并执行一个操作。我试过按照教程并查看其他问题,但它们似乎没有提供我想要的功能,或者方法已经过时,我无法在没有错误的情况下使用它们。
您需要使用 WINAPI Interop 执行此操作。该技术通常被称为全局 hook。
您需要处理 WM_KEYDOWN
、WM_KEYUP
、WM_SYSKEYDOWN
和 WM_SYSKEYUP
事件。您可以阅读 WPF 和 Win32 特定的互操作 here。
您可以阅读计划调用 (PInvoke) here。 Pinvoke 是您从 .NET 应用程序调用在 dll 中实现的非托管/本机函数的方式。
比如可以在user32.dll中调用SetWindowsHookEx
(Pinvoke) | (MSDN)方法安装一个应用挂钩
IntPtr hHook;
using (Process process = Process.GetCurrentProcess())
using (ProcessModule module = process.MainModule)
{
IntPtr hModule = GetModuleHandle(module.ModuleName);
hHook = SetWindowsHookEx(HookType.WH_KEYBOARD_LL, hook, hModule, 0);
}
您可以在此 wiki 站点找到 Pinvoke 签名:http://www.pinvoke.net
Here 是一个最小的键盘钩子示例。
Here 是一个 C#/WPF 示例,可以帮助您入门。
我正在尝试创建一个程序,我可以在玩游戏时按下热键,该程序将接收到按键并执行一个操作。我试过按照教程并查看其他问题,但它们似乎没有提供我想要的功能,或者方法已经过时,我无法在没有错误的情况下使用它们。
您需要使用 WINAPI Interop 执行此操作。该技术通常被称为全局 hook。
您需要处理 WM_KEYDOWN
、WM_KEYUP
、WM_SYSKEYDOWN
和 WM_SYSKEYUP
事件。您可以阅读 WPF 和 Win32 特定的互操作 here。
您可以阅读计划调用 (PInvoke) here。 Pinvoke 是您从 .NET 应用程序调用在 dll 中实现的非托管/本机函数的方式。
比如可以在user32.dll中调用SetWindowsHookEx
(Pinvoke) | (MSDN)方法安装一个应用挂钩
IntPtr hHook;
using (Process process = Process.GetCurrentProcess())
using (ProcessModule module = process.MainModule)
{
IntPtr hModule = GetModuleHandle(module.ModuleName);
hHook = SetWindowsHookEx(HookType.WH_KEYBOARD_LL, hook, hModule, 0);
}
您可以在此 wiki 站点找到 Pinvoke 签名:http://www.pinvoke.net
Here 是一个最小的键盘钩子示例。
Here 是一个 C#/WPF 示例,可以帮助您入门。