Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Эмуляция нажатий клавиш в DirectX приложении |
Автор: Jr13san 18.9.2011, 19:05 | ||
Цитирую один вопрос с другого форума:
У меня такая же задача. На том форуме ответа не было дано. Может быть здесь найдутся люди, которые могут помочь в проблеме? Результат данной темы прикреплён ниже: |
Автор: bems 18.9.2011, 21:14 |
SendInput, используя сканкоды (флаг KEYEVENTF_SCANCODE в структуре KEYBDINPUT) |
Автор: Jr13san 19.9.2011, 09:05 | ||
Даже такая конструкция не работает там. В блокноте норм печатает TAB, а в том приложении 0 реакций. Может быть там сообщения принимаются с формы, которая в full screen режиме?
|
Автор: bems 19.9.2011, 10:35 |
Автор: Dem_max 19.9.2011, 17:35 |
Попробуй послать комбинацию Alt+tab, полно экранная игра должна свернуться. Вот и проверит работает это сочетание. |
Автор: bems 19.9.2011, 21:49 | ||
так попробуй
|
Автор: Jr13san 19.9.2011, 21:55 | ||
??? - А что сюда подставить? без знаковое число int..., но какое, как понять? Например нужно для кнопки "q". |
Автор: bems 19.9.2011, 22:13 |
для ТАВа - SendVirtualKey(VK_TAB, FALSE); для q - SendChar(_T('q'), FALSE); для строки SendString(_T("Hello Here!")); второй параметр истина, если это событие отпускания клавиши а не нажатия |
Автор: Jr13san 19.9.2011, 22:28 |
bems, благодарю, всё сработало. Я был бы ещё очень больше благодарен, если бы вы подписали к коду небольшие комментарии. Просто мне стыдно копировать код, не зная как он работает. Я думаю это было бы полезно не только мне, но и тем, кто сюда набредёт. С одной стороны это одностороннее приложение и что в нём не было бы написано, всё равно это мало кому интересно из модостроителей Готики. Им важнее функции, которые они используют, чтобы послать сигнал об эмуляции нажатий путём изменения значения в памяти. |
Автор: bems 19.9.2011, 22:49 | ||
вроде разжевал
|
Автор: Jr13san 20.9.2011, 09:25 |
bems, спасибо, но ещё чуть-чуть: Зачем при нажатии нужно учитывать shift, ctrl, alt? И правда ли, если создать цикл, который будет постоянно посылать событие отпускания каждой клавише клавиатуры, то клавиатура заблокируется? Или же сначала будет обработано событие нажатия, а затем уже событие отпускания? Я к чему всё это. Если потребуется заблокировать все действия кнопок пользователя на время проигрывания каких-либо действий в приложении. Вот. Т.е. с помощью этих функций можно было бы создать блокировку нажатий клавиш от пользователя? |
Автор: bems 20.9.2011, 15:59 | ||
ну например ты хотел отправить заглавную букву. После вызова VkKeyScan в младшем байте результата будет тот же сканкод что и для прописной, потому что это одна клавиша, но в старшем будет установлен самый младший бит, что значит что этот сканкод нужно посылать при нажатом шифте, чтобы получить капс
|
Автор: Jr13san 20.9.2011, 16:23 | ||
Сейчас стало понятнее.. А не подскажете как это можно было бы сделать? Может быть через API функции какие-то? Вот например Winamp ловит горячую клавишу свою и убивает сигнал от неё, поэтому иногда нельзя использовать сигнал этой клавиши, например, в блокноте не прописывается символ. Кажется есть какая-то API, которая глобально отлавливает нажатые клавиши, у меня тоже как-то раз такое получилось в своей проге на VIsual Basic, но я не помню как... |
Автор: bems 20.9.2011, 17:02 |
хоткеи и глобальное отключение клавы это разные вещи. А глобальный перехват - третья разная вещь ![]() И вообще, один топик - один вопрос |
Автор: Jr13san 20.9.2011, 17:24 |
Ок. Вопрос полностью решен. bems, ещё раз благодарю вас за помощь. Я точно бы не додумался до таких функций в текущее время. Если лет через 5, то мб, но тогда уже было бы поздно. |
Автор: aalleexxaa 25.3.2012, 10:15 |
Здрасти! Как я понял из поста - "готовый экземпляр" приложения из архива должен при нажатии кнопки "1" отправлять кнопку "TAB". В блокноте работает, а в двух 3D приложениях не заработало. Почему так может быть, вроде как "вопрос решен" или нет? |
Автор: RDLNEO 3.3.2015, 01:09 |
ребята - мне тож помогите я вижу тут похожая тема Помогите написать одну очень нужную и очень коротенькую программу. Она должна запускаться по горячей клавише и совершать комбинацию ALT+TAB случайное число раз например это случайное число от 3 до 150 будет лучше, чтобы я сам смог изменять максимум для случайного числа при запуске программы - она может быть резидентной - может и нет. Но мне не ясен способ вызова не резидентной программы по горячей клавише (например F12) просьба помочь с данной темой взамен у меня есть миди пианино (сам писал на VB6.0 6 лет назад) к сожалению - это не исходник, а исталлятор вирусов нет! http://files.webfile.ru/441dab5b5b8d537a5a03da3cf218c7b0 |