|
Модераторы: Rickert, Alexeis, BorisVorontsov |
|
Jr13san |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 174 Регистрация: 29.7.2008 Где: г. Павлово Репутация: нет Всего: нет |
Цитирую один вопрос с другого форума:
У меня такая же задача. На том форуме ответа не было дано. Может быть здесь найдутся люди, которые могут помочь в проблеме? Результат данной темы прикреплён ниже: Это сообщение отредактировал(а) Jr13san - 11.11.2011, 18:10 Присоединённый файл ( Кол-во скачиваний: 189 ) DXKeyHelp.rar 204,23 Kb |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 1 Всего: 88 |
SendInput, используя сканкоды (флаг KEYEVENTF_SCANCODE в структуре KEYBDINPUT)
Это сообщение отредактировал(а) bems - 18.9.2011, 21:16 -------------------- Обижено школьников: 8 |
|||
|
||||
Jr13san |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 174 Регистрация: 29.7.2008 Где: г. Павлово Репутация: нет Всего: нет |
Даже такая конструкция не работает там. В блокноте норм печатает TAB, а в том приложении 0 реакций.
Может быть там сообщения принимаются с формы, которая в full screen режиме?
|
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 1 Всего: 88 |
Это сообщение отредактировал(а) bems - 19.9.2011, 10:42 -------------------- Обижено школьников: 8 |
|||
|
||||
Jr13san |
|
||||||||||||
Бывалый Профиль Группа: Участник Сообщений: 174 Регистрация: 29.7.2008 Где: г. Павлово Репутация: нет Всего: нет |
bems, в смысле используя сканкоды"?
Ни так:
Ни так:
не работает. Я когда-то экспериментировал на других приложениях, но тогда работал на Visual Basic. Там можно было посылать сигналы так:
Т.е. вот эти команды:
А вот как на c++ послать эти сигналы в другое приложение? Может быть мне нужно: 1) найти хэндл окна с помощью функции FindWindow() 2) послать сообщение с помощью функции SendMessage() только как узнать хэндл окна, которому нужно посылать? Просто проблема в том, что у Главного окна может быть дочернее и фиг знает как оно называется, а у этого дочернего есть ещё 1 окно, в котором отображается вся графика. Поэтому тут тяжело даётся этот момент. Мне бы посмотреть на примере калькулятора, как это всё работает, а там я попробовал бы сам. Вот эмуляция нажатия кнопки "ПУСК"
Ну предположим хэндл окна я найду, а вот как послать нажатие кнопки клавиатуры 'q' через SendMessage я не пойму. Параметры усложняют всё. bems, помоги пожалуйста разобраться хотя бы на простом примере калькулятора. Чем Microsoft занимается? давным давно написали бы все эти процедуры, причём с глобальной точки зрения. А ты вот сидишь и думаешь, то ли там так посылается сигнал, то ли так. Как нибудь сделали бы через драйвера той же самой клавиатуры, а не через системные сообщения...
Оно может и сработает, но это мне не надо. Мне нужно послать нажатие клавиши. Это сообщение отредактировал(а) Jr13san - 19.9.2011, 20:06 |
||||||||||||
|
|||||||||||||
Dem_max |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: нет Всего: 39 |
Попробуй послать комбинацию Alt+tab, полно экранная игра должна свернуться. Вот и проверит работает это сочетание.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 1 Всего: 88 |
так попробуй
-------------------- Обижено школьников: 8 |
|||
|
||||
Jr13san |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 174 Регистрация: 29.7.2008 Где: г. Павлово Репутация: нет Всего: нет |
??? - А что сюда подставить? без знаковое число int..., но какое, как понять? Например нужно для кнопки "q". Это сообщение отредактировал(а) Jr13san - 19.9.2011, 22:07 |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 1 Всего: 88 |
для ТАВа - SendVirtualKey(VK_TAB, FALSE);
для q - SendChar(_T('q'), FALSE); для строки SendString(_T("Hello Here!")); второй параметр истина, если это событие отпускания клавиши а не нажатия Это сообщение отредактировал(а) bems - 19.9.2011, 22:17 -------------------- Обижено школьников: 8 |
|||
|
||||
Jr13san |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 174 Регистрация: 29.7.2008 Где: г. Павлово Репутация: нет Всего: нет |
bems, благодарю, всё сработало.
Я был бы ещё очень больше благодарен, если бы вы подписали к коду небольшие комментарии. Просто мне стыдно копировать код, не зная как он работает. Я думаю это было бы полезно не только мне, но и тем, кто сюда набредёт. С одной стороны это одностороннее приложение и что в нём не было бы написано, всё равно это мало кому интересно из модостроителей Готики. Им важнее функции, которые они используют, чтобы послать сигнал об эмуляции нажатий путём изменения значения в памяти. Это сообщение отредактировал(а) Jr13san - 19.9.2011, 22:31 |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 1 Всего: 88 |
вроде разжевал
-------------------- Обижено школьников: 8 |
|||
|
||||
Jr13san |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 174 Регистрация: 29.7.2008 Где: г. Павлово Репутация: нет Всего: нет |
bems, спасибо, но ещё чуть-чуть:
Зачем при нажатии нужно учитывать shift, ctrl, alt? И правда ли, если создать цикл, который будет постоянно посылать событие отпускания каждой клавише клавиатуры, то клавиатура заблокируется? Или же сначала будет обработано событие нажатия, а затем уже событие отпускания? Я к чему всё это. Если потребуется заблокировать все действия кнопок пользователя на время проигрывания каких-либо действий в приложении. Вот. Т.е. с помощью этих функций можно было бы создать блокировку нажатий клавиш от пользователя? |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 1 Всего: 88 |
ну например ты хотел отправить заглавную букву. После вызова VkKeyScan в младшем байте результата будет тот же сканкод что и для прописной, потому что это одна клавиша, но в старшем будет установлен самый младший бит, что значит что этот сканкод нужно посылать при нажатом шифте, чтобы получить капс
-------------------- Обижено школьников: 8 |
|||
|
||||
Jr13san |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 174 Регистрация: 29.7.2008 Где: г. Павлово Репутация: нет Всего: нет |
Сейчас стало понятнее.. А не подскажете как это можно было бы сделать? Может быть через API функции какие-то? Вот например Winamp ловит горячую клавишу свою и убивает сигнал от неё, поэтому иногда нельзя использовать сигнал этой клавиши, например, в блокноте не прописывается символ. Кажется есть какая-то API, которая глобально отлавливает нажатые клавиши, у меня тоже как-то раз такое получилось в своей проге на VIsual Basic, но я не помню как... Это сообщение отредактировал(а) Jr13san - 20.9.2011, 16:48 |
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 1 Всего: 88 |
хоткеи и глобальное отключение клавы это разные вещи. А глобальный перехват - третья разная вещь
И вообще, один топик - один вопрос -------------------- Обижено школьников: 8 |
|||
|
||||
Вы можете найти полезным что... | |
|
|
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |