Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
132 / 84 / 41
Регистрация: 30.11.2012
Сообщений: 1,015
1

Нажать мышкой в определенных координатах неактивного окна

03.01.2015, 22:42. Просмотров 2433. Ответов 1
Метки нет (Все метки)

Доброго дня, вечера и ночи дорогие форумчане Cyberforum-а)
Задача простая, нужно послать в неактивное окно игры нажатие левой клавишей мыши в определенных координатах. Сразу уточнение, окно игры может быть перекрыто другими окнами, нажатие клавиши мышки должно работать по Handle окна.

В игре имитация нажатия кнопок отлично работает, а вот с нажатием мышки возникли некоторые проблемы.
Нахожу окно игры по Handle, посылаю в окно игры нажатие клавиши V, всё ок.
C++
1
2
3
4
5
6
void V(HWND Handle)
{
    //нажимаю V
    PostMessage(Handle, WM_KEYDOWN, 0x56, 0);
    PostMessage(Handle, WM_KEYUP, 0x56, 0);
}
Нахожу окно игры по Handle, посылаю в окно игры нажатие левой клавишей мышки, нажимается только если я в ручную наведу курсор в то место которое мне нужно.
C++
1
2
PostMessage(Handle, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(65, 25)); 
PostMessage(Handle, WM_LBUTTONUP, 0, MAKELPARAM(65, 25));
В чем проблема знаю, перед нажатием мышкой нужно с эмитировать передвижение курсора в нужные координаты, а потом уже нажимать. Не знаю как реализовать. SetCursorPos не подходит, так как он не работает с окнами.

Прошу подсказать способы реализации моей задачи, буду премного благодарен примерам и ссылкам!

Добавлено через 57 минут
Ещё получается навести и нажать вот так:

C++
1
2
3
4
5
PostMessage(Handle_ArcheAge, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(75, 64)); 
Sleep(300);
PostMessage(Handle_ArcheAge, WM_MOUSEMOVE, MK_LBUTTON, MAKELPARAM(75, 64));
Sleep(300);
PostMessage(Handle_ArcheAge, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(75, 64));
Но курсор там реально передвигается, а нужно чтобы эмитировал передвижение, но реально его не передвигал..

Добавлено через 2 часа 17 минут
Может кому будет полезно, решил задачу так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    int x = 700 - 3;
    int y = 63 - 25;
    PostMessage(Handle, WM_SETCURSOR, 0, MAKELPARAM(x, y));
    Sleep(150);
    PostMessage(Handle, WM_MOUSEMOVE, 0, MAKELPARAM(x, y));
    Sleep(150);
    PostMessage(Handle, WM_MOUSEHOVER, 0, MAKELPARAM(x, y));
    Sleep(150);
    PostMessage(Handle, WM_MOUSEACTIVATE, 0, MAKELPARAM(x, y));
    Sleep(150);
    PostMessage(Handle, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(x, y));
    Sleep(150);
    PostMessage(Handle, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(x, y));
    Sleep(150);
    PostMessage(Handle, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(x, y));
Используя Spy++ выяснил, что в силу особенностей игры, нужно:
1. наводить курсор на координаты
2. посылать команду что окно якобы активно
3. собственно нажимать мышкой
--
Если у кого-то есть что дополнить или реализовать по другому, то буду рад увидеть примеры)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.01.2015, 22:42
Ответы с готовыми решениями:

Получить цвет пикселя из неактивного окна, перекрытого другими окнами окна
Можно ли получить цвет пикселя из неактивного или перекрытого другими окна? Какие есть способы?...

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

Вывод изображения при нажатии мышкой в координатах
Помогите пожалуйста. Мне надо вывести изображение при нажатии левой кнопкой мыши в определенной...

Горячие клавиши неактивного окна
Всем привет!, написал программку для одной игры и добавил некоторые горячие клавиши, но дело в том...

1
118 / 140 / 46
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
05.01.2015, 15:24 2
Сообщение WM_ACTIVATE посылается, когда окно активизируется или деактивизируется. Это сообщение посылается сначала оконной процедуре деактивизируемого окна верхнего уровня; затем оно посылается оконной процедуре активизируемого окна верхнего уровня.
Вместо PostMessage использовать SendInput() тогда будешь полностью имитировать движение мышью.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.01.2015, 15:24

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Скриншот неактивного окна программы
Здравствуйте! Мучает вопрос который день: как сделать скриншот окна моей программы, если оно...

Получение нажатия клавиши из неактивного окна
Привет всем! Как можно получить нажатую клавишу, если окно приложения не активно?

Сделать скриншот неактивного окна игры
Мне нужна функция DllCall (AutoIt) в C#. Заранее благодарю. Добавлено через 2 часа 46 минут...

Скриншот неактивного окна игры. Пример
Мне нужен пример программы ,которая делает скриншот неактивного окна игры и сохраняет всё это в...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.