C#: Как получить координаты мыши, когда нажата левая / правая кнопка мыши?
Как получить координаты мыши, когда нажата левая / правая кнопка мыши?
Я использую низкоуровневый крюк мыши и могу получить текущее положение моего курсора, но я хотел бы иметь возможность получить положение, когда любая кнопка мыши была нажата.
Как я могу это сделать?
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 для установки на моей машине, чтобы попытаться перекомпилировать его.