Можно ли эмулировать нажатие клавиши?

Applications development, KoOS API questions
  • Нет, в Колибри такого нет.. можно посылать сообщения о нажатии кнопок в приложении, и клавиши мыши. хотя то что ты сапрашиваешь мне пригодилось бы весьма и весьма..
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • Мне бы тоже пригодилось для моей программы "Экранная клавиатура". Хотелось бы конечно добавить новую функцию Kolibri, но не знаю как к этому отнесутся разработчики ядра. Все-таки, по-моему, эта функция будет влиять на безопасность системы. :?
  • В Колибри нет безопасности системы. Вообще.
  • я тоже хотел бы написать это приложение.. будет хорошо сочетаться с mousEmul)
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • Тогда предлагаю добавить эту функцию. Прошу проголосовать.

    Вот что-то вроде заготовки: http://narod.ru/disk/1262852000/ZKEY.BIN.html
  • Asper

    А как она будет реализована ?
  • Я не силен в асм, т.к. пишу в основном на С++, но общая идея такая:
    Вход:
    eax = как всегда номер функции
    bl = код клавиши
    ecx = PID процесса которому посылаем сообщение о нажатой клавише

    1. В KEY_BUFF помещаем код нажатой клавиши
    2. Посылаем через функцию proc send_event stdcall pid:dword, event:dword сообщение процессу о нажатии клавиши

    Что-то вроде этого.
  • это будет противоречить тому, что сообщения о нажатии (не горячих) клавиш получает только процесс с активным окном..
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • Ну что ж, в таком случае от PID готов отказаться.
    Функция будет посылать сообщение процессу с активным окном CURRENT_TASK.
  • diamond (22:56:51 3/07/2008)
    дык есть же такая
    72.1 http://wiki.kolibrios.org/wiki/SysFn72/ru
    Из хаоса в космос
  • Спасибо Leency! То что надо! :D Скачал k_svn.803 и порывшись там немного действительно нашёл 72 функцию sys_sendwindowmsg. Документацию я к ней к сожалению не нашел (имеющаяся у меня дока заканчивается на 71 функции). Т.к. как я уже говорил в асме не силен, то хотелось бы чтобы кто-нибудь описал входные и выходные её параметры.

    Code: Select all

    sys_sendwindowmsg:
            dec     eax
            jnz     .ret
            cmp     ebx, 3
            jz      .sendbtn
            cmp     ebx, 2
            jnz     .ret
    .sendkey:
    ...
            jmp     .ok
    .overflow:
            popf
            mov     dword [esp+36], 1
            ret
    .sendbtn:
    ...
    .ok:
            popf
            and     dword [esp+36], 0
    .ret:
    Не совсем понял, sendkey получается 72.2, sendbtn 72.3, а 72.1 зачем?
    :?
  • Asper
    Документацию я к ней к сожалению не нашел
    Плохо смотришь, смотри в 'svn/kernel/trunk/docs/sysfuncr.txt'
    Там все функции описаны.

    Code: Select all

    ============================================
    ==== Функция 72 - послать сообщение окну. =====
    ============================================
    --- Подфункция 1 - послать сообщение с параметром активному окну. ----
    Параметры:
      * eax = 72 - номер функции
      * ebx = 1 - номер подфункции
      * ecx = код события: 2 или 3
      * edx = код клавиши для ecx=2, идентификатор кнопки для ecx=3
    Возвращаемое значение:
      * eax = 0 - успешно
      * eax = 1 - буфер заполнен
    
    Заглянул на огонёк
  • Спасибо Alver,теперь все стало ясно.
  • Вот, что получилось:
    http://narod.ru/disk/1464301000/ZKEY%200.3.rar.html
    и код, если кому интересно:
    http://narod.ru/disk/1464377000/ZKEY%20 ... e.rar.html

    Посылает скан коды нажатых(down) клавиш приложениям. Чтобы посылать сообщение нужному окну, нужно это окно активировать, а потом активировать ZKEY.
  • Who is online

    Users browsing this forum: No registered users and 4 guests