Я построил библиотеку, потому что в некоторых случаях для меня не работало нормально, поэтому я создал библиотеку 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.
Ключ Windows сам по себе, или вы пытаетесь зарегистрировать глобальную горячую клавишу? Если последнее, вы можете просто называть 'RegisterHotKey'. Обратите внимание, однако, что все горячие клавиши с использованием ключа Windows зарезервированы для использования Windows, поэтому ваш пробег может отличаться. –