WinForms Mouse Capture - PullRequest
       2

WinForms Mouse Capture

3 голосов
/ 21 мая 2010

У меня есть приложение Windows Forms, и мне нужно фиксировать движения мыши за пределами моего окна.Мой упрощенный код в моем классе окон:

private void ButtonOnClick(object sender, EventArgs e)
{
    Capture = true;
    MouseMove += OnMouseMove;
}

private void OnMouseMove(object sender, MouseEventArgs e)
{
    Console.Out.Write("!");
}

Как вы видите, когда пользователь нажимает кнопку, моя программа должна начать отслеживать мышь (даже если она находится за пределами окна - это ключевое преимущество!)Но я получаю действительно странное поведение.Если я перемещаю мышь внутри окна, все отлично, ! записывается на консоль.Но когда я перемещаю мышь за пределы окна, только OnMouseMove вызывается только один раз (и точка действительно находится снаружи).Тогда, если я переместлю мышь куда-нибудь за пределы окна, оно больше не будет вызываться.Если я верну мышь обратно в окно, все идеально.Отойти - 1 сообщение, переместиться в окно - ОК.

Кто-нибудь может помочь?

1 Ответ

3 голосов
/ 21 мая 2010

Для этого вам понадобится глобальная мышь. Я рекомендую вам сначала прочитать кое-что о хуках, например. MSDN . Пример реализации в C # можно найти в CodeProject .

Надеюсь, это немного поможет.

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