Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++ и WinAPI

Войти
Регистрация
Восстановить пароль
 
chet_prod
0 / 0 / 0
Регистрация: 23.05.2015
Сообщений: 3
#1

HHOOK перехватывает только английские клавиши - C++ WinAPI

16.11.2016, 00:23. Просмотров 279. Ответов 3
Метки нет (Все метки)

Почему данная программа перехватывает только код английских клавиш вне зависимости от текущей раскладки?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include ...
 
using namespace std; 
string k_send = "";
DWORD vk;
HHOOK hook;
 
LRESULT CALLBACK LLKeyProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    
    if (nCode < 0)  
        return CallNextHookEx(NULL, nCode, wParam, lParam);
 
    if (wParam == WM_KEYDOWN) { //если клавиша нажата
        
        vk = ((KBDLLHOOKSTRUCT*)lParam)->vkCode;
         
        k_send += vk;
        cout << k_send << endl;
        
    }
 
    return CallNextHookEx(NULL, nCode, wParam, lParam);
 
    return FALSE;
    
     
}
 
int main()
{   
    hook = SetWindowsHookEx(WH_KEYBOARD_LL, LLKeyProc, GetModuleHandle(NULL), 0);
    if (hook)
    {
        
        while (WaitMessage())
        {
            MSG msg = { 0 };
            while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
            {               
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
               
    }
    
    return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2016, 00:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос HHOOK перехватывает только английские клавиши (C++ WinAPI):

В чём ошибка? HHOOK - C++ WinAPI
Здравствуйте. Почему не срабатывает этот код??? Окно консоли запускается,но действий кода нет. // ConsoleApplication3.cpp:...

Вывести на экран файлы, имена которых содержат только русские или только английские символы - CMD/BAT
Подскажите пожалуйста, как в командной строке вывести на экран файлы содержащие только русские символы, или только английские... конечно...

В input вводить только английские буквы? - HTML, CSS
Доброго времени суток. В общем нужно в input type=text разрешить ввод только английских букв (т.е. чтобы они туда даже не печатались)....

В input вводить только английские буквы - PHP
Доброго времени суток. В общем нужно в input type=text разрешить ввод только английских букв (т.е. чтобы они туда даже не печатались)....

Необходимо в строке удалить только английские буквы - VBA
Необходимо в строке удалить только английские буквы. Наиболее быстрый вариант. ываыCGHHGролио12 авывfds и т д в итоге: ...

Верно ли, что в тексте находятся только английские буквы? - Turbo Pascal
Текст задан последовательностью литер, за которыми идет '.' . Написать программу, которая определяет выполнено ли следующее условие: ...

3
Ghost Writter
52 / 52 / 14
Регистрация: 09.12.2015
Сообщений: 214
16.11.2016, 08:43 #2
chet_prod, гугл говорит что нужно использовать эту функцию
0
chet_prod
0 / 0 / 0
Регистрация: 23.05.2015
Сообщений: 3
16.11.2016, 17:04  [ТС] #3
Спасибо, вроде разобрался. Но теперь меня преследует другая проблема. При смене языка не изменяется язык хука. То есть если изначально русские, то и буквы все будут русские(так же и с англ.), изменение раскладки не спасает (даже если переключать мышкой на панели)
Пробовал ф-цию ToAsciiEx, не спасло.
Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
LRESULT CALLBACK LLKeyProc(int nCode, WPARAM wParam, LPARAM lParam)
{
 
    if (nCode < 0) 
        return CallNextHookEx(NULL, nCode, wParam, lParam);
 
    if (wParam == WM_KEYDOWN) { 
        byte keyState[256];
        setlocale(LC_ALL, "");
        GetKeyboardState(keyState);
        HKL hklLayout = GetKeyboardLayout(0);
        ToAsciiEx(((KBDLLHOOKSTRUCT*)lParam)->vkCode, ((KBDLLHOOKSTRUCT*)lParam)->scanCode, keyState, &key, 0, hklLayout);
        
            k_send += key;
            cout << "k_s = " << k_send;         
    }
0
Ghost Writter
52 / 52 / 14
Регистрация: 09.12.2015
Сообщений: 214
19.11.2016, 04:01 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
chet_prod, это ж winapi. Тут все надо самому обрабатывать)
1
19.11.2016, 04:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2016, 04:01
Привет! Вот еще темы с ответами:

Регулярное выражение где только числа и английские буквы доступны - PHP
Если через регулярку только числа это будет /^\d+$/i, то как добавить ещё английские буквы?

Из набора 10 любых символов напечатать только заглавные английские буквы и их коды - Pascal
из набора 10 любых символов напечатайть только заглавные английские буквы и их коды Добавлено через 25 секунд Срочно..

Прочитать текст из файла и вывести на экран только те слова которые содержат английские буквы - C#
Задача такова. что нужно прочитать текст из файла и вывести на экран только те слова которые содержат английские буквы. Помогите,очень...

KeyUp. Реакция только на клавиши символов - C#
Всем привет! Имеется несложная проблема, в принципе, знаю, как реализовать в лоб, но хочется поизящнее и менее &quot;нагрузно&quot;. Есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.