Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
|
А если использовать PostMessage? 16.12.08 19:43 Число просмотров: 4525
Автор: dl <Dmitry Leonov>
|
|
<programming>
|
[Win32] Эмуляция работы пользователя с мышью 16.12.08 19:06
Автор: Vedrus <Serokhvostov Anton> Статус: Member Отредактировано 16.12.08 19:07 Количество правок: 2
|
Суть проблемы. Пишу бота для игры в шахматы, точнее уже написал для одной программы, а теперь адаптирую для другой. Этой другой оказалась игра на рамблере: http://games.rambler.ru/game/chess/.
Вот этот код здесь работать не хочет:
SendMessage(m_hwndBoard, WM_LBUTTONDOWN, 0, MAKELONG(xFrom, yFrom));
SendMessage(m_hwndBoard, WM_MOUSEMOVE, 0, MAKELONG(xTo, yTo));
SendMessage(m_hwndBoard, WM_LBUTTONUP, 0, MAKELONG(xTo, yTo));
---
хотя в другой программе работал. Здесь же, он поднимает шахматную фигуру, перемещает её, но опускать на доску не хочет. С чем это может быть связано?
Я наконец-то внял наставлениям amirul'а и HandleX и разобрасля с программой Spy++ (классная вещь!). Она выдаёт вот такую последовательность сообщений, когда я работаю с мышью "легально"
WM_MOUSEACTIVATE
WM_MOUSEACTIVATE
WM_SETCURSOR
WM_SETCURSOR
WM_LBUTTONDOWN
WM_MOUSEMOVE
...
WM_MOUSEMOVE
WM_LBUTTONUP
WM_SETCURSOR
WM_SETCURSOR
---
По аналогии с этим сформировал свои сообщения через SendMessage, но желаемого результата так и недобился.
Если кратко вопрос в следующем: как поднятую в рамблере шахматную фигуру поставить туда, куда я хочу?
|
|
используй mouse_event() или лучше SendInput() 17.12.08 00:19
Автор: + <Mikhail> Статус: Elderman
|
используй mouse_event() или лучше SendInput()
VOID mouse_event( DWORD dwFlags,
DWORD dx,
DWORD dy,
DWORD dwData,
ULONG_PTR dwExtraInfo
);
UINT SendInput( UINT nInputs,
LPINPUT pInputs,
int cbSize
);
---
> Суть проблемы. Пишу бота для игры в шахматы, точнее уже > написал для одной программы, а теперь адаптирую для другой. > Этой другой оказалась игра на рамблере: > http://games.rambler.ru/game/chess/. > > Вот этот код здесь работать не хочет: > > SendMessage(m_hwndBoard, WM_LBUTTONDOWN, 0,
> MAKELONG(xFrom, yFrom));
> SendMessage(m_hwndBoard, WM_MOUSEMOVE, 0,
> MAKELONG(xTo, yTo));
> SendMessage(m_hwndBoard, WM_LBUTTONUP, 0,
> MAKELONG(xTo, yTo));
> ---
> хотя в другой программе работал. Здесь же, он поднимает > шахматную фигуру, перемещает её, но опускать на доску не > хочет. С чем это может быть связано? > > Я наконец-то внял наставлениям amirul'а > и HandleX и разобрасля с программой > Spy++ (классная вещь!). Она выдаёт вот такую > последовательность сообщений, когда я работаю с мышью > "легально" > > WM_MOUSEACTIVATE
> WM_MOUSEACTIVATE
> WM_SETCURSOR
> WM_SETCURSOR
> WM_LBUTTONDOWN
> WM_MOUSEMOVE
> ...
> WM_MOUSEMOVE
> WM_LBUTTONUP
> WM_SETCURSOR
> WM_SETCURSOR
> ---
> По аналогии с этим сформировал свои сообщения через > SendMessage, но желаемого результата так и недобился. > > Если кратко вопрос в следующем: как поднятую в рамблере > шахматную фигуру поставить туда, куда я хочу?
|
| |
На худой конец и mouse_event сойдёт, но не хотелось бы её... 17.12.08 02:04
Автор: Vedrus <Serokhvostov Anton> Статус: Member
|
На худой конец и mouse_event сойдёт, но не хотелось бы её использовать, т.к. тогда компьютер только игрой и будет занят, а хотелось бы чтобы за ним ещё что-то делать можно было.
C SendMessage так можно, главное мышь на окно с программой не наводить.
А чем SendInput лучше mouse_event?
|
|
А ты уверен - может, эта фигура по правилам шахмат - туда не ходит? 16.12.08 22:17
Автор: Neznaika <Alex> Статус: Member
|
|
| |
уверен, фигура зависает над той клеткой, куда должна упасть 17.12.08 01:58
Автор: Vedrus <Serokhvostov Anton> Статус: Member
|
|
|
А если использовать PostMessage? 16.12.08 19:43
Автор: dl <Dmitry Leonov>
|
|
| |
не помогает 17.12.08 01:58
Автор: Vedrus <Serokhvostov Anton> Статус: Member
|
|
| | |
В общем я додумался до того, что в этом флеш клиенте стоит... 25.01.09 08:46
Автор: Vedrus <Serokhvostov Anton> Статус: Member
|
В общем я додумался до того, что в этом флеш клиенте стоит какая-то защита от автоматического нажатия мыши. Я обнаружил, что если перед началом эмуляции мыши нажать левой кнопкой на окно клиента, то дальше SendMessage и PostMessage прокатывает.
Плюс на другом флеш клиенте (правда не на браузерном, а на "программном") SendMessage и PostMessage работают на ура.
Обходное решение через mouse_event найдено, но общее решение через SendMessage и PostMessage продолжает интересовать, так что тему не закрываю.
|
|
|