Получение слота потока по его идентификатору

Internal structure and you change requests/suggestions
  • Alver
    Собственно я может, и туплю, но где сама процедура pid_to_slot?
  • Mario79

    В taskman.inc
  • Mario79
    Да, 'pid_to_slot' есть в ядре, и используется некоторыми функциями, но прямого вызова пока почемуто не было предусмотрено.
    Прежде чем предлагать, я cкомпилил эту фишку в ядре, проверял простенькой прогой через CPUID - работало.
    Вообще я хотел расширить ядро еще функциями сворачивания/восстановления окна указанного процесса (сейчас есть только своего). Это моглобы позволить добавить в интерфейс панели кнопки расчистки рабочего стола и даже подобие виртуальных рабочих мест, но не вышло, не врубился как работают функции 'minimize_window' и 'restore_minimized_window'. :cry:
  • Отдельная функция такого рода не нужна (для мнимизации окна). Нужна функция для установки состояния окна, то есть свернуть/развернуть, максимировать/восстановить, roll-up/roll-down. Вот это было бы действительно полезно.
  • Только успел запоститься и обнаружил причину неудачи с минимизацией.
    Ленин
    Отдельная функция такого рода не нужна (для мнимизации окна). Нужна функция для установки состояния окна, то есть свернуть/развернуть, максимировать/восстановить, roll-up/roll-down. Вот это было бы действительно полезно.
    Никаких проблем не вижу, состояние устанавливается в процессе, все функции уже есть в ядре, нет только соответствующих входов.
    Привожу доработку:

    Code: Select all

     Function 18,22
     Минимизация/восстановление окна процесса.
    ----------------------------------------------------
     Параметры:
        * eax = 18 - номер функции
        * ebx = 22 - номер подфункции
        * ecx = Тип операции
                0 - минимизация окна (сворачивание на панель) по номеру слота потока
                1 - минимизация окна по идентификатору PID/TID
                2 - Восстановление минимизированного окна по слоту потока
                3 - Восстановление минимизированного окна по идентификатору PID/TID
        * edx = Параметр операции (Номер слота или PID/TID)
     Возвращаемое значение:
        * eax = 0  - Завершилась успешно
                -1 - Не получилось.
    
    Дополнительные изменения в файле 'kernel.asm'
    В конец таблицы 'sys_system_table' добавить:

    Code: Select all

           dd      sysfn_min_rest_window   ; 22 = minimize and restore any window
    
    Среди процедур, следующих за 'sys_system' вставить:

    Code: Select all

    sysfn_min_rest_window:
         pushad
         mov   eax, ecx      ; ebx - operating
         shr   ebx, 1
         jnc    @f
         call  pid_to_slot
    @@:                      ; eax - Номер слота потока
         or    eax, eax      ; eax - number of slot
         jz    .error
         xor   ecx, ecx
         mov   cx, [WIN_STACK + eax*2]  ; ecx - window number
         mov   eax, ecx
         shr   ebx, 1
         jc    .restore
     ; .minimize:
         call  minimize_window
         jmp   .exit
    .restore:
         call  restore_minimized_window
    .exit:
         popad
         xor   eax, eax
         mov   [esp+36], eax
         ret
    .error:
         popad
         xor   eax, eax
         dec   eax
         mov   [esp+36], eax
         ret
    
    Максимизация пока не поддерживается, не понял я как она производится.
  • Я извиняюсь конечно что отошел от заявленной темы, но раз уж начал...
    Состряпал маленькую прогу для сворачивания окошек рабочего стола, использующую новые функции.:lol:
    Исходник здесь: http://alver-mage.narod.ru/Kolibri/clean_src.7z
  • Alver
    Не пора ли в таком случае залить на SVN?
    Попроси у Mike.dld (Ленин) регистрацию и вперед.
  • Не лучше ли ввести подобие сообщений в виндовс? Послал окну сообщение свернуться - оно и свернулось само, если захочет...
    Так на каждое действие прийдётся новую функцию клепать
  • А так придется новые сообщения и обработчики клепать, не вижу разницы.
    К тому же это совсем др. вешь и служит она для др. целей. И вообще то, в винде окна сворачиваются вызовом функции, а не посылкой сообщения.

    ..bw
  • В проце sysfn_min_rest_window пожалуй стоит добавить ограничение на максимальный слот иначе может какая уязвимость выплывет.

    Code: Select all

    sysfn_min_rest_window:
         pushad
         mov   eax, ecx      ; ebx - operating
         shr   ebx, 1
         jnc    @f
         call  pid_to_slot
    @@:                    ; eax - Номер слота потока.
         or    eax, eax      ; eax - number of slot
         jz    .error
         cmp   eax, 255         ; varify maximal slot number
         ja    .error      ; Проверка на выход за пределы слотов
         xor   ecx, ecx
         mov   cx, [WIN_STACK + eax*2]  ; ecx - window number
         mov   eax, ecx
         shr   ebx, 1
         jc    .restore
     ; .minimize:
         call  minimize_window
         jmp   .exit
    .restore:
         call  restore_minimized_window
    .exit:
         popad
         xor   eax, eax
         mov   [esp+36], eax
         ret
    .error:
         popad
         xor   eax, eax
         dec   eax
         mov   [esp+36], eax
         ret
    
    Я не знаю есть ли в Kolibri константа или переменная, указывающая максимально возможное число слотов, если есть то правильнее было бы конечно использовать ее вместо 255.
  • Mario79
    Не пора ли в таком случае залить на SVN?
    Попроси у Mike.dld (Ленин) регистрацию и вперед.
    Если честно то я с SVN как то не очень, скачивать через kdesvn научился, но лезть на сервер пожалуй побоюсь.
    Если кто может залить то пожалуйста.

    Описание изменений поместил здесь: http://alver-mage.narod.ru/Kolibri/koos_kernel.htm
    Скомпилированное ядро: http://alver-mage.narod.ru/Kolibri/Kernel_M.7z
    Програмка сворачивания стола: http://alver-mage.narod.ru/Kolibri/clean.7z
    Ее исходник: http://alver-mage.narod.ru/Kolibri/clean_asm.7z

    Да думаю програмку в SVN пихать не нужно, она скорее для прикола. :wink:
  • Alver сходи на http://wiki.kolibrios.org/index.php/Как ... ом_Kolibri
    bw в итоге всё сводится к фунциям, абстрагируясь, можно помоему более гибко реализовать этот сервис через сообщения
  • > в итоге всё сводится к фунциям, абстрагируясь, можно помоему более гибко реализовать этот сервис через сообщения
    Реализуй сообщения через IPC, зачем впутывать ядро. К тому же это сомнительная гибкость, как я сказал. Всеравно нужно реализовывать обработчик. Удобство в основном состоит в том что бы вызывать фукнциональность процесса (окна) не предусмотренную ядром (графической системой). Ну да ладно, сейчас мы уйдем в спор, который ни к чему не приведет. Только зафлудим тему.

    ..bw
  • Mario79
    Ввиду того что от изначально заявленной темы осталось только 3.5 первых поста, не мог бы ты как администратор поменять название темы на более подходящее, или перенести последние посты в другую тему, скажем "О минимизации окон и т.п." или чтото в этом духе.

    vectoroc
    Использовать сообщения для минимизации окна, помоему больший геморой, и меньшая функциональность.
    Попробую обьяснить свою позицию. Минимизация и восстановление окна фактически является элементом интерфейса рабочего стола, и служит для освобождения от нагромождений открытых приложений. Используя новые функции, можно доработать код панели, для быстрой очистки-восстановления desktopа, можно даже сделать возможность разделить окна на группы, получив подобие виртуальных рабочих мест как в GNOME,KDE и т.п. Если использовать для этих целей сообщения, вопервых время отклика возрастет, во вторых в kolibri насколько я понял, обработка кнопки сворачивания ведется ядром а не программой, если передать контроль этой функции программе, то придется переписывать все приложения, если сделать для программ возможность выбора контролировать/нет то передача сообщений неконтролирующим программам будет бесполезна.
  • Who is online

    Users browsing this forum: No registered users and 25 guests