Difference between revisions of "SysFn66/ru"
(4 intermediate revisions by 2 users not shown) | |||
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 - номер функции | ||
+ | :* ebx = 5 - номер подфункции | ||
+ | :* cl = сканкод клавиши и edx = 0xXYZ такие же, как и в подфункции 4 | ||
+ | |||
+ | ''Возвращаемое значение:'' | ||
+ | :* eax = 0 - успешно | ||
+ | :* eax = 1 - нет такой горячей клавиши | ||
− | * eax = 66 - номер функции | + | ''Замечания:'' |
− | * ebx = | + | :* При завершении процесса/потока удаляются все установленные им горячие клавиши. |
− | + | :* Вызов функции не влияет на другие приложения. Если другое приложение определило эту же комбинацию, оно по-прежнему будет получать уведомления. | |
+ | |||
+ | '''Константы для регистров:''' | ||
+ | ::eax - SF_KEYBOARD (66) | ||
+ | ::ebx - SSF_DEL_SYS_HOTKEY (5) | ||
+ | |||
+ | === Подфункция 6 - заблокировать обычный ввод. === | ||
+ | |||
+ | ''Параметры:'' | ||
+ | :* eax = 66 - номер функции | ||
+ | :* ebx = 6 - номер подфункции | ||
''Возвращаемое значение:'' | ''Возвращаемое значение:'' | ||
+ | :* функция не возвращает значения | ||
+ | |||
+ | ''Замечания:'' | ||
+ | :* Блокируется обычный ввод данных с клавиатуры для установленных "горячих" клавиш | ||
+ | :* Для эмуляции мыши через клавиатуру, приложение [[Mousemul/ru|MOUSEMUL]] | ||
− | * eax = | + | '''Константы для регистров:''' |
− | * | + | ::eax - SF_KEYBOARD (66) |
+ | ::ebx - SSF_LOCK_INPUT (6) | ||
+ | |||
+ | === Подфункция 7 - разблокировать обычный ввод. === | ||
+ | |||
+ | ''Параметры:'' | ||
+ | :* eax = 66 - номер функции | ||
+ | :* ebx = 7 - номер подфункции | ||
+ | |||
+ | ''Возвращаемое значение:'' | ||
+ | :* функция не возвращает значения | ||
''Замечания:'' | ''Замечания:'' | ||
+ | :* Разблокирование результатов ф. 66.6 | ||
+ | :* Для эмуляции мыши через клавиатуру, приложение [[Mousemul/ru|MOUSEMUL]] | ||
+ | |||
+ | '''Константы для регистров:''' | ||
+ | ::eax - SF_KEYBOARD (66) | ||
+ | ::ebx - SSF_UNLOCK_INPUT (7) | ||
− | + | {{System_functions}} | |
− | + | [[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)
|