У меня пара вопросов про сочетания клавиш Windows, в которых задействованы буквы (например, Ctrl+C, Ctrl+V). Скажите, пожалуйста,
Вопрос 1: Такие сочетания клавиш работают независимо от выбранного языка ввода? (Если выбран русский язык ввода и пользователь нажимает Ctrl+V, то сочетание все равно работает.)
Вопрос 2: Если так, то это обеспечивается операционной системой или каждое приложение само должно заботиться об этом?
МР>У меня пара вопросов про сочетания клавиш Windows, в которых задействованы буквы (например, Ctrl+C, Ctrl+V). Скажите, пожалуйста,
МР>Вопрос 1: Такие сочетания клавиш работают независимо от выбранного языка ввода? (Если выбран русский язык ввода и пользователь нажимает Ctrl+V, то сочетание все равно работает.)
Для акселераторов есть флаг VirtualKey
МР>Вопрос 2: Если так, то это обеспечивается операционной системой или каждое приложение само должно заботиться об этом?
Здравствуйте, Marty, Вы писали:
МР>>Вопрос 2: Если так, то это обеспечивается операционной системой или каждое приложение само должно заботиться об этом? M>Само
Не само, а система обеспечивает.
Если зарегистрировать хоткей с помощью RegisterHotKey, то пофиг в какой раскладке жать на кнопку.
Там же виртуальные коды используются, от раскладки не зависит.
Здравствуйте, Максим Рогожин, Вы писали:
МР>Вопрос 1: Такие сочетания клавиш работают независимо от выбранного языка ввода? (Если выбран русский язык ввода и пользователь нажимает Ctrl+V, то сочетание все равно работает.)
При регистрации кнопки с помощью RegisterHotKey — нажатие не зависит от текущей раскладки
МР>Вопрос 2: Если так, то это обеспечивается операционной системой или каждое приложение само должно заботиться об этом?
Здравствуйте, Максим Рогожин, Вы писали:
МР>Вопрос 1: Такие сочетания клавиш работают независимо от выбранного языка ввода? (Если выбран русский язык ввода и пользователь нажимает Ctrl+V, то сочетание все равно работает.)
Приложение ловит WM_KEYDOWN в котором приходит scan code — код клавиши независимо от языка.
on WM_KEYDOWN:
if( GetKeyState() && VK_CONTROL ) {
switch( wParam ) {
case VK_C: ....
case VK_X: ....
}
}
Интересно, а почему не работает в случае с Диспетчером задач и Блокнотом? Например, запускаю Диспетчер задач, нажимаю Alt, при этом появляется подчерк под буквой Ф в слове Файл (меню Диспетчера задач), если язык включен русский, то нажатие Alt+Ф работает, а если включен английский, то нажатие Alt+Ф (Alt+A) уже не работает.
Здравствуйте, Максим Рогожин, Вы писали:
МР>Интересно, а почему не работает в случае с Диспетчером задач и Блокнотом? Например, запускаю Диспетчер задач, нажимаю Alt, при этом появляется подчерк под буквой Ф в слове Файл (меню Диспетчера задач), если язык включен русский, то нажатие Alt+Ф работает, а если включен английский, то нажатие Alt+Ф (Alt+A) уже не работает.
Полагаю, акселераторы меню немного иначе работают, это не hotkey.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Здравствуйте, Ops, Вы писали:
Ops>Здравствуйте, Максим Рогожин, Вы писали:
МР>>Интересно, а почему не работает в случае с Диспетчером задач и Блокнотом? Например, запускаю Диспетчер задач, нажимаю Alt, при этом появляется подчерк под буквой Ф в слове Файл (меню Диспетчера задач), если язык включен русский, то нажатие Alt+Ф работает, а если включен английский, то нажатие Alt+Ф (Alt+A) уже не работает.
Ops>Полагаю, акселераторы меню немного иначе работают, это не hotkey.
У акселератора в Windows есть флажок VIRTUALKEY (см. структуру ACCEL).
Если он стоит, то используется scan code клавиши, который не зависит от текущей языковой раскладки.
Если флажок не установлен, то используется char code, т.е. значение TCHAR, приходящее в сообщении WM_CHAR/WM_SYSCHAR.
Во втором случае результат зависит от активной раскладки клавиатуры.