【发布时间】:2015-06-11 17:16:26
【问题描述】:
我正在尝试创建一个程序,在该程序中我可以在游戏中按下热键,该程序将接收按键并执行操作。我尝试过遵循教程并查看其他问题,但它们似乎没有提供我想要的功能或方法已过时,我无法毫无错误地使用它们。
【问题讨论】:
标签: c# wpf key-bindings
我正在尝试创建一个程序,在该程序中我可以在游戏中按下热键,该程序将接收按键并执行操作。我尝试过遵循教程并查看其他问题,但它们似乎没有提供我想要的功能或方法已过时,我无法毫无错误地使用它们。
【问题讨论】:
标签: c# wpf key-bindings
您需要使用 WINAPI 互操作来执行此操作。该技术通常被称为全局hook。
您需要处理 WM_KEYDOWN、WM_KEYUP、WM_SYSKEYDOWN 和 WM_SYSKEYUP 事件。您可以阅读 WPF 和 Win32 特定的互操作 here。
您可以阅读计划调用 (PInvoke) here。 Pinvoke 是您从 .NET 应用程序调用在 dll 中实现的非托管/本机函数的方式。
例如,您可以调用SetWindowsHookEx (Pinvoke) | (MSDN) 方法在 user32.dll 中安装应用程序挂钩。
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 示例,可以帮助您入门。
【讨论】: