SysFn02/ru

From KolibriOS wiki
Revision as of 12:49, 4 June 2022 by Vitalkrilov (talk | contribs) (Обновлена документация (актуальна на момент r9828).)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Функция 2 - получить код нажатой клавиши


Забирает код нажатой клавиши из буфера. Параметры:

  • eax = 2 - номер функции

Возвращаемое значение:

  • если буфер пуст, возвращается eax=1
  • если буфер непуст, то возвращается al=0, ah=код нажатой клавиши,
биты 16-23 содержат сканкод нажатой клавиши в режиме ASCII,
в режиме сканкодов биты обнулены.
биты 23-31 обнулены
  • если есть "горячая клавиша", то возвращается
al=2, ah=сканкод нажатой клавиши (0 для управляющих клавиш),
старшее слово регистра eax содержит состояние управляющих клавиш
в момент нажатия горячей клавиши

Замечания:

  • Существует общесистемный буфер нажатых клавиш размером 120 байт,
организованный как очередь.
  • Существует ещё один общесистемный буфер на 120 "горячих клавиш".
  • При вызове этой функции приложением с неактивным окном
считается, что буфер нажатых клавиш пуст.
  • По умолчанию эта функция возвращает ASCII-коды; переключиться на
режим сканкодов (и назад) можно с использованием подфункции 1 функции 66.
Однако, горячие клавиши всегда возвращаются как сканкоды.
  • Узнать, какие комбинации клавиш соответствуют каким кодам, можно,
запустив приложения keyascii и scancode.
  • Сканкоды возвращаются непосредственно клавиатурой и фиксированы;
ASCII-коды получаются с использованием таблиц преобразования,
которые можно установить подфункцией 2 функции 21 и прочитать
подфункцией 2 функции 26.
  • Как следствие, ASCII-коды учитывают текущую раскладку клавиатуры
(rus/en) в отличие от сканкодов.
  • Поступает информация только о тех горячих клавишах, которые были
определены этим потоком подфункцией 4 функции 66.

Константы для регистров:

eax - SF_GET_KEY (2)