Page 2 of 3

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

Posted: Fri Jun 01, 2012 12:40 am
by Mario
Mario wrote:Кроме выше описанных проблем обнаружилась еще одна проблема - при пользовании mousemul управляющие клавиши (стрелки и 5) срабатывают на активном приложении. У меня нет идей как побороть эту ситуацию, если никто не предложит метод решения, то придется откатить ревизию 2611 и закопать мамонта обратно. Черт с ним с залипанием Shift, Ctrl, Alt - благими намерениями вымощена дорога сами знаете куда.
Откатить все таки не получится. Если приложению не возвращать код назначенный на горячую клавишу (кстати реализация именно горячих клавиш, а не комбинаций сделана, потому и проблемы возникаю имхается мне), то при назначении горячих комбинаций типа Win (Ctrl, Alt, Shift) + символьная клавиша (в нашем случае R и D) приводит к тому что они становятся недоступными для обычного ввода. Раньше такие комбинации не использовались (назначение символьных клавиш в качестве горячих), потому эта недоработка реализации SVN r.92 не была заметна. С введением же новых горячих комбинаций проблема вылезла во всей красе.

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

Posted: Fri Jun 01, 2012 4:18 am
by Mario
Поскольку приложение MOUSEMUL имеет уникальный статус, то я ввел новую пару функций 66.6 и 66.7, для решения проблемы. SVN r. 2709, 2710

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

Posted: Thu Jun 17, 2021 9:35 pm
by Leency
Похоже есть баг: 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 - продолжает работать

Баг?

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

Posted: Sun Jun 20, 2021 1:32 am
by dunkaist

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.

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

Posted: Sun Jun 20, 2021 2:21 am
by Leency
Hmm... Looks like I have to use scan codes.
Thanks a lot for investigation!

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

Posted: Sun Jul 11, 2021 2:58 am
by Leency
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.

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

Posted: Sun Jul 11, 2021 12:25 pm
by dunkaist
Ok, why not.

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

Posted: Tue Jul 13, 2021 3:43 pm
by lev
Накой нужна система не отличающая Shift+Ctrl от Shift+Ctrl+ещё клавиша?
А выбор шортката должен быть настраиваемым.

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

Posted: Tue Jul 13, 2021 3:58 pm
by punk_joker
lev wrote:Накой нужна система не отличающая Shift+Ctrl от Shift+Ctrl+ещё клавиша?
А выбор шортката должен быть настраиваемым.
Ты наверное удивишься, но в Линуксе таже проблема, а еще проблема с обработкой шоткартов на не-латинской раскладке.

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

Posted: Thu Jul 28, 2022 1:18 pm
by raptorhai40
Возможно, это фича? Если приложение A зарегистировало Shift+Ctrl+Alt+F7 как горячую клавишу и при активном приложении B пользователь нажимает Shift+Ctrl+Alt+F7, вряд ли имеет смысл посылать её приложению B, которое может сильно удивиться. 192.168.1.1
panorama charter