2 / 2 / 0
Регистрация: 28.01.2012
Сообщений: 99
1

Инициирование нажатия клавиатуры

23.07.2013, 17:06. Показов 1916. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Кнопкой является пробел. Код
Pascal
1
2
3
keybd_event(vk_Space, 0, 0, 0);
                                sleep(75);
keybd_event(vk_Space, 0, KEYEVENTF_KEYUP, 0);
Проблема заключается в следующем. Некая 3D игра должна с реагировать на имитацию нажатия пробела! Но этого не происходит! Если же фокус перевести на некое поля для ввода текста то пробел там определяется, что собственно подтверждает исправность кода! В чём может быть проблема? И как её можно решить? Заранее благодарен!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.07.2013, 17:06
Ответы с готовыми решениями:

Переназначение нажатия клавиши клавиатуры
задача: при нажатии клавиш 188 (<,б), 190 (>.ю), 191 (?/.) сэмулировать нажатие клавиши 110...

Имитация нажатия клавиш клавиатуры
Всем привет! Прошу помочь мне. Я искал в интернете но там как то сложно. Я думаю можно обойтись...

Перехват нажатия стрелок клавиатуры в TPanel.
Я вот тут уже 3.5 часа бьюсь над задачей - нужно перехватить нажатие стрелок (на клавиатуре) над...

Что такое Инициирование работы модуля GRACH
Девушка сейчас на экзамене программирования. помогите ей пожалуйста. Инициирование работы...

12
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
23.07.2013, 17:11 2
Цитата Сообщение от Том стоун Посмотреть сообщение
В чём может быть проблема?
В том что ни одно из окон "некоей 3D игры" не имеет фокуса ввода на момент вызова keybd_event().

Цитата Сообщение от Том стоун Посмотреть сообщение
как её можно решить?
Принять меры к получению нужным окном "некоей 3D игры" фокуса ввода.
0
22 / 23 / 1
Регистрация: 14.05.2012
Сообщений: 291
23.07.2013, 17:18 3
Том стоун, для начала нужно найти хэндл окна куда посылать нажатие клавиши (findwindow делфи-гугли). Затем послать месаг этому окну о нажатии пробела (sendmessage делфи - гугли)!

Добавлено через 1 минуту
Том стоун, а вообще, можно просто загуглить "Эмуляция нажатия клавиш в окно делфи", масса готовых решений!
0
2 / 2 / 0
Регистрация: 28.01.2012
Сообщений: 99
23.07.2013, 17:30  [ТС] 4
Цитата Сообщение от mss Посмотреть сообщение
В том что ни одно из окон "некоей 3D игры" не имеет фокуса ввода на момент вызова keybd_event().
В этом бы случае реакции не было бы и на моё нажатия пробела, а она есть!

Добавлено через 2 минуты
Цитата Сообщение от king555-55 Посмотреть сообщение
можно просто загуглить
Действительно зачем нужны форумы если можно просто загуглить!
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
23.07.2013, 17:33 5
Цитата Сообщение от Том стоун Посмотреть сообщение
а она есть
Значит бирюлька использует иной механизм доступа к событиям клавиатурного ввода, т.е. не механизм оконных сообщений.. DirectInput, например
0
2 / 2 / 0
Регистрация: 28.01.2012
Сообщений: 99
23.07.2013, 17:37  [ТС] 6
Цитата Сообщение от mss Посмотреть сообщение
DirectInput
Если это допустить что это так то как в током случае осуществить имитацию?
0
22 / 23 / 1
Регистрация: 14.05.2012
Сообщений: 291
23.07.2013, 17:46 7
Цитата Сообщение от Том стоун Посмотреть сообщение
Действительно зачем нужны форумы если можно просто загуглить!
Дело в том, что на форумах сидят обычные люди со своими делами и заботами, некоторые из них могут быть немного заняты, некоторые просто ленивые. Успех общения на форуме заключается не в том, чтобы придираться к каждому посту, более-менее отвечающему на вопрос ТС'а, а в том, чтобы по максимуму изъять полезную для себя инфу из этих постов, если есть таковая, и ответить благодарностью либо проигнорить постера! Вот я например, был занят очень важным делом - отдыхал в CSS, решил свернуться между делом и заглянуть в делфи раздел, посмотрел вашу тему, ответил более-менее информативно, надеялся вы дальше сами допрете куда копать, а оказалось вам хотелось получить готовый код! Отхерачили 2х ответивших вам постеров, и сидите ждете когобы еще раскидать. Ужас, у вас у самого настроение не упало после сиих действ? Вы бы вместо того, чтобы оттраливаться, взяли бы уже и загуглили или зафорумили, чем сидеть и злобно отвлекать людей! Вот потратил время на ответ вам, в контре меня кикнули к херам, удачи вам, я удаляюсь из обсуждения!
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
23.07.2013, 17:58 8
Цитата Сообщение от Том стоун Посмотреть сообщение
зачем нужны форумы если можно просто загуглить
Форум - последняя инстанция для "жалоб", если гугление не помогло)
А не помочь оно не может, потому что Гугль знает всё)
Ну, например, вот чего он знает
0
2 / 2 / 0
Регистрация: 28.01.2012
Сообщений: 99
23.07.2013, 18:11  [ТС] 9
Я тут вспомнил что эта игра реагирует на имитацию мыши.
Pascal
1
2
3
mouse_event(MOUSEEVENTF_RIGHTDOWN,X,Y,0,0);
 sleep(50);
mouse_event(MOUSEEVENTF_RIGHTUP,X,Y,0,0);
А как известно mouse_event и keybd_event схожи просто одна для мыши другая для клавиатуры.
А DirectInput подходи и для мыши и для клавиатуры. Какова вероятность что DirectInput в этой игре использовали только для определения клавиатуры?
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
23.07.2013, 18:14 10
Цитата Сообщение от Том стоун Посмотреть сообщение
Какова вероятность что DirectInput в этой игре использовали только для определения клавиатуры?
Ненулевая.
Но если бирюлька реагирует ожидаемым образом на WM_MOUSE, то есть резон проверить не реагирует ли она стольже ожидаемо на WM_INPUT - не исключено что удастся обойтись малой кровью, без перехвата DI-вызовов бирюлькой)
0
2 / 2 / 0
Регистрация: 28.01.2012
Сообщений: 99
23.07.2013, 19:10  [ТС] 11
Цитата Сообщение от mss Посмотреть сообщение
реагирует ли она стольже ожидаемо на WM_INPUT
Реакции ноль! Перехват DirectInput в моём случае не подходит.
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
23.07.2013, 20:32 12
Цитата Сообщение от Том стоун Посмотреть сообщение
Реакции ноль
На основании чего такое заявление ?

Цитата Сообщение от Том стоун Посмотреть сообщение
Перехват DirectInput в моём случае не подходит
Аргументы будут ?
0
2 / 2 / 0
Регистрация: 28.01.2012
Сообщений: 99
23.07.2013, 21:41  [ТС] 13
Цитата Сообщение от mss Посмотреть сообщение
Аргументы будут
Это слишком сложно для меня!
Я нашёл код который всё таки выполняет имитацию!
п.с. Пока я суда не написал я просто не знал что искать!

вот кст код
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure SimulateKeyDown(Key : byte);
var
  flags: DWORD;
begin
  if Key in ExtendedKeys then flags := KEYEVENTF_EXTENDEDKEY else flags := 0;
  keybd_event(Key, MapVirtualKey(Key, 0), flags, 0);
end;
 
 
procedure SimulateKeyUp(Key : byte);
var
  flags: DWORD;
begin
  if Key in ExtendedKeys then flags := KEYEVENTF_EXTENDEDKEY else flags := 0;
  keybd_event(Key, MapVirtualKey(Key, 0), KEYEVENTF_KEYUP or flags, 0);
end;
0
23.07.2013, 21:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.07.2013, 21:41
Помогаю со студенческими работами здесь

Отлавливать нажатия клавиатуры
Есть консольное приложение под Windows (в Visual Studio). Нужно, чтобы при нажатие на какую-либо...

C++ события нажатия клавиатуры
помогите сделать мини программу, при нажатии на alt-x-f выводилось messagebox с текстом на...

Нажатия клавиш клавиатуры
Изучаю AutoIt ноль полных дней. Экспериментирую на доте2. Функция...

Считывание нажатия клавиш с клавиатуры
как сделать так чтобы программа завершалась при нажатие какой-то определенной клавиши?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru