SysFn66/ru: Difference between revisions
Jump to navigation
Jump to search
Line 51: | Line 51: | ||
=== Подфункция 4 - установить общесистемную "горячую клавишу". === | === Подфункция 4 - установить общесистемную "горячую клавишу". === | ||
О нажатии "горячей клавиши" извещаются только приложения, | О нажатии "горячей клавиши" извещаются только приложения, | ||
установившие её; активное приложение (к которому поступает | установившие её; активное приложение (к которому поступает | ||
Line 57: | Line 58: | ||
Прочитать "горячую клавишу" можно так же, как и обычную, - | Прочитать "горячую клавишу" можно так же, как и обычную, - | ||
функцией 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 - удалить установленную "горячую клавишу". === | === Подфункция 5 - удалить установленную "горячую клавишу". === |
Revision as of 07:22, 10 April 2010
Функция 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
- Z (младшие 4 бита) задаёт состояние клавиш LShift и RShift:
Возвращаемое значение:
- eax=0 - успешно
- eax=1 - слишком много "горячих клавиш" (допускается максимум 256)
Замечания:
- Горячая клавиша может срабатывать либо при нажатии, либо при отпускании. Сканкод отпускания клавиши на 128 больше, чем сканкод нажатия (т.е. установлен старший бит).
- Несколько приложений могут установить одну и ту же комбинацию; о нажатии такой комбинации будут извещаться все такие приложения.
Подфункция 5 - удалить установленную "горячую клавишу".
Параметры:
* eax = 66 - номер функции * ebx = 5 - номер подфункции * cl = сканкод клавиши и edx = 0xXYZ такие же, как и в подфункции 4
Возвращаемое значение:
* eax = 0 - успешно * eax = 1 - нет такой горячей клавиши
Замечания:
* При завершении процесса/потока удаляются все установленные им горячие клавиши. * Вызов функции не влияет на другие приложения. Если другое приложение определило эту же комбинацию, оно по-прежнему будет получать уведомления.