SysFn02/ru: Difference between revisions

From KolibriOS wiki
Jump to navigation Jump to search
No edit summary
(Обновлена документация (актуальна на момент r9828).)
 
(2 intermediate revisions by 2 users 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]].


'''Константы для регистров:'''
::eax - SF_GET_KEY (2)


{{System_functions}}
{{System_functions}}
[[Category: SysCalls]]
[[Category: SysCalls]]

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)