Инструменты пользователя

Инструменты сайта


xgrabkey_demo:xgrabkey

XGrabKey

// https://stackoverflow.com/questions/30994628/why-does-xgrabkey-return-badrequest
 
uses
xlib,
keysym,
x;
 
var
d :  PXDisplay;
root : TWindow;
keycode, rv : Int64;
evt : TXEvent;
 
begin
d := XOpenDisplay(nil);
root := DefaultRootWindow(d);
keycode := XKeysymToKeycode(d, XK_BackSpace);
 
rv := XGrabKey(d, keycode, AnyModifier, root, 1, GrabModeAsync, GrabModeAsync);
writeln('XGrabKey returned');
writeln(rv);
 
    while true do begin
        XNextEvent(d, @evt);
        writeln('Got event');
        writeln(evt._type);
    end;
end.

https://docstore.mik.ua/manuals/ru/xtoolkit/x-2-3-1-2.html

Физические и логические коды клавиш.

Коды, передаваемые через поле keycode структуры XKeyEvent, однозначно идентифицируют клавиши. Их конкретные значения зависят от типа машины и клавиатуры. Эти коды мы будем называть физическими. Чтобы обеспечить переносимость программ, сервер устанавливает соответствие между физическими кодами клавиш, которые могут меняться от компьютера к компьютеру, и целочисленными константами - логическими кодами (символами). Они имеют предопределенные значения, которые приведены в файле «Keysymdef.h» и начинаются с префикса «XK_». Так букве «a» соответствует символ XK_a, клавише () - символ XK_Return и т.д. Для разных алфавитов X поддерживает разные множества логических кодов. Возможные типы алфавитов перечисляются в файле «Keysym.h». Одному коду клавиши может соответствовать несколько символов в зависимости от состояния клавиш - модификаторов. Процедура

KeySym XKeycodeToKeysym (Display* prDisplay, KeyCode nKeycode, int nIndex);

позволяет по коду nKeyCode получить соответствующий ему символ с номером nIndex. Если nIndex равен 0, то полученный символ соответствует просто нажатой клавише. Если nIndex равен 1, то возвращается символ, соответствующий ситуации, когда клавиша нажата одновременно с Shift. Функция XKeysymToKeycode( ) осуществляет обратное преобразование. Программа может получить карту соответствия кодов и символов, обратившись к процедуре XGetKeyboardMapping( ). Изменяется соответствие физических и логических кодов процедурой XChangeKeyboardMapping( ). Следующая последовательность операторов ставит клавише в соответствие символ XK_F3.

 ........ Keysym nF2Sym, nF3Sym; int nF2Keycode; Display *prDisplay; ........ nF2Sym = XStringToKeysym ("F2"); nF3Sym = XStringToKeysym ("F3"); nF2Keycode = XKeysymToKeycode (prDisplay, nF2Sym); XChangeKeyboardMapping (prDisplay, nF2Keycode, 1, &nF3Sym, 1); ........ 

Здесь использована процедура XStringToKeysym( ), которая по строке «str» возвращает соответствующий символ XK_str. Когда соответствие кодов меняется, всем работающим в настоящее время клиентам посылается событие MappingNotify. Клавиши-модификаторы также имеют логические коды. Клавишам Shift сопоставлены символы XK_Shift_L и XK_Shift_R; Caps Look соответствует XK_Caps Look; Control - XK_Control_L; Mod1 - XK_Meta_L и XK_Meta_R. Символы остальных модификаторов (Mod2 - Mod5) не определены. X содержит набор специальных процедур, которые позволяют получить и установить соответствие код-символ (ы) для модификаторов. Эти функции следующие: XGetModifierMapping( ), XInsertModifiermapEntry( ), XDeleteModifiermapEntry( ), XSetModifierMapping( ). Подробное их описание выходит за рамки настоящего издания ( см. подробнее, например [8] ). https://docstore.mik.ua/manuals/ru/xtoolkit/x-2-3-1-2.html

xgrabkey_demo/xgrabkey.txt · Последнее изменение: 2022/07/03 07:03 — dwadmin

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: GNU Free Documentation License 1.3
GNU Free Documentation License 1.3 Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki