Win32 отправляет события синхронизации другому процессу

Я пытаюсь написать программу, которая позволяет мне перемещать камеру в Dota 2 более интуитивно. Удерживая пробел, он имитирует среднюю кнопку мыши, а когда курсор достигает границы экрана, он возвращается к центру. Центрирование курсора выглядит так (упрощенно):

PostMessage(w, WM_KEYUP, VK_MBUTTON, 0);
PostMessage(w, WM_MOUSEMOVE, 0, MAKELPARAM(screenWidth/2, screenHeight/2));
SetCursorPos(screenHeight/2, screenHeight/2)
PostMessage(w, WM_KEYDOWN, VK_MBUTTON, 0);

w это дескриптор окна Dota 2. Проблема в том, что когда это происходит, Dota все еще думает, что кнопка нажата, и поэтому камера прыгает. Я заставил его работать частично, имитируя ключевые события с помощью SendInput вместо прямой отправки сообщений, но для этого требовалась пауза в 10 мс между событиями, а это не то, что я хочу. Есть ли способ узнать, было ли сообщение обработано другим процессом?

0

Решение

Игры обычно используют DirectInput для ввода мышью, что даст им истинное состояние кнопки мыши. GetAsyncKeyState также проверит фактическое состояние кнопки мыши.

Ваши сообщения не будут иметь большого (или какого-либо) эффекта, если игра использует другие механизмы обработки мыши.

Вы можете попробовать использовать SendInput вместо этого, который изменяет некоторые внутренние состояния, которые Windows сообщает приложениям.

1

Другие решения

SendMessage (и SendMessageTimeout) указывают в своем возвращаемом значении, было ли сообщение обработано или нет.

0

По вопросам рекламы [email protected]