SysFn02/ru: Difference between revisions

From KolibriOS wiki
Jump to navigation Jump to search
mNo edit summary
(Обновлена документация (актуальна на момент r9828).)
 
(One intermediate revision by the same user not shown)
Line 9: Line 9:
:* если буфер пуст, возвращается eax=1
:* если буфер пуст, возвращается eax=1
:* если буфер непуст, то возвращается al=0, ah=код нажатой клавиши,
:* если буфер непуст, то возвращается al=0, ah=код нажатой клавиши,
::старшее слово регистра eax обнулено
::биты 16-23 содержат сканкод нажатой клавиши в режиме ASCII,
:::в режиме сканкодов биты обнулены.
::биты 23-31 обнулены
:* если есть "горячая клавиша", то возвращается
:* если есть "горячая клавиша", то возвращается
::al=2, ah=сканкод нажатой клавиши (0 для управляющих клавиш),
::al=2, ah=сканкод нажатой клавиши (0 для управляющих клавиш),
Line 21: Line 23:
::считается, что буфер нажатых клавиш пуст.
::считается, что буфер нажатых клавиш пуст.
:* По умолчанию эта функция возвращает ASCII-коды; переключиться на
:* По умолчанию эта функция возвращает ASCII-коды; переключиться на
::режим сканкодов (и назад) можно с использованием функции 66.
::режим сканкодов (и назад) можно с использованием [[SysFn66/ru#.D0.9F.D0.BE.D0.B4.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D1.8F_1_-_.D1.83.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.B8.D1.82.D1.8C_.D1.80.D0.B5.D0.B6.D0.B8.D0.BC_.D0.B2.D0.B2.D0.BE.D0.B4.D0.B0_.D1.81_.D0.BA.D0.BB.D0.B0.D0.B2.D0.B8.D0.B0.D1.82.D1.83.D1.80.D1.8B.|подфункции 1 функции 66]].
::Однако, горячие клавиши всегда возвращаются как сканкоды.
::Однако, горячие клавиши всегда возвращаются как сканкоды.
:* Узнать, какие комбинации клавиш соответствуют каким кодам, можно,
:* Узнать, какие комбинации клавиш соответствуют каким кодам, можно,
::запустив приложения keyascii и scancode.
::запустив приложения [[Keyascii/ru|keyascii]] и scancode.
:* Сканкоды возвращаются непосредственно клавиатурой и фиксированы;
:* Сканкоды возвращаются непосредственно клавиатурой и фиксированы;
::ASCII-коды получаются с использованием таблиц преобразования,
::ASCII-коды получаются с использованием таблиц преобразования,
::которые можно установить подфункцией 2 функции 21 и прочитать
::которые можно установить [[SysFn21/ru#.D0.9F.D0.BE.D0.B4.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D1.8F_2_-_.D1.83.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.B8.D1.82.D1.8C_.D1.80.D0.B0.D1.81.D0.BA.D0.BB.D0.B0.D0.B4.D0.BA.D1.83_.D0.BA.D0.BB.D0.B0.D0.B2.D0.B8.D0.B0.D1.82.D1.83.D1.80.D1.8B.|подфункцией 2 функции 21]] и прочитать
::подфункцией 2 функции 26.
::[[SysFn26/ru#.D0.9F.D0.BE.D0.B4.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D1.8F_2_-_.D0.BF.D0.BE.D0.BB.D1.83.D1.87.D0.B8.D1.82.D1.8C_.D1.80.D0.B0.D1.81.D0.BA.D0.BB.D0.B0.D0.B4.D0.BA.D1.83_.D0.BA.D0.BB.D0.B0.D0.B2.D0.B8.D0.B0.D1.82.D1.83.D1.80.D1.8B.|подфункцией 2 функции 26]].
:* Как следствие, ASCII-коды учитывают текущую раскладку клавиатуры
:* Как следствие, ASCII-коды учитывают текущую раскладку клавиатуры
::(rus/en) в отличие от сканкодов.
::(rus/en) в отличие от сканкодов.
:* Поступает информация только о тех горячих клавишах, которые были
:* Поступает информация только о тех горячих клавишах, которые были
::определены этим потоком подфункцией 4 функции 66.
::определены этим потоком [[SysFn66/ru#.D0.9F.D0.BE.D0.B4.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D1.8F_4_-_.D1.83.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.B8.D1.82.D1.8C_.D0.BE.D0.B1.D1.89.D0.B5.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.BD.D1.83.D1.8E_.22.D0.B3.D0.BE.D1.80.D1.8F.D1.87.D1.83.D1.8E_.D0.BA.D0.BB.D0.B0.D0.B2.D0.B8.D1.88.D1.83.22.|подфункцией 4 функции 66]].


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

Latest revision as of 12:49, 4 June 2022

Функция 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)