Отслеживание мыши Mutil монитора - PullRequest
0 голосов
/ 23 мая 2011

У меня есть необходимость отслеживать положение мыши. Хотя я пытался сделать это несколькими способами, я никогда не смогу проследить / зафиксировать положение, если мышь находится на другом мониторе.

    [DllImport("user32.dll")]
    public static extern bool GetCursorPos(ref Point pt);

    [DllImport("user32.dll")]
    public static extern bool GetCursorInfo(out CURSORINFO pci);

    public void GetPosition(out int X, out int Y)
    {
        Point pt = new Point(0, 0);
        X = Y = 0;

        if (MouseMonitor.GetCursorPos(ref pt))
        {
            X = pt.X;
            Y = pt.Y;
        }

Это работает, но только на одном экране. Я также прочитал, что я мог бы попробовать GetCursorInfo. Я пытался это, но это всегда возвращается ложным. [DllImport ( "User32.dll")] public static extern bool GetCursorInfo (из CURSORINFO pci);

Есть предложения? Моя цель - отслеживать положение мыши (вне моего собственного приложения) независимо от того, на каком экране оно находится.

Ответы [ 2 ]

0 голосов
/ 23 мая 2011

Использовать DWORD GetMessagePos () - он дает вам последнюю позицию окна сообщения мыши. Но будьте осторожны, он возвращает DWORD, но внутри упакованы две SHORTS (16-битные подписанные целые). Поэтому макросы LOWORD / HIWORD (или C # соответственно) не будут работать.

http://msdn.microsoft.com/en-us/library/ms644938(VS.85).aspx

0 голосов
/ 23 мая 2011

Ваш пример кода работает для меня в моей системе с двумя мониторами ...

Вы можете немного упростить вещи, используя .NET Framework: класс System.Windows.Forms.Cursor имеетстатическое свойство Position.

Например, я создал новый проект Windows Forms, а затем перетащил System.Windows.Forms.Timer в форму.Я установил для свойства Enabled значение true и добавил этот код в событие Tick:

this.Text = string.Format("{0}, {1}", Cursor.Position.X, Cursor.Position.Y);

Запустил проект, и он работал, как и ожидалось, на обоих моих мониторах ...

...