Как перехватить ключ Windows под Windows 7? - PullRequest
1 голос
/ 17 июля 2010

Привет,

Я реализовал низкоуровневый хук клавиатуры, как описано здесь .Это прекрасно работает под WinXP.Проблема в том, что под Windows 7 левая и правая клавиши Windows больше не перехватываются.

Любые предложения о том, как вернуть эти клавиши под Windows 7, очень приветствуются!1010 * Rony

Ответы [ 2 ]

3 голосов
/ 13 января 2012

Я построил библиотеку, потому что в некоторых случаях у меня не работало обычное перехватывание, поэтому я собрал библиотеку переменного тока для связи с драйверами фильтров под капотом для выполнения перехвата ввода устройства.Вот пример того, как получить ключ 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 голос
/ 17 июля 2010

Взгляните на Win Kernel SDK для Windows 7 и запрограммируйте «драйвер», который тоже подключается.

...