问候,
我已经实现了here所描述的低级键盘钩子。这在WinXP下工作正常。 问题是,在Windows 7下,左右窗口键不再被拦截。
有关如何在Windows 7下重新获取这些密钥的任何建议都非常感谢!
干杯,
罗尼
答案 0 :(得分:3)
我已经构建了一个库,因为在许多情况下,正常挂钩对我来说不起作用,所以我已经构建了一个c库来与底层的过滤器驱动程序进行通信,以完成设备输入拦截的工作。以下是使用此库捕获Windows密钥的示例:
#include <iostream>
#include <interception.h>
#include "utils.h" // for process priority control
const InterceptionKeyStroke windows_key_down = {91, INTERCEPTION_KEY_E0 | INTERCEPTION_KEY_DOWN};
const InterceptionKeyStroke windows_key_up = {91, INTERCEPTION_KEY_E0 | INTERCEPTION_KEY_UP};
bool operator == (const InterceptionKeyStroke &left, const InterceptionKeyStroke &right)
{
return left.code == right.code && left.state == right.state;
}
int main()
{
using namespace std;
InterceptionContext context;
InterceptionDevice device;
InterceptionStroke stroke;
raise_process_priority();
context = interception_create_context();
interception_set_filter(context, interception_is_keyboard, INTERCEPTION_FILTER_KEY_ALL);
while(interception_receive(context, device = interception_wait(context), &stroke, 1) > 0)
{
InterceptionKeyStroke &keystroke = *(InterceptionKeyStroke *) &stroke;
if(keystroke == windows_key_down)
cout << "Windows Key Down" << endl;
if(keystroke == windows_key_up)
cout << "Windows Key Up" << endl;
interception_send(context, device, &stroke, 1);
}
interception_destroy_context(context);
return 0;
}
示例捕获密钥并将其发送回操作系统,但您可以执行其他操作。
您可以在http://oblita.com/Interception查看更多文档。
答案 1 :(得分:1)
看看适用于Windows 7的Win Kernel SDK并编写一个“驱动程序”,它也可以解决这个问题。