2013-11-24 2 views
2

Я сейчас пытаюсь отправить правую кнопку мыши на компьютерное произведение, не затрагивая мой видимый указатель мыши.
Я не уверен, что игра просто не нравится, или если я делаю что-то неправильно. Вот короткая версия моего кода:C++: Отправить мышь Нажмите, используя PostMessage/SendMessage

WORD tx = 500; 
WORD ty = 500; 
HWND windowHandle = FindWindow(NULL,TEXT("Game title")); 
if (windowHandle != 0) { 
    SendMessage(windowHandle, WM_RBUTTONDOWN, MK_RBUTTON, MAKELPARAM(tx, ty)); 
    Sleep(50); 
    SendMessage(windowHandle, WM_RBUTTONUP, MK_RBUTTON, MAKELPARAM(tx, ty)); 
    Sleep(50); 
    std::cout << "message sent..." << std::endl; 
} 

Я пытался много раз и убедился, что окно игры находится на вершине и активных и т.д., но игра не будет зарегистрировать нажмите .. (» сообщение отправлено ... »печатается каждый раз, хотя)
Я знаю, что я мог бы также использовать SendInput, но сначала я хочу убедиться, что это действительно невозможно с помощью PostMessage.

ответ

0

Я использовал метод ниже, чтобы имитировать правую кнопку мыши в Qt/C++. Посмотрите, работает ли это:

mouse_event (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_RIGHTDOWN, nX, nY, 0, 0); mouse_event (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_RIGHTUP, nX, nY, 0, 0);

библиотеки, которые будут использоваться, были windows.h и WINUSER.H

+0

mouse_event просто щелкает текущее положение мыши и, когда я объединить его с MOUSEEVENTF_MOVE он перемещает свой видимый указатель мыши. :/Является ли моя игра причиной этого или это нормальное поведение? – Forivin

+0

Почему вы объединяете его с MOUSEEVENTF_MOVE? Я действительно закодировал эту длинную спину для какого-то проекта, поэтому не помню, использовал ли я MOVE + CLICK или просто CLICK. Однако убедитесь, что вы предоставили координаты в диапазоне 0-65535 для обеих осей, а не для разрешения монитора. – AsG

+0

Я действительно хотел подражать RDP-приложению, поэтому в моем случае указатель мыши, перемещающийся к месту щелчка, является желательным поведением. – AsG