Индикатор клавиатуры

...
  • если у ПО есть интерфейс, неплохо было бы его продемонстрировать на скриншотах.. (напр. именно сейчас мне хотелось бы взглянуть - но нет возможности закинуть файл в образ, а EXT4 и флешки на этой системе не видны)
    а программа нужная, у меня на ноутбуке только капслока лампочка есмь =(
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • Я уже упоминал, что как раз интерфейс не проработан. На данный момент программка выглядит так... В заголовке окна - 3 символа. Если символ "о", значит индикатор не горит, если "*" - горит. Программа работает даже когда её окно неактивно.
    Attachments
    003.png
    003.png (694 Bytes)
    Viewed 8962 times
    002.png
    002.png (748 Bytes)
    Viewed 8961 times
    001.png
    001.png (800 Bytes)
    Viewed 8961 times
  • Отлично, осталось только научить её встраиваться в панель, как апплет.
  • там уж проще новую рисовать

    для моей панели требуется чтобы программа умела рисовать в память, в том масштабе, который ей укажут (указывают один из размеров, второй она должна сообщить в ответ), причем, как в вертикальной, так и горизонтальной ориентации. Ну там еще протокол взаимодействия, но это на самом деле мелочи, и протокол пока в разработке.

    P.S. как только закончится реализация хоть чего-то из следующего: SVG, BFG(vs), Flash, программа сможет не беспокоиться о масштабировании, а пока так
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • может быть стоит попробовать для этой программы сделать подключение библиотеки box_lib и использовать для индикации элементы checbox2 ?
    Attachments
    это может выглядеть так
    keybi.png (1.67 KiB)
    это может выглядеть так Viewed 8906 times
  • зачем такой программе окно со скином? сделайте как моя battery, без скина, появляется/исчезает по горячей клавише окно
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • по горячей клавише
    не годится. с таким же успехом можно напечатать символ, убедиться, что зажата клавиша CapsLock, стереть символ и выключить CapsLock. а вот box_lib я бы попробовал (интересно, есть ли на svn примеры и можно ли сделать checkbox2 неактивным). хотя можно просто прямоугольники рисовать...
  • Albom wrote:и можно ли сделать checkbox2 неактивным
    можно, для этого нужно не делать вызовы функций check_box_mouse2
    Albom wrote:хотя можно просто прямоугольники рисовать...
    можно, но если вдруг возникнет необходимость менять состояние клавиатуры при нажатии мышкой в окно программы, тогда лучше всего сделать через checkbox

    Код может быть таким:
    Spoiler:use32
    org 0x0
    db 'MENUET01' ;ид. исполняемого файла всегда 8 байт
    dd 0x1
    dd start
    dd i_end ;размер приложения
    dd mem
    dd stacktop
    dd 0
    dd sys_path

    include 'e:/kolibri/svn/programs/macros.inc'
    include 'e:/kolibri/svn/programs/proc32.inc'
    include 'e:/kolibri/svn/programs/develop/libraries/box_lib/load_lib.mac'
    include 'e:/kolibri/svn/programs/develop/libraries/box_lib/trunk/box_lib.mac'
    include 'mem.inc'
    ;include 'dll.inc'

    @use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load
    caption db 'Key',0 ;подпись окна

    align 4
    start:
    load_libraries l_libs_start,l_libs_end
    mcall 48,3,sc,sizeof.system_colors
    mcall 40,0x27

    init_checkboxes2 check_boxes,check_boxes_end


    align 4
    red_win:
    call draw_window


    align 4
    still:
    mcall 10

    cmp al,1 ;изм. положение окна
    jz red_win
    ;cmp al,2
    ;jz key
    cmp al,3
    jz button

    stdcall [check_box_mouse], ch1
    stdcall [check_box_mouse], ch2
    stdcall [check_box_mouse], ch3

    jmp still


    align 4
    draw_window:
    pushad
    mcall 12,1
    xor eax,eax
    mov ebx,(10 shl 16)+100
    mov ecx,(10 shl 16)+80
    mov edx,[sc.work]
    or edx,(3 shl 24)+0x10000000+0x20000000
    mov edi,caption
    int 0x40

    stdcall [check_box_draw], ch1
    stdcall [check_box_draw], ch2
    stdcall [check_box_draw], ch3
    mcall 12,2
    popad
    ret

    ;align 4
    ;key:
    ; mcall 2
    ; jmp still


    align 4
    button:
    mcall 17
    cmp ah,1
    jne still
    .exit:
    mcall -1


    check_boxes:
    ch1 check_box2 (5 shl 16)+15,(5 shl 16)+10,5, 0xffffff,0x8000,0xff,\
    txt_160,0+ch_flag_middle
    ch2 check_box2 (5 shl 16)+15,(17 shl 16)+10,5, 0xffffff,0x8000,0xff,\
    txt_159,0+ch_flag_middle
    ch3 check_box2 (5 shl 16)+15,(29 shl 16)+10,5, 0xffffff,0x8000,0xff,\
    txt_158,0+ch_flag_middle
    check_boxes_end:

    txt_160 db 'Num',0
    txt_159 db 'Caps',0
    txt_158 db 'Scroll',0

    head_f_i:
    head_f_l db 'Системная ошибка',0

    system_dir_0 db '/sys/lib/'
    lib_name_0 db 'box_lib.obj',0
    err_msg_found_lib_0 db 'Не найдена библиотека box_lib.obj',0
    err_msg_import_0 db 'Ошибка при импорте библиотеки box_lib',0

    l_libs_start:
    lib_0 l_libs lib_name_0, sys_path, library_path, system_dir_0,\
    err_msg_found_lib_0,head_f_l,import_box_lib,err_msg_import_0,head_f_i
    l_libs_end:

    align 4
    import_box_lib:
    init dd sz_init
    init_checkbox dd sz_init_checkbox
    check_box_draw dd sz_check_box_draw
    check_box_mouse dd sz_check_box_mouse
    dd 0,0
    sz_init db 'lib_init',0
    sz_init_checkbox db 'init_checkbox2',0
    sz_check_box_draw db 'check_box_draw2',0
    sz_check_box_mouse db 'check_box_mouse2',0

    mouse_dd dd 0x0
    sc system_colors

    align 16
    procinfo process_information

    i_end:
    rb 1024
    stacktop:
    sys_path rb 1024
    library_path rb 1024
    mem:
    Флаг установленного чек бокса:

    Code: Select all

    ch_flag_en = 10b
    Для изменения флага нужно менять 2-й бит. Нумерация битов в bt, bts, btr идет с 0 то 2-й будет под номером 1:

    Code: Select all

    bt dword[ch1.flags],1 ;проверка ( перенесение в cf )
    bts dword[ch1.flags],1 ;установка
    btr dword[ch1.flags],1 ;сброс
  • Albom, а что, действительно возюканье мышью по маршруту Меню-Системные-Железо-Индикаторы_клавиатуры будет быстрее чем Ctrl+Alt+i ?
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • может делать так - когда капс лок включен - индикатор раскладки показывает большими буквами "EN", например, когда выключен - маленькими "en", например
  • Gluk
    возюканья мыши не будет, так как если индикатор будет нужен, он будет постоянно висеть где-нибудь в уголке.

    IgorA
    Спасибо за код! Будет время, скомпоную всё воедино.

    XVilka
    Спасибо! Отличная идея! Для большинства случаев индикации CapsLock достаточно. Будет время - и в код панели залезу. :)
  • Albom, "будет постоянно висеть где-нибудь" - тогда тем более окно со скином ни к чему, раз сворачиваться/закрываться приложение не будет
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!