SysFn66/ru: Difference between revisions
Punk Joker (talk | contribs) |
No edit summary |
||
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 - SF_KEYBOARD (66) | |||
::ebx - SSF_GET_INPUT_MODE (2) | |||
=== Подфункция 3 - получить состояние управляющих клавиш. === | === Подфункция 3 - получить состояние управляющих клавиш. === | ||
''Параметры:'' | |||
:* eax = 66 - номер функции | |||
:* ebx = 3 - номер подфункции | |||
* eax = | ''Возвращаемое значение:'' | ||
* | :* 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 - установить общесистемную "горячую клавишу". === | === Подфункция 4 - установить общесистемную "горячую клавишу". === | ||
Line 57: | Line 63: | ||
Извещение заключается в посылке события с кодом 2. | Извещение заключается в посылке события с кодом 2. | ||
Прочитать "горячую клавишу" можно так же, как и обычную, - | Прочитать "горячую клавишу" можно так же, как и обычную, - | ||
функцией 2. | [[SysFn02/ru|функцией 2]]. | ||
''Параметры:'' | ''Параметры:'' | ||
:* eax = 66 - номер функции | |||
* eax = 66 - номер функции | :* ebx = 4 - номер подфункции | ||
* ebx = 4 - номер подфункции | ::* cl задаёт сканкод клавиши; используйте cl=0 для задания комбинаций типа Ctrl+Shift | ||
:* edx = 0xXYZ задаёт возможные состояния управляющих клавиш: | |||
* edx = 0xXYZ задаёт возможные состояния управляющих клавиш: | ::* Z (младшие 4 бита) задаёт состояние клавиш LShift и RShift: | ||
:::* 0 = ни одна из клавиш не должна быть нажата; | |||
:::* 1 = ровно одна из клавиш должна быть нажата; | |||
:::* 2 = обе клавиши должны быть нажаты; | |||
:::* 3 = должна быть нажата LShift, но не RShift; | |||
:::* 4 = должна быть нажата RShift, но не LShift | |||
::* Y - аналогично для LCtrl и RCtrl; | |||
::* X - аналогично для LAlt и RAlt | |||
''Возвращаемое значение:'' | ''Возвращаемое значение:'' | ||
:* eax=0 - успешно | |||
* eax=0 - успешно | :* eax=1 - слишком много "горячих клавиш" (допускается максимум 256) | ||
* eax=1 - слишком много "горячих клавиш" (допускается максимум 256) | |||
''Замечания:'' | ''Замечания:'' | ||
:* Горячая клавиша может срабатывать либо при нажатии, либо при отпускании. Сканкод отпускания клавиши на 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)
|