2

Как с помощью WinApi постоянно отлавливать события мыши? То есть я вожу мышью, по всему рабочем столу, а не только над формой и на форме постоянно меняются мышиные координаты.

Nicolas Chabanovsky
  • 51,426
  • 87
  • 267
  • 507
Kirill
  • 21
  • C#, имхо, не для этого. Используйте Delphi в таком случае, что ли.... – Salivan Sep 05 '12 at 15:55

5 Answers5

3

Используя WH_MOUSE_LL хук, создав и зарегистрировав соответствующий обработчик. Пример.

stanislav
  • 34,518
  • 27
  • 98
  • 214
3

Вопрос не совсем корректный.

"Постоянно отлавливать события мыши" и "по всему рабочем столу" - это не "то есть", это разные вещи.

"Постоянно", значит нужно ставить хук,

А "по всему рабочему столу" - достаточно вызвать SetCapture, это будет перенаправлять все сообщения мыши в окно до вызова ReleaseCapture, или до тех пор, пока кто-нибудь другой не вызовет SetCapture из другого окна, что сгенерирует в текущем - WM_CAPTURECHANGED.

Deleted
  • 371
mega
  • 5,364
  • Из всех ответов на детский вопрос этот несет хоть какую-то интересную инофрмацию. Ставлю + – semenvx27 Sep 06 '12 at 06:24
1

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

Для этого в своем приложении запускаете таймер и каждые, например, 100 ms читаете координату мыши.

#r "System.Windows.Forms"
using System.Windows.Forms;

var frm = new Form() { Width = 400, Height = 100, TopMost = true };
var lbl = new Label() { Parent = frm, Dock = DockStyle.Fill };
new System.Windows.Forms.Timer() { Interval = 100, Enabled = true }
    .Tick += (s, e) => {
        var pos = Cursor.Position;
        lbl.Text = pos.ToString();
    };
frm.ShowDialog();  

Информацию об окне под курсором мыши можно получить через вызовы Win API функций. Пример на C# в ответе тут.

Stack
  • 9,452
0

Вот хорошая обёртка для C#: Processing Global Mouse and Keyboard Hooks.

Deleted
  • 371
Murad
  • 3,724
0

Хуки Msdn

Обычно такое в малваре используют, точнее в кейлоггерах. Но следует сразу сказать что виньапи для этих целей не пригодно :)

Indy
  • 279
  • 1
  • 7