| 
 
 
 
 Легенда:
  новое сообщение 
  закрытая нитка 
  новое сообщение 
  в закрытой нитке 
  старое сообщение   | 
Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
Новичкам также крайне полезно ознакомиться с данным документом.
| [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 продолжает интересовать, так что тему не закрываю.
 |  
 
 
 |  |