2015-06-11 2 views
0

Я нахожусь в процессе расширения небольшого бота, который я сделал для «кликер» браузерных игр (кликер героев, конфеты кликер и т.д.)SendMessage ButtonUp/вниз, чтобы справиться с х/у координаты

Первоначально я отправлял кликает вот так:

var screenPoint = Cursor.Position; 
var handle = WindowFromPoint(screenPoint); 
if (handle != IntPtr.Zero) 
{ 
    SendMessage(handle, Win32.WM_RBUTTONDOWN, IntPtr.Zero, IntPtr.Zero); 
    SendMessage(handle, Win32.WM_RBUTTONUP, IntPtr.Zero, IntPtr.Zero);    
} 

Но это, очевидно, вызывает проблему, когда окно должно быть впереди.

Я хочу, чтобы иметь возможность отправлять щелчки самой оконной ручки, так что я получаю ручку так:

winHandle = Win32.FindWindow("PlayerClient", "Clicker Heroes"); 
SendMessage(winHandle , Win32.WM_RBUTTONDOWN, IntPtr.Zero, IntPtr.Zero); 
... 

Проблема теперь, как я могу указать точку или XY-координаты, которые я хотите отправить клик? В документации упоминается что-то о LParam с точкой, но не приводится никаких примеров.

Благодарим за помощь.

ответ

0

От:

Вам нужно передать координаты SendMessage через параметр lParam.

LRESULT CALLBACK SendMessage(
    _In_ HWND hwnd, 
    _In_ UINT uMsg, 
    _In_ WPARAM wParam, 
    _In_ LPARAM lParam 
); 

LPARAM

Младшие слово определяет х-координату курсора. Координата относится к верхнему левому углу клиентской области.

Слово высокого порядка определяет y-координату курсора. Координата относится к верхнему левому углу клиентской области.

Если вы хотите, вспомогательная функция для построения LPARAM Я предлагаю начать со следующим за 32 битной программе:

public static LPARAM BuildLParam(ushort low, ushort high) 
{ 
    return (LPARAM)(((uint)high << 16) | (uint)low); 
} 
Смежные вопросы