电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

获取鼠标的坐标


发布日期:2018/5/26
 

view plainprint?

「在窗体上获取相对于屏幕的坐标

方法public class Win { [StructLayout(LayoutKindSequential)] public struct POINT { public int Xpublic int Y

public POINT(int x int y)

{ thisX = xthisY = y}

[DllImport(userdll CharSet = CharSetAuto)] public static extern bool GetCursorPos(out POINT pt)}

方法MouseGetPosition(this)

方法在鼠标mousemove事件中 eGetPosition(this)

「获取全局鼠标坐标」

using Systemusing SystemCollectionsGenericusing SystemLinqusing SystemTextusing SystemWindowsusing SystemWindowsControlsusing SystemWindowsDatausing SystemWindowsDocumentsusing SystemWindowsInputusing SystemWindowsMediausing SystemWindowsMediaImagingusing SystemWindowsNavigationusing SystemWindowsShapesusing SystemDiagnosticsusing SystemRuntimeInteropServices

namespace wpfMouse { /// <summary> /// MainWindowxaml 的交互逻辑/// </summary> public partial class MainWindow Window { private LowLevelMouseProc _procprivate IntPtr _hookID = IntPtrZeroprivate MSLLHOOKSTRUCT hookStructprivate delegate IntPtr LowLevelMouseProc(int nCode IntPtr wParam IntPtr lParam)

public MainWindow()

{ InitializeComponent()

pageLoad()} private void pageLoad()

{ _hookID = SetHook(_proc)}

private IntPtr SetHook(LowLevelMouseProc proc)

{ using (Process curProcess = ProcessGetCurrentProcess())

using (ProcessModule curModule = curProcessMainModule)

{ _proc = HookCallbackreturn SetWindowsHookEx(WH_MOUSE_LL _procGetModuleHandle(curModuleModuleName) } private IntPtr HookCallback(int nCode IntPtr wParam IntPtr lParam)

{

if (nCode >= && MouseMessagesWM_MOUSEMOVE == (MouseMessages)wParam)

{

hookStruct = (MSLLHOOKSTRUCT)MarshalPtrToStructure(lParam typeof(MSLLHOOKSTRUCT))//释放MarshalFreeCoTaskMem(lParam)

labMouseContent = hookStructptx + + hookStructpty

}

return CallNextHookEx(_hookID nCode wParam lParam)} private const int WH_MOUSE_LL =

private enum MouseMessages { WM_LBUTTONDOWN = xWM_LBUTTONUP = xWM_MOUSEMOVE = xWM_MOUSEWHEEL = xAWM_RBUTTONDOWN = xWM_RBUTTONUP = x } [StructLayout(LayoutKindSequential)] private struct POINT { public int xpublic int y}

[StructLayout(LayoutKindSequential)] private struct MSLLHOOKSTRUCT { public POINT ptpublic uint mouseDatapublic uint flagspublic uint timepublic IntPtr dwExtraInfo}

[DllImport(userdll CharSet = CharSetAuto SetLastError = true)] private static extern IntPtr SetWindowsHookEx(int idHookLowLevelMouseProc lpfn IntPtr hMod uint dwThreadId)

[DllImport(userdll CharSet = CharSetAuto SetLastError = true)] [return MarshalAs(UnmanagedTypeBool)] private static extern bool UnhookWindowsHookEx(IntPtr hhk)

[DllImport(userdll CharSet = CharSetAuto SetLastError = true)] private static extern IntPtr CallNextHookEx(IntPtr hhk int nCodeIntPtr wParam IntPtr lParam)

[DllImport(kerneldll CharSet = CharSetAuto SetLastError = true)] private static extern IntPtr GetModuleHandle(string lpModuleName)

private void Window_Closed(object sender EventArgs e)

{ UnhookWindowsHookEx(_hookID)}

}

上一篇:下拉框层级绑定

下一篇:动态添加用户控件