SysFn66/ru

From KolibriOS wiki
Jump to navigation Jump to search

Функция 66 - работа с клавиатурой.

Режим ввода влияет на результаты чтения клавиш функцией 2. При загрузке программы для неё устанавливается ASCII-режим ввода.

Подфункция 1 - установить режим ввода с клавиатуры.

Параметры:

  • eax = 66 - номер функции
  • ebx = 1 - номер подфункции
  • ecx = режим:
    • 0 = обычный (ASCII-символы)
    • 1 = сканкоды

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

  • функция не возвращает значения

Подфункция 2 - получить режим ввода с клавиатуры.

Параметры:

  • eax = 66 - номер функции
  • ebx = 2 - номер подфункции

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

  • eax = текущий режим

Подфункция 3 - получить состояние управляющих клавиш.

Параметры:

  • eax = 66 - номер функции
  • ebx = 3 - номер подфункции

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

  • eax = битовая маска:
  • бит 0 (маска 1): левый Shift нажат
  • бит 1 (маска 2): правый Shift нажат
  • бит 2 (маска 4): левый Ctrl нажат
  • бит 3 (маска 8): правый Ctrl нажат
  • бит 4 (маска 0x10): левый Alt нажат
  • бит 5 (маска 0x20): правый Alt нажат
  • бит 6 (маска 0x40): CapsLock включён
  • бит 7 (маска 0x80): NumLock включён
  • бит 8 (маска 0x100): ScrollLock включён
  • прочие биты сброшены

Подфункция 4 - установить общесистемную "горячую клавишу".

О нажатии "горячей клавиши" извещаются только приложения, установившие её; активное приложение (к которому поступает весь нормальный ввод) таких клавиш не получает. Извещение заключается в посылке события с кодом 2. Прочитать "горячую клавишу" можно так же, как и обычную, - функцией 2. Параметры:

 * eax = 66 - номер функции
 * ebx = 4 - номер подфункции
 * cl задаёт сканкод клавиши;
   используйте cl=0 для задания комбинаций типа Ctrl+Shift
 * edx = 0xXYZ задаёт возможные состояния управляющих клавиш:
   * Z (младшие 4 бита) задаёт состояние клавиш LShift и RShift:
     * 0 = ни одна из клавиш не должна быть нажата;
     * 1 = ровно одна из клавиш должна быть нажата;
     * 2 = обе клавиши должны быть нажаты;
     * 3 = должна быть нажата LShift, но не RShift;
     * 4 = должна быть нажата RShift, но не LShift
   * Y - аналогично для LCtrl и RCtrl;
   * X - аналогично для LAlt и RAlt

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

 * eax=0 - успешно
 * eax=1 - слишком много "горячих клавиш" (допускается максимум 256)

Замечания:

 * Горячая клавиша может срабатывать либо при нажатии,
   либо при отпускании. Сканкод отпускания клавиши на 128 больше,
   чем сканкод нажатия (т.е. установлен старший бит).
 * Несколько приложений могут установить одну и ту же комбинацию;
   о нажатии такой комбинации будут извещаться все такие приложения.

Подфункция 5 - удалить установленную "горячую клавишу".

Параметры:

 * eax = 66 - номер функции
 * ebx = 5 - номер подфункции
 * cl = сканкод клавиши и edx = 0xXYZ такие же, как и в подфункции 4

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

 * eax = 0 - успешно
 * eax = 1 - нет такой горячей клавиши

Замечания:

 * При завершении процесса/потока удаляются все установленные им
   горячие клавиши.
 * Вызов функции не влияет на другие приложения.
   Если другое приложение определило эту же комбинацию,
   оно по-прежнему будет получать уведомления.