ZKEY - эмулятор клавиатуры

...
  • Да не то чтобы секрет, только зачем обнадёживать людей если работа ещё далека от завершения.
  • Было бы удобнее, если бы программа сама могла определить режим ввода с клавиатуры(scan\ascii) для приложения, которому будут посылаться сообщения о нажатии клавиш. Насколько я понимаю, сейчас это сделать нельзя.
    Можно выводить в буфер SysFn9. Тогда надо будет добавить в kernel.asm:

    Code: Select all

    sys_cpuusage:
    ; .................................................................   
    	 ; Event mask (+71)
            mov     EAX, dword [ECX+CURRENT_TASK+TASKDATA.event_mask]
            stosd
    				
    +	 ; Keyboard mode (+75)
    +       mov     al, dword [ecx*8 + SLOT_BASE + APPDATA.keyboard_mode]
    +       stosb				
    								
            pop     esi
            pop     edi   
    ; .................................................................
  • Ну так я добавлю? И ZKey будет автоматически определять режим ввода.

    Только в ZKey такая проблема:

    Code: Select all

    draw_window:
      test	 byte [red_type], 1
      jnz	 @f
      test	 byte [red_type], 2
      jnz	 .draw_switch_button
      start_draw_window 100,370,600,210,0x14224466,labelt
    То есть, сейчас start_draw_window пропускается и старая кнопка не удаляется.
    Там, где я добавлю свой код, я буду удалять, а остальное я трогать не буду:

    Code: Select all

    still:
    	call	get_receiver_window_slot_number
    +	call	get_receiver_window_keyboard_mode
    +	call	set_keyboard_mode
    + ; delete_switch_button 
    +	mov eax, 8 
    +	mov edx, 0x80700000
    +	int	0x40 
    +	call	draw_window.draw_switch_button
     

    Code: Select all

     .draw_switch_button:
      mov	eax, 6
      mul	byte [keyboard_mode]
      add	eax, SwitchText
      stdcall draw_button, 513,28,46,20,106,0x00700000,eax,6,TEXTCOLOR	 ; Scan/ASCII switch
    @@:
     .draw_indicators_area:
      call lights_on
    
    +  xor al, al
    +  xchg al, [red_type]
    
      mov	byte [red_type], 0
      
    +  test	 al, 2
    +  jnz	 .skip_end_draw_window
      
      end_draw_window
      
    + .skip_end_draw_window:  
  • Добавляй, но желательно доступными способами убедиться, что не вызовет проблем. Хотя теоретически все приложения выделяют полный размер под буфер.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Mario_r4 wrote:Хотя теоретически все приложения выделяют полный размер под буфер.
    В документации написано:
    ======================================================================
    ============= Функция 9 - информация о потоке выполнения. ============
    ======================================================================
    Параметры:
    * eax = 9 - номер функции
    * ebx = указатель на буфер размера 1 Кб
  • А еще там:

    Code: Select all

      * В данный момент используется только часть буфера размером
        71 = 0x47 байта. Тем не менее рекомендуется использовать буфер
        размером 1 Кб для будущей совместимости, в будущем могут быть
        добавлены некоторые поля.
    Но иногда программисты смотрят в код ядра и видят, что остальная область не используется. Понятно, что это ССЗБ, но тем не менее бывает.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Mario_r4 wrote:А еще там:
    Код:
    * В данный момент используется только часть буфера размером
    71 = 0x47 байта.
    А в kernel.asm:
    ; Event mask (+71)
    mov EAX, dword [ECX+CURRENT_TASK+TASKDATA.event_mask]
    stosd
    То есть, 75 на самом деле.
  • Добавил автопереключение режима ввода с клавиатуры #4263.
  • Who is online

    Users browsing this forum: No registered users and 5 guests