Общесистемные горячие клавиши

Applications development, KoOS API questions
  • Поскольку приложение MOUSEMUL имеет уникальный статус, то я ввел новую пару функций 66.6 и 66.7, для решения проблемы. SVN r. 2709, 2710
  • Похоже есть баг: f66.3 не присылает комбинации с альтом.

    В аттаче приложение: исходник на православном асме и бинарник.
    Логика приложения проста: если f66.3 что-то вернула - выход если пусто, продолжает работу.
    Spoiler:

    Code: Select all

      use32              ; включить 32-битный режим ассемблера
      org    0           ; адресация с нуля
    
      db     'MENUET01'  ; 8-байтный идентификатор MenuetOS
      dd     1           ; версия заголовка (1 либо 2, см. док-ю)
      dd     START       ; адрес первой команды
      dd     I_END       ; размер программы
      dd     MEM         ; количество памяти
      dd     STACKTOP    ; адрес вершины стэка
      dd     0
      dd     0
    
    include "macros.inc"
    
    START:
    
    red:
       call draw_window
    
    still:
        mcall 10
    
        cmp  eax,1  
        je   red 
        cmp  eax,2 
        je   key 
        cmp  eax,3
        je   exit
    
        jmp  still 
    
    
    ;---------------------------------------------------------------------
    
    
      key: 
        mcall 2 
    
        mcall 66, 3
        test eax,0    <------------ мякотка тут
        jne still
      exit:
        mcall -1
    
        jmp  still          ; вернуться к началу цикла
    
    draw_window:
        mcall 12, 1       ; функция 12: сообщить ОС о начале отрисовки
        mcall 0, <200,500>, <400,150>, 0x33FFFfff, ,title
        mcall 4, <5, 20>, 0x90000000, message
        mcall 12, 2                  ; функция 12.2, закончили рисовать
        ret                          ; выходим из процедуры
    
    message db 'Любая клавиша закроет окно, кроме Альта и комбинаций с ним.',0
    title db 'f66.3',0
    
    I_END:                  ; метка конца программы
      rb 4096               ; память для стека
    align 16
    STACKTOP:
    MEM:
    Ctrl+1, Ctrl+f, Shift+P, Shift+4 - Выход
    Alt+n - продолжает работать

    Баг?
    Attachments
    EXAMPLE.ASM (1.16 KiB)
    Downloaded 271 times
    EXAMPLE (240 Bytes)
    Downloaded 252 times
    Из хаоса в космос
  • Code: Select all

    test eax,0
    This always sets zero flag because AND X, 0 is always 0. Therefore the following JNE branch is never taken. Hence mcall -1 is always executed when a key event is received by a program.

    The reason why Alt+letter keys are not sent to the program is that
    1. Programs expect ASCII codes by default, not scan codes, and
    2. /programs/system/taskbar/trunk/KEYMAP.KEY file doesn't mention any ASCII codes for Alt+letter keys. So the kernel doesn't send any event to the program.

    In addition, Alt+number keys are global hotkeys to change keyboard layout.

    I can think of two solutions:
    1. Add ASCII codes to Alt+letter keys to the keymap file. This way Alt+letter will also put characters to editboxes, is it desirable behavior?
    2. Switch the program to receive scan codes.
  • Hmm... Looks like I have to use scan codes.
    Thanks a lot for investigation!
    Из хаоса в космос
  • Hey guys,

    The point is about change language hotley.
    I know someone loves Ctrl+Shift because I was that guy. But this is a useful combination for other cases like Ctrl+Shift+Tab so I propose to use Win+Space for language switch as all main OSes.
    Из хаоса в космос
  • Ok, why not.
  • Накой нужна система не отличающая Shift+Ctrl от Shift+Ctrl+ещё клавиша?
    А выбор шортката должен быть настраиваемым.
  • lev wrote:Накой нужна система не отличающая Shift+Ctrl от Shift+Ctrl+ещё клавиша?
    А выбор шортката должен быть настраиваемым.
    Ты наверное удивишься, но в Линуксе таже проблема, а еще проблема с обработкой шоткартов на не-латинской раскладке.
    to infinity and beyond
  • Возможно, это фича? Если приложение A зарегистировало Shift+Ctrl+Alt+F7 как горячую клавишу и при активном приложении B пользователь нажимает Shift+Ctrl+Alt+F7, вряд ли имеет смысл посылать её приложению B, которое может сильно удивиться. 192.168.1.1
    panorama charter
  • Who is online

    Users browsing this forum: No registered users and 7 guests