Перехватить ввод мышью - PullRequest
       33

Перехватить ввод мышью

2 голосов
/ 04 октября 2010

Мне было интересно, есть ли способ перехватить и изменить ввод мыши, прежде чем он попадет в окна?

Что я хочу сделать, это перехватить события движения мыши, применить некоторые пользовательские масштабирование и ускорение кзначения, а затем продолжить их передачу.Мне нужно что-то, что может сделать это, прежде чем входные данные попадут в необработанный входной API или DirectInput.

Ответы [ 5 ]

3 голосов
/ 04 октября 2010

Чтобы повлиять на весь ввод мыши, включая DirectInput, при входе в систему, на экране SAS и т. Д., Вам необходимо загрузить драйвер фильтра в стек драйверов мыши.

Другие люди сделали это, например http://www.maf -soft.de / mafmouse /

В Windows DDK должен быть образец moufiltr, который можно использовать в качестве отправной точки. Скорее всего, вы захотите использовать виртуальную машину для разработки, поскольку из-за ошибок в драйвере на вашей машине для разработки может быть трудно исправить.

2 голосов
/ 21 мая 2013

Вы видели этот метод перехвата ввода с клавиатуры и мыши без необходимости создания драйвера фильтра или перехвата?

http://oblita.com/Interception.html

0 голосов
/ 04 октября 2010

Вы можете попробовать оконный хук - это функции, которые вы настроили для получения сообщений Windows, прежде чем они будут переданы в остальную часть системы - CBT хук (для компьютеров обучение) это то, что может дать вам лучшие результаты.

Я не знаю, будет ли это работать с DirectInput или другим новым материалом, добавленным MS, чтобы разрушить всю старую внутреннюю согласованность. Его легко настроить, поэтому попробуйте и посмотрите.

0 голосов
/ 04 октября 2010

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

Если это не удается, GetMsgProc является альтернативой, которая позволяет перехватывать все сообщения, отправленные в любое окно. Хотя этот хук действительно позволяет вам изменить сообщение, вероятно, уже слишком поздно, чтобы иметь какое-либо влияние на такие API, как DirectInput.

0 голосов
/ 04 октября 2010

Насколько я знаю, лучший способ - подключиться к циклу сообщений Windows. В вашем случае вы должны передать HWND 0 (если я правильно помню это HWND рабочего стола), чтобы все сообщения сначала проходили через вашу функцию.

http://msdn.microsoft.com/en-us/library/ms633591%28VS.85%29.aspx

Больше на крючках: http://msdn.microsoft.com/en-us/library/ms644959%28VS.85%29.aspx

Используйте его следующим образом:

m_nOldWindowProc = ::SetWindowLong(0 /<em>I think...</em>/, GWL_WNDPROC, (LPARAM)(WNDPROC)WindowProcCallback);

и обратный вызов:

LRESULT CALLBACK CStubWindow::WindowProcCallback(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_WINDOWPOSCHANGING: ((WINDOWPOS*)lParam)->cx = STATUS_BAR_WIDTH;</p> <pre><code> ((WINDOWPOS*)lParam)->flags = SWP_NOOWNERZORDER | SWP_NOMOVE; break; default: break; } return ::CallWindowProc(m_nOldWindowProc, hwnd, message, wParam, lParam);

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...