Difference between revisions of "SysFn66/ru"

From KolibriOS wiki
Jump to navigation Jump to search
 
Line 1: Line 1:
'''Функция 66 - работа с клавиатурой.'''
+
'''Функция 66''' - работа с клавиатурой.
  
Режим ввода влияет на результаты чтения клавиш функцией 2.
+
Режим ввода влияет на результаты чтения клавиш [[SysFn02/ru|функцией 2]].
 
При загрузке программы для неё устанавливается ASCII-режим ввода.
 
При загрузке программы для неё устанавливается ASCII-режим ввода.
  
 
=== Подфункция 1 - установить режим ввода с клавиатуры. ===
 
=== Подфункция 1 - установить режим ввода с клавиатуры. ===
  
'''Параметры:'''
+
''Параметры:''
 
+
:* eax = 66 - номер функции
* eax = 66 - номер функции
+
:* ebx = 1 - номер подфункции
* ebx = 1 - номер подфункции
+
:* ecx = режим:
* ecx = режим:
+
:** 0 = обычный (ASCII-символы)
** 0 = обычный (ASCII-символы)
+
:** 1 = сканкоды
** 1 = сканкоды
 
  
 
''Возвращаемое значение:''
 
''Возвращаемое значение:''
 +
:* функция не возвращает значения
  
* функция не возвращает значения
+
'''Константы для регистров:'''
 +
::eax - SF_KEYBOARD (66)
 +
::ebx - SSF_SET_INPUT_MODE (1)
  
 
=== Подфункция 2 - получить режим ввода с клавиатуры. ===
 
=== Подфункция 2 - получить режим ввода с клавиатуры. ===
  
 
''Параметры:''
 
''Параметры:''
 
+
:* eax = 66 - номер функции
* eax = 66 - номер функции
+
:* ebx = 2 - номер подфункции
* ebx = 2 - номер подфункции
 
  
 
''Возвращаемое значение:''
 
''Возвращаемое значение:''
 +
:* eax = текущий режим
  
* eax = текущий режим
+
'''Константы для регистров:'''
 +
::eax - SF_KEYBOARD (66)
 +
::ebx - SSF_GET_INPUT_MODE (2)
  
 
=== Подфункция 3 - получить состояние управляющих клавиш. ===
 
=== Подфункция 3 - получить состояние управляющих клавиш. ===
  
'''Параметры:'''
+
''Параметры:''
 +
:* eax = 66 - номер функции
 +
:* ebx = 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 включён
 +
::* прочие биты сброшены
  
'''Возвращаемое значение:'''
+
'''Константы для регистров:'''
 
+
::eax - SF_KEYBOARD (66)
* eax = битовая маска:
+
::ebx - SSF_GET_CONTROL_KEYS (3)
* бит 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 - установить общесистемную "горячую клавишу". ===
 
=== Подфункция 4 - установить общесистемную "горячую клавишу". ===
Line 57: Line 63:
 
Извещение заключается в посылке события с кодом 2.
 
Извещение заключается в посылке события с кодом 2.
 
Прочитать "горячую клавишу" можно так же, как и обычную, -
 
Прочитать "горячую клавишу" можно так же, как и обычную, -
функцией 2.
+
[[SysFn02/ru|функцией 2]].
  
 
''Параметры:''
 
''Параметры:''
 
+
:* eax = 66 - номер функции
* eax = 66 - номер функции
+
:* ebx = 4 - номер подфункции
* ebx = 4 - номер подфункции
+
::* cl задаёт сканкод клавиши; используйте cl=0 для задания комбинаций типа Ctrl+Shift
** cl задаёт сканкод клавиши; используйте cl=0 для задания комбинаций типа Ctrl+Shift
+
:* edx = 0xXYZ задаёт возможные состояния управляющих клавиш:
* edx = 0xXYZ задаёт возможные состояния управляющих клавиш:
+
::* Z (младшие 4 бита) задаёт состояние клавиш LShift и RShift:
** Z (младшие 4 бита) задаёт состояние клавиш LShift и RShift:
+
:::* 0 = ни одна из клавиш не должна быть нажата;
*** 0 = ни одна из клавиш не должна быть нажата;
+
:::* 1 = ровно одна из клавиш должна быть нажата;
*** 1 = ровно одна из клавиш должна быть нажата;
+
:::* 2 = обе клавиши должны быть нажаты;
*** 2 = обе клавиши должны быть нажаты;
+
:::* 3 = должна быть нажата LShift, но не RShift;
*** 3 = должна быть нажата LShift, но не RShift;
+
:::* 4 = должна быть нажата RShift, но не LShift
*** 4 = должна быть нажата RShift, но не LShift
+
::* Y - аналогично для LCtrl и RCtrl;
** Y - аналогично для LCtrl и RCtrl;
+
::* X - аналогично для LAlt и RAlt
** X - аналогично для LAlt и RAlt
 
  
 
''Возвращаемое значение:''
 
''Возвращаемое значение:''
 
+
:* eax=0 - успешно
* eax=0 - успешно
+
:* eax=1 - слишком много "горячих клавиш" (допускается максимум 256)
* eax=1 - слишком много "горячих клавиш" (допускается максимум 256)
 
  
 
''Замечания:''
 
''Замечания:''
 +
:* Горячая клавиша может срабатывать либо при нажатии, либо при отпускании. Сканкод отпускания клавиши на 128 больше, чем сканкод нажатия (т.е. установлен старший бит).
 +
:* Несколько приложений могут установить одну и ту же комбинацию; о нажатии такой комбинации будут извещаться все такие приложения.
  
* Горячая клавиша может срабатывать либо при нажатии, либо при отпускании. Сканкод отпускания клавиши на 128 больше, чем сканкод нажатия (т.е. установлен старший бит).
+
'''Константы для регистров:'''
* Несколько приложений могут установить одну и ту же комбинацию; о нажатии такой комбинации будут извещаться все такие приложения.
+
::eax - SF_KEYBOARD (66)
 +
::ebx - SSF_SET_SYS_HOTKEY (4)
  
 
=== Подфункция 5 - удалить установленную "горячую клавишу". ===
 
=== Подфункция 5 - удалить установленную "горячую клавишу". ===
  
 
''Параметры:''
 
''Параметры:''
 
+
:* eax = 66 - номер функции
* eax = 66 - номер функции
+
:* ebx = 5 - номер подфункции
* ebx = 5 - номер подфункции
+
:* cl = сканкод клавиши и edx = 0xXYZ такие же, как и в подфункции 4
* cl = сканкод клавиши и edx = 0xXYZ такие же, как и в подфункции 4
 
  
 
''Возвращаемое значение:''
 
''Возвращаемое значение:''
 
+
:* eax = 0 - успешно
* eax = 0 - успешно
+
:* eax = 1 - нет такой горячей клавиши
* eax = 1 - нет такой горячей клавиши
 
  
 
''Замечания:''
 
''Замечания:''
 +
:* При завершении процесса/потока удаляются все установленные им горячие клавиши.
 +
:* Вызов функции не влияет на другие приложения. Если другое приложение определило эту же комбинацию, оно по-прежнему будет получать уведомления.
  
* При завершении процесса/потока удаляются все установленные им горячие клавиши.
+
'''Константы для регистров:'''
* Вызов функции не влияет на другие приложения. Если другое приложение определило эту же комбинацию, оно по-прежнему будет получать уведомления.
+
::eax - SF_KEYBOARD (66)
 +
::ebx - SSF_DEL_SYS_HOTKEY (5)
  
 
=== Подфункция 6 - заблокировать обычный ввод. ===
 
=== Подфункция 6 - заблокировать обычный ввод. ===
Параметры:
+
 
* eax = 66 - номер функции
+
''Параметры:''
* ebx = 6 - номер подфункции
+
:* eax = 66 - номер функции
Возвращаемое значение:
+
:* ebx = 6 - номер подфункции
* функция не возвращает значения
+
 
Замечания:
+
''Возвращаемое значение:''
* Блокируется обычный ввод данных с клавиатуры для установленных "горячих" клавиш
+
:* функция не возвращает значения
* Для эмуляции мыши через клавиатуру, приложение MOUSEMUL
+
 
 +
''Замечания:''
 +
:* Блокируется обычный ввод данных с клавиатуры для установленных "горячих" клавиш
 +
:* Для эмуляции мыши через клавиатуру, приложение [[Mousemul/ru|MOUSEMUL]]
 +
 
 +
'''Константы для регистров:'''
 +
::eax - SF_KEYBOARD (66)
 +
::ebx - SSF_LOCK_INPUT (6)
  
 
=== Подфункция 7 - разблокировать обычный ввод. ===
 
=== Подфункция 7 - разблокировать обычный ввод. ===
Параметры:
+
 
* eax = 66 - номер функции
+
''Параметры:''
* ebx = 7 - номер подфункции
+
:* eax = 66 - номер функции
Возвращаемое значение:
+
:* ebx = 7 - номер подфункции
* функция не возвращает значения
+
 
Замечания:
+
''Возвращаемое значение:''
* Разблокирование результатов ф. 66.6
+
:* функция не возвращает значения
* Для эмуляции мыши через клавиатуру, приложение MOUSEMUL
+
 
 +
''Замечания:''
 +
:* Разблокирование результатов ф. 66.6
 +
:* Для эмуляции мыши через клавиатуру, приложение [[Mousemul/ru|MOUSEMUL]]
 +
 
 +
'''Константы для регистров:'''
 +
::eax - SF_KEYBOARD (66)
 +
::ebx - SSF_UNLOCK_INPUT (7)
 +
 
 
{{System_functions}}
 
{{System_functions}}
 
[[Category: SysCalls]]
 
[[Category: SysCalls]]

Latest revision as of 13:11, 21 January 2016

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

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

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

Параметры:

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

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

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

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

eax - SF_KEYBOARD (66)
ebx - SSF_SET_INPUT_MODE (1)

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

Параметры:

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

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

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

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

eax - SF_KEYBOARD (66)
ebx - SSF_GET_INPUT_MODE (2)

Подфункция 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 включён
  • прочие биты сброшены

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

eax - SF_KEYBOARD (66)
ebx - SSF_GET_CONTROL_KEYS (3)

Подфункция 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 больше, чем сканкод нажатия (т.е. установлен старший бит).
  • Несколько приложений могут установить одну и ту же комбинацию; о нажатии такой комбинации будут извещаться все такие приложения.

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

eax - SF_KEYBOARD (66)
ebx - SSF_SET_SYS_HOTKEY (4)

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

Параметры:

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

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

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

Замечания:

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

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

eax - SF_KEYBOARD (66)
ebx - SSF_DEL_SYS_HOTKEY (5)

Подфункция 6 - заблокировать обычный ввод.

Параметры:

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

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

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

Замечания:

  • Блокируется обычный ввод данных с клавиатуры для установленных "горячих" клавиш
  • Для эмуляции мыши через клавиатуру, приложение MOUSEMUL

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

eax - SF_KEYBOARD (66)
ebx - SSF_LOCK_INPUT (6)

Подфункция 7 - разблокировать обычный ввод.

Параметры:

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

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

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

Замечания:

  • Разблокирование результатов ф. 66.6
  • Для эмуляции мыши через клавиатуру, приложение MOUSEMUL

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

eax - SF_KEYBOARD (66)
ebx - SSF_UNLOCK_INPUT (7)