2010-07-17 4 views
1

Привет,Как перехватить ключ Windows под Windows 7?

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

Любые предложения относительно того, как вернуть эти ключи под Windows 7, очень ценятся!

Приветствия,

Рони

+0

Ключ Windows сам по себе, или вы пытаетесь зарегистрировать глобальную горячую клавишу? Если последнее, вы можете просто называть 'RegisterHotKey'. Обратите внимание, однако, что все горячие клавиши с использованием ключа Windows зарезервированы для использования Windows, поэтому ваш пробег может отличаться. –

ответ

1

Посмотрите на Win ядра SDK для Windows 7 и программировать «драйвер», которые зацепить это тоже.

+0

Спасибо, я посмотрю. Я надеялся, что есть менее болезненное решение, хотя ... – ronys

2

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

+0

У меня есть устройство vid и pid для некоторых сенсорных экранов, которые я хочу подключить/перехватить. Может ли ваша библиотека перехвата + использовать драйвер для их обнаружения? Или это ограничено мышами и клавиатурами? – phyatt

+0

@phyatt в настоящее время он ограничен мышами и клавиатурой извините. –

+0

Не беспокойтесь. Спасибо за ответ. – phyatt

Смежные вопросы