Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Эмуляция нажатия кнопок мыши. Способы реализации 
:(
    Опции темы
BUGOR
Дата 16.9.2006, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 12.3.2006

Репутация: 1
Всего: 16



Нужно перехватить нажатие левой кнопки мыши и до её отпускания каждые n секунд эмулировать её нажатие. 
Всё это я сделал, работает. Но суть в том, что надо эмулировать нажатие в приложении которое работает на DirectX, т.е. в полноэкранной игре и тут все стандартные методы не работают(а может я не все знаю), делал двумя способами:

Код

SendMessage(hWindow, WM_LBUTTONDOWN, MK_LBUTTON, 0);
SendMessage(hWindow, WM_LBUTTONUP, MK_LBUTTON, 0);


и так:

Код

mouse_event(MOUSEEVENTF_LEFTDOWN or MOUSEEVENTF_LEFTUP, 0, 0, cbuttons, dwExtraInfo);


Всё это работает на какои-нибудь оконном приложении или непосредственно в среде винды, но никак не хочет работать, если запущена игра(Mafia например).

Так вот собственно вопрос, какие методы эмуляции нажатия кнопок мыши существуют? Неважно на каком языке/языке программирования будет информация, буду благодарен за любую помощь.


--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
0x07L
Дата 16.9.2006, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 10.6.2006
Где: Москва

Репутация: 4
Всего: 5



Есть еще SendInput. Попробуй.
PM MAIL   Вверх
BUGOR
Дата 16.9.2006, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 12.3.2006

Репутация: 1
Всего: 16



http://msdn.microsoft.com/library/default....tures/input.asp

Цитата:

Цитата

This structure contains information identical to that used in the parameter list of the keybd_event or mouse_event function.


Что подтверилось при дизассемблировании mouse_event:
Код

77D7EE6C   6A 1C            PUSH 1C
77D7EE6E   8D45 E4          LEA EAX,DWORD PTR SS:[EBP-1C]
77D7EE71   50               PUSH EAX
77D7EE72   6A 01            PUSH 1
77D7EE74   E8 4BABFDFF      CALL user32.SendInput


А коли mouse_event практически напрямую юзает SendInput, значит и SendInput работать не будетsmile



--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
GremlinProg
Дата 16.9.2006, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



DirectX с клавиатурой и мышой работает не через стандартный I/O, там специальные интнрфейсы, ищи описание IDirectInput


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
BUGOR
Дата 17.9.2006, 03:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 12.3.2006

Репутация: 1
Всего: 16



Да я это понимаю... Легко сказать ищи человеку, который с DirectX и не работал ниразу, может пнёте меня в нужном направлении?


--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
GremlinProg
Дата 17.9.2006, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Здесь работа идет напрямую с драйвером, который, на сколько мне известно, не эмулирует нажатия клавиш, эмуляцией занимается винда. Поэтому, ничего, кроме как "ищи", посоветовать не могу. Есть шанс, что существуют недокументированные возможности драйвера мыши, но это очень слабая надежда. Тем более, если д-икс приложение запросит эксклюзивный доступ к устройству ввода, то получить еще один, параллельный доступ будет крайне сложно.


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
fer
Дата 17.9.2006, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 17.9.2006

Репутация: нет
Всего: нет



==========-=-=-=

Это сообщение отредактировал(а) fer - 17.9.2006, 11:14
PM MAIL   Вверх
Kirill89
Дата 17.10.2006, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 17.10.2006
Где: Питер

Репутация: нет
Всего: 4



Скорее всего, дело не в том, что нажатия мышки не эмулируются, дело в том, что твоя прога не ловит нажатие мышки. Попробуй привязать курсор не к HWND, а к rect. Или просто поробуй проверить, будет ли она "кликать" постоянно, тоесть пусть она нажимается в какой-нибудь координате постоянно, будет ли это работать в игре??


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0676 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.