Что может заставить GetCursorPos возвращать неверные координаты {0,0}? - PullRequest
1 голос
/ 15 апреля 2010

Мы видим плохое поведение в приложении, когда оно работает на Server 2008 (не R2). Это приложение WinForms, и Control.MousePosition возвращает {0,0} независимо от того, где находится мышь на экране ... Control.MousePosition просто вызывает P / Invoke вызов Win32 api GetCursorPos ().

Followup:

Я использую Control.MousePosition из WinForms, который вызывает GetCursorPos, и я вижу, что он определенно игнорирует возвращаемое значение. Задавая мой вопрос другим способом: «Что может привести к тому, что GetCursorPos () внезапно начнет возвращать FALSE, если раньше он работал только в миллисекундах в том же процессе?»

// From .NET Reflector....
public static Point get_MousePosition()
{
    NativeMethods.POINT pt = new NativeMethods.POINT();
    UnsafeNativeMethods.GetCursorPos(pt);
    return new Point(pt.x, pt.y);
}

В нашей библиотеке есть элемент управления, который вызывает SetWindowsHookEx для перехвата WH_CALLWNDPROCRET для всего нашего процесса. Я с подозрением отношусь к этому коду, но операторы трассировки показывают, что мы аккуратно получаем + из этого хука.

Что еще мне нужно искать?

Спасибо, Dave

Ответы [ 3 ]

2 голосов
/ 30 мая 2010

Оказывается, это может произойти с 32-битными приложениями / LARGEADDRESSAWARE, работающими только на 64-битном сервере 2008 R1.

1 голос
/ 15 апреля 2010

Чтобы выяснить, в чем проблема, вам следует добавить проверку ошибок. Если GetCursorPos возвращает false, вызовите GetLastError, а затем выбросьте полученное значение как исключение.

0 голосов
/ 15 апреля 2010

Не уверен, что может делать это, но я никогда не вызывал эту функцию. Я всегда просто предполагал, что он вернул позицию, только если она была в контроле, но похоже, что я ошибся.

Вы пробовали Cursor.Position? ( MSDN Link )

** Я должен добавить, что этот метод использует тот же код, в основном, для внутренних целей, но, возможно, стоит попробовать.

System.Windows.Forms.Cursor.Current.Position

//returns this for me:
{X = 1941 Y = 535}
    Empty: {X = 0 Y = 0}
    IsEmpty: False
    X: 1941
    Y: 535
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...