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


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

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

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

6 3

6 ответов:

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

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

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

Ты уверен, что тебе нужен крюк?

В вашем методе 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); 
}

Из здесь.

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

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

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