SysFn18/ru: Difference between revisions

From KolibriOS wiki
Jump to navigation Jump to search
mNo edit summary
Line 67: Line 67:


=== Подфункция 7 - получить номер активного окна. ===
=== Подфункция 7 - получить номер активного окна. ===
Параметры:
Параметры:
* eax = 18 - номер функции
:* eax = 18 - номер функции
* ebx = 7 - номер подфункции
:* ebx = 7 - номер подфункции
Возвращаемое значение:
Возвращаемое значение:
* eax = номер активного окна (номер слота потока, окно которого активно)
:* eax = номер активного окна (номер слота потока, окно которого
::активно)
Замечания:
Замечания:
* Активное окно находится вверху оконного стэка и получает сообщения обо всём вводе с клавиатуры.
:* Активное окно находится вверху оконного стэка и получает
* Сделать окно активным можно вызовом подфункции 3.
::сообщения обо всём вводе с клавиатуры.
:* Сделать окно активным можно вызовом подфункции 3.


=== Подфункция 8 - отключить/разрешить звук спикера. ===
=== Подфункция 8 - отключить/разрешить звук спикера. ===

Revision as of 08:52, 16 December 2013

Функция 18 -


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

Введена в ревизии 2244

Параметры:

  • eax = 18 - номер функции
  • ebx = 1 - номер подфункции
  • ecx = номер слота процесса/потока

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

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

Подфункция 2 - завершить процесс/поток по слоту.

Параметры:

  • eax = 18 - номер функции
  • ebx = 2 - номер подфункции
  • ecx = номер слота процесса/потока

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

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

Замечания:

  • Нельзя завершить поток операционной системы OS/IDLE (номер слота 1), можно завершить любой обычный поток/процесс.
  • Смотри также подфункцию 18 - завершение процесса/потока с заданным идентификатором.

Подфункция 3 - сделать активным окно заданного потока.

Параметры:

  • eax = 18 - номер функции
  • ebx = 3 - номер подфункции
  • ecx = номер слота потока

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

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

Замечания:

  • При указании корректного, но несуществующего слота активизируется какое-то окно.
  • Узнать, какое окно является активным, можно вызовом подфункции 7.

Подфункция 4 - получить счётчик пустых тактов в секунду.

Под пустыми тактами понимается время, в которое процессор простаивает в ожидании прерывания (в инструкции hlt).

Параметры:

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

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

  • eax = значение счётчика пустых тактов в секунду

Подфункция 5 - получить тактовую частоту.

Параметры:

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

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

  • eax = тактовая частота (по модулю 2^32 тактов = 4ГГц)

Подфункция 6 - сохранить рамдиск в файл на жёстком диске.

Параметры:

  • eax = 18 - номер функции
  • ebx = 6 - номер подфункции
  • ecx = указатель на строку с полным именем файла (например, "/hd0/1/kolibri/kolibri.img")

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

  • eax = 0 - успешно
  • иначе eax = код ошибки файловой системы

Замечания:

  • Все папки в указанном пути должны существовать, иначе вернётся значение 5, "файл не найден".

Подфункция 7 - получить номер активного окна.

Параметры:

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

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

  • eax = номер активного окна (номер слота потока, окно которого
активно)

Замечания:

  • Активное окно находится вверху оконного стэка и получает
сообщения обо всём вводе с клавиатуры.
  • Сделать окно активным можно вызовом подфункции 3.

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

При отключённом звуке вызовы подфункции 55 функции 55 игнорируются. При включённом - направляются на встроенный спикер.

Подподфункция 1 - получить состояние.

Параметры:

  • eax = 18 - номер функции
  • ebx = 8 - номер подфункции
  • ecx = 1 - номер подподфункции

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

  • eax = 0 - звук спикера разрешён; 1 - запрещён

Подподфункция 2 - переключить состояние.

Переключает состояния разрешения/запрещения. Параметры:

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

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

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

Подфункция 9 - завершение работы системы

Параметры:

  • eax = 18 - номер функции
  • ebx = 9 - номер подфункции
  • ecx = параметр:
    • 2 = выключить компьютер
    • 3 = перезагрузить компьютер
    • 4 = перезапустить ядро из файла kernel.mnt на рамдиске

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

  • при неверном ecx регистры не меняются (т.е. eax=18)
  • при правильном вызове всегда возвращается признак успеха eax=0

Замечания:

  • Не следует полагаться на возвращаемое значение при неверном вызове, оно может измениться в последующих версиях ядра.

Подфункция 10 - свернуть окно приложения.

Сворачивает собственное окно.

Параметры:

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

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

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

Замечания:

  • Минимизированное окно с точки зрения функции 9 сохраняет положение и размеры.
  • Восстановление окна приложения происходит при активизировании подфункцией 3.
  • Обычно нет необходимости явно сворачивать/разворачивать своё окно: сворачивание окна осуществляется системой при нажатии на кнопку минимизации (которая для окон со скином определяется автоматически функцией 0, для окон без скина её можно определить функцией 8), восстановление - приложением @panel.

Подфункция 11 - получить информацию о дисковой подсистеме.

Внимание: Эта подфункция будет удалена в следующих версиях системы

Параметры:
* eax = 18 - номер функции
* ebx = 11 - номер подфункции
* ecx = тип таблицы:
** 1 = короткая версия, 10 байт
** 2 = полная версия, 65536 байт
* edx = указатель на буфер (в приложении) для таблицы
Возвращаемое значение:
* функция не возвращает значения
Формат таблицы: короткая версия:
* +0: byte: информация о НГМД (дисководах для дискет), AAAABBBB, где AAAA задаёт тип первого дисковода, BBBB - второго согласно следующему списку:
** 0 = нет дисковода
** 1 = 360Kb, 5.25
** 2 = 1.2Mb, 5.25
** 3 = 720Kb, 3.5
** 4 = 1.44Mb, 3.5
** 5 = 2.88Mb, 3.5 (такие дискеты сейчас уже не используются)
** Например, для стандартной конфигурации из одного 1.44-дисковода здесь будет 40h, а для случая 1.2Mb на A: и 1.44Mb на B: значение оказывается 24h.
* +1: byte: информация о жёстких дисках и CD-приводах, AABBCCDD, где AA соответствует контроллеру IDE0, ..., DD - IDE3:
** 0 = устройство отсутствует
** 1 = жёсткий диск
** 2 = CD-привод
** Например, в случае HD на IDE0 и CD на IDE2 здесь будет 48h.
* +2: 4 db: число найденных разделов на жёстких дисках с соответственно IDE0,...,IDE3.  При отсутствии жёсткого диска на IDEx соответствующий байт нулевой, при наличии  показывает число распознанных разделов, которых может и не быть (если носитель не отформатирован или если файловая система не поддерживается). В текущей версии ядра для жёстких дисков поддерживаются только FAT16, FAT32 и NTFS.
* +6: 4 db: зарезервировано
Формат таблицы: полная версия:
* +0: 10 db: такие же, как и в короткой версии
* +10: 100 db: данные для первого раздела
* +110: 100 db: данные для второго раздела
* ...
* +10+100*(n-1): 100 db: данные для последнего раздела
* Разделы расположены в следующем порядке: сначала последовательно все pаспознанные разделы на HD на IDE0 (если есть), затем на HD на IDE1 (если есть) и т.д. до IDE3.
Формат информации о разделе:
* +0: dword: начальный физический сектор раздела
* +4: dword: последний физический сектор раздела (принадлежит разделу)
* +8: byte: тип файловой системы:  16=FAT16, 32=FAT32, 1=NTFS, ?=EXT2
* формат дальнейших данных зависит от файловой системы, может меняться с изменениями в ядре и поэтому не описывается
Замечания:
* Короткая таблица может быть использована для получения информации об имеющихся устройствах.

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

Параметры:

  • eax = 18 - номер функции
  • ebx = 13 - номер подфункции
  • ecx = указатель на буфер (не менее 16 байт), куда будет помещена информация

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

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

Структура буфера:

db a,b,c,d для версии a.b.c.d
db 0: зарезервировано
dd REV - номер svn-ревизии ядра

Для ядра Kolibri 0.7.7.0+:

db 0,7,7,0
db 0
dd 1675

Подфункция 14 - ожидать начала обратного хода луча развёртки монитора.

Параметры:

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

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

  • eax = 0 как признак успеха

Замечания:

  • Функция предназначена исключительно для активных высокопроизводительных графических приложений; используется для плавного вывода графики.

Подфункция 15 - поместить курсор мыши в центр экрана.

Параметры:

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

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

  • eax = 0 как признак успеха

Подфункция 16 - Получить размер свободной оперативной памяти.

Параметры:

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

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

  • eax = размер свободной памяти в килобайтах

Подфункция 17 - получить размер имеющейся оперативной памяти.

Параметры:

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

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

  • eax = общий размер имеющейся памяти в килобайтах

Подфункция 18 - завершить процесс/поток по идентификатору.

Параметры:

  • eax = 18 - номер функции
  • ebx = 18 - номер подфункции
  • ecx = идентификатор процесса/потока (PID/TID)

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

  • eax = 0 - успешно
  • eax = -1 - ошибка (процесс не найден или является системным)

Замечания:

  • Нельзя завершить поток операционной системы OS/IDLE (номер слота 1), можно завершить любой обычный поток/процесс.
  • Смотри также подфункцию 2 - завершение процесса/потока по заданному слоту.

Подфункция 19 - получить/установить настройки мыши.

Подподфункция 0 - получить скорость мыши.

Параметры:

  • eax = 18 - номер функции
  • ebx = 19 - номер подфункции
  • ecx = 0 - номер подподфункции

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

  • eax = текущая скорость мыши

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

Параметры:

  • eax = 18 - номер функции
  • ebx = 19 - номер подфункции
  • ecx = 1 - номер подподфункции
  • edx = новое значение скорости

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

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

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

Параметры:

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

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

  • eax = текущая задержка мыши

Подподфункция 3 - установить задержку мыши.

Параметры:

  • eax = 18 - номер функции
  • ebx = 19 - номер подфункции
  • ecx = 3 - номер подподфункции
  • edx = новое значение задержки мыши

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

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

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

Параметры:

  • eax = 18 - номер функции
  • ebx = 19 - номер подфункции
  • ecx = 4 - номер подподфункции
  • edx = [координата по оси x]*65536 + [координата по оси y]

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

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

Замечания:

  • Подподфункция 4 не проверяет переданное значение. Перед вызовом необходимо узнать текущее разрешение экрана (подфункцией 14) и проверить, что устанавливаемое положение не выходит за пределы экрана.

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

Параметры:

  • eax = 18 - номер функции
  • ebx = 19 - номер подфункции
  • ecx = 5 - номер подподфункции
  • edx = информация о эмулируемом состоянии кнопок мыши: (соответствует возвращаемому значению подфункции 2 функции 37)
    • бит 0 установлен = левая кнопка нажата
    • бит 1 установлен = правая кнопка нажата
    • бит 2 установлен = средняя кнопка нажата
    • бит 3 установлен = 4-я кнопка нажата
    • бит 4 установлен = 5-я кнопка нажата

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

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

Замечания:

  • Рекомендуемая скорость мыши (в подподфункции 1) от 1 до 9. Устанавливаемая величина не проверяется кодом ядра, поэтому используйте осторожно, при некорректном значении курсор может "замёрзнуть". Скорость мыши можно регулировать в приложении SETUP.
  • Рекомендуемая величина задержки (в подподфункции 3) = 10. Меньшие значения не обрабатываются COM-мышами. При очень больших значениях невозможно передвижение мыши на 1 пиксель и курсор будет прыгать на величину установленной скорости (подподфункция 1). Устанавливаемая величина не проверяется кодом ядра. Величину задержки можно менять в приложении SETUP.

Подфункция 20 - получить информацию об оперативной памяти.

Параметры:

  • eax = 18 - номер функции
  • ebx = 20 - номер подфункции
  • ecx = указатель на буфер для информации (36 байт)

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

  • eax = общий размер имеющейся оперативной памяти в байтах или -1 в случае ошибки
  • буфер, на который указывает ecx, содержит следующую информацию:
    • +0: dword: общий размер имеющейся оперативной памяти в страницах
    • +4: dword: размер свободной оперативной памяти в страницах
    • +8: dword: число страничных ошибок (исключений #PF) в приложениях
    • +12: dword: размер кучи ядра в байтах
    • +16: dword: размер свободной памяти в куче ядра в байтах
    • +20: dword: общее количество блоков памяти в куче ядра
    • +24: dword: количество свободных блоков памяти в куче ядра
    • +28: dword: размер наибольшего свободного блока в куче ядра (зарезервировано)
    • +32: dword: размер наибольшего выделенного блока в куче ядра (зарезервировано)

Подфункция 21 - получить номер слота процесса/потока по идентификатору.

Параметры:

  • eax = 18 - номер функции
  • ebx = 21 - номер подфункции
  • ecx = идентификатор процесса/потока (PID/TID)

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

  • eax = 0 - ошибка (неверный идентификатор)
  • иначе eax = номер слота

Подфункция 22 - операции с окном другого процесса/потока.

Параметры:

  • eax = 18 - номер функции
  • ebx = 22 - номер подфункции
  • ecx = тип операции:
    • 0 = минимизация окна, поток задан номером слота
    • 1 = минимизация окна, поток задан идентификатором
    • 2 = восстановление окна, поток задан номером слота
    • 3 = восстановление окна, поток задан идентификатором
  • edx = параметр операции (номер слота или PID/TID)

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

  • eax = 0 - успешно
  • eax = -1 - ошибка (неправильный параметр)

Замечания:

  • Поток может свернуть своё окно вызовом подфункции 10.
  • Восстановление окна с одновременной активизацией осуществляется подфункцией 3 (принимающей номер слота).