Передача нажатий клавиш в программу

Обсуждения по программированию для ОС Windows безотносительно используемого языка программирования. Windows NT, Win32, Windows API, ядро и драйверы.
jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Передача нажатий клавиш в программу

Сообщение jangle » 01.09.2011 (Чт) 12:34

Что-то я торможу. Есть 3D софтина, которая каким-то хитрым образом получает нажатия клавиш на клавиатуре, через DirectX или еще как-то. Нужно программно передавать ей нажатия клавиш, с целью перемещения по трехмерке. Функция keybd_event с этой программой не прокатывает, видимо 3D софтина получает коды нажатий каким-то иным путем (?) :shock: Возник вопрос, как все таки передать ей события с клавиатуры? Сама программа, как-то их получает.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 01.09.2011 (Чт) 12:52


jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re:

Сообщение jangle » 01.09.2011 (Чт) 13:05

Qwertiy писал(а):SendMessage, PostMessage?

http://forum.ixbt.com/topic.cgi?id=26:34308


Ок, спасибо, буду пробовать

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Передача нажатий клавиш в программу

Сообщение Admiralisimys » 01.09.2011 (Чт) 14:57

Qwertiy это ведь для прикладного софта подойдёт.
Для софта с 3д рендером порядок обработки несколько отличен
Изображение
Если софт который использует jangle написан по правилам как на скрине то устройства ввода обрабатываются как-раз в Handle DirectX Stuff, а сама клава “создана” примерно следующий образом
Код: Выделить всё
IDirectInput8 *di;
IDirectInputDevice8 *p_keyboard;
...
DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, reinterpret_cast<void **>(&di), NULL);//(void **)&di, NULL);
di->CreateDevice(GUID_SysKeyboard, &p_keyboard, NULL);

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Передача нажатий клавиш в программу

Сообщение jangle » 01.09.2011 (Чт) 15:03

Admiralisimys - значит нажатия клавиш на клаве надо передавать через DirectInput ?

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Передача нажатий клавиш в программу

Сообщение Admiralisimys » 01.09.2011 (Чт) 15:12

jangle нужно пробовать.
Я увидел пост Qwertiy и зная приведённую диаграмму усомнился в еффективности приведённых функций (SendMessage, PostMessage).

Максимум на данном направлении требовалось передавать клики мыши активному окну 3d приложения.
Обошлось mouse_event ;)

P.S.
Ради эксперимента стоит попробовать "пробивность" 3d окна через http://www.autohotkey.com/
Последний раз редактировалось Admiralisimys 01.09.2011 (Чт) 15:15, всего редактировалось 1 раз.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Передача нажатий клавиш в программу

Сообщение jangle » 01.09.2011 (Чт) 15:15

Что такое "пробивность" 3D окна?

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Передача нажатий клавиш в программу

Сообщение Admiralisimys » 01.09.2011 (Чт) 15:17

jangle возможность вовсе эмулировать нажатия/клики окну. Сорри за жаргон. :oops:

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Передача нажатий клавиш в программу

Сообщение jangle » 01.09.2011 (Чт) 15:20

Admiralisimys писал(а):jangle возможность вовсе эмулировать нажатия/клики окну. Сорри за жаргон. :oops:


Нет, окно ничем не автоматизируется. Пришлось попробовать разные средства начиная от SendKeys в VBScript, заканчивая keyb_event и PostMessage. Более того, класс окна на котором рисуется 3D виден через Spy++, но FindWindow его не находит, зато находит например родительское окно, на котором лежит 3D вьювер.

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Передача нажатий клавиш в программу

Сообщение Admiralisimys » 01.09.2011 (Чт) 15:27

jangle это ещё не пробовал применить [C++] DirectInput Hooking component and sample ?

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Передача нажатий клавиш в программу

Сообщение jangle » 01.09.2011 (Чт) 15:39

Admiralisimys писал(а):jangle это ещё не пробовал применить [C++] DirectInput Hooking component and sample ?


Там проект не скачивается (( Не знаешь где нагуглить эту DirectInput-Hook.dll ?

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Передача нажатий клавиш в программу

Сообщение Admiralisimys » 01.09.2011 (Чт) 16:08

jangle места есть http://www.pudn.com/downloads51/sourcec ... 77138.html , но нужно им нужно чего нибуть залить (или купить сразу ВИП акаунт) тогда дадут скачать весь архив. Некоторый исходные файлы из архива можно и так просматривать.

DInput-Hook-2005-22-01.zip

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Передача нажатий клавиш в программу

Сообщение jangle » 01.09.2011 (Чт) 16:24

Admiralisimys - спасибки, буду разбираться :P


Вернуться в Windows-программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

    TopList