2017-01-21 20 views
0

я схватил ключ с XGrabKey:Если во время печати и удерживая клавишу схватился, остальные клавиши также «схватился»

int mods = 0; 
bool ownerevents = true; 
XGrabKey(display, MY_KEYCODE, mods, rootwin, ownerevents, GrabModeAsync, GrabModeAsync); 

Он успешно захватывает ключ. В моем примере MY_KEYCODE - это номер ключа b. Итак, теперь мой цикл событий подбирается, только если я нажимаю клавишу b. ОДНАКО, если я удерживаю клавишу b, а затем нажимаю другие клавиши, они также сообщаются в мой цикл событий и также блокируются, поэтому «схватываются» временно. Я думал попробовать XAllowEvents в части KeyPressed, но он не работает.

Есть ли у кого-нибудь идеи о том, как получить другие ключи, в то время как мой захваченный ключ удерживается, чтобы успешно пройти через ungrabbed?

+1

Нет, это невозможно. Как только нажатая клавиша нажата, вся клавиатура захватывается до тех пор, пока ключ не будет отпущен. Что ты пытаешься сделать? –

+0

Спасибо @ н.м. для чтения и комментариев! Как приложения работают там, где они отправляют другой ключ, когда я нажимаю одну клавишу. Например, если я нажму «e», он должен отправить «a». Они отправляют его на «KeyRelease»? – Noitidart

+1

Обычно это делается с переназначением ключа. –

ответ

1

Невозможно сделать то, что вам нужно. Как только нажатая клавиша нажата, вся клавиатура захватывается до тех пор, пока ключ не будет отпущен.

Если вы хотите программно глобально заменить ключ, связанный с ключом, это обычно делается с помощью переназначения ключей. См. XChangeKeyboardMapping и XkbChangeMap.

Если вы просто хотите переназначить ключ навсегда и не волнует, как это делается, вы, вероятно, захотите написать/изменить конфигурационный файл и вообще не заниматься программированием. См. xmodmap и xkbcomp.

+0

Большое спасибо @ n.m.! – Noitidart

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

  • Нет связанных вопросов^_^