C #: Как я могу получить координаты моей мыши, когда нажата левая / правая кнопка мыши? - PullRequest
3 голосов
/ 15 января 2010

Как получить координаты мыши, когда нажата левая / правая кнопка мыши?

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

Как я могу это сделать?

Ответы [ 6 ]

3 голосов
/ 15 января 2010

Почему бы вам просто не захватить событие MouseDown , а из MouseEventArgs получить позицию щелчка, используя MouseEventArgs.Location?

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

http://www.codeproject.com/KB/system/globalsystemhook.aspx - это решило мою проблему. Использовал DLL из демонстрационного проекта и смог получить координаты.

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

http://www.codeproject.com/KB/vb-interop/MouseHunter.aspx - Я нашел эту маленькую очаровательную часть информации.К сожалению, Visual Studio 2008 не примет предварительно скомпилированную dll, и я не могу установить Visual Basic 6 на мою машину, чтобы попытаться перекомпилировать ее.

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

Аргумент wParam вашей процедуры MouseHook будет содержать идентификатор сообщения WM_LBUTTONDOWN, WM_LBUTTONUP, WM_RBUTTONDOWN, WM_RBUTTONUP и т. Д., Из этого вы можете определить состояние кнопки в текущих координатах.

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

В вашем методе MouseHook:

public static int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)
{
    //Marshall the data from the callback.
    MouseHookStruct MyMouseHookStruct = 
         (MouseHookStruct) Marshal.PtrToStructure(lParam, typeof(MouseHookStruct));

    if (nCode >= 0)
    {
        int xcoord = MyMouseHookStruct.pt.x;
        int ycoord = MyMouseHookStruct.pt.y;
    }

    return CallNextHookEx(hHook, nCode, wParam, lParam); 
}

С здесь .

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

вызовите GetMessagePos () на WM_LBUTTONDOWN, чтобы получить то, что вы хотите. Но я сомневаюсь, что он будет работать внутри низкоуровневого мышиного крючка. Он предназначен для использования в вашем почтовом насосе или оконном проке.

"Функция GetMessagePos извлекает позицию курсора для последнего сообщения, полученного функцией GetMessage."

Вы уверены, что вам нужен крючок?

...