c#使用win32api实现获取光标位置
方法一:需要调用win32api,winform、wpf通用
[DllImport("user32.dll")] publicstaticexternboolGetCursorPos(outPOINTlpPoint); [StructLayout(LayoutKind.Sequential)] publicstructPOINT { publicintX; publicintY; publicPOINT(intx,inty) { this.X=x; this.Y=y; } }
方法二:通过调用Win32API设置鼠标位置,实现移到指定位置,模仿并实现鼠标点击动作,并回到鼠标原先位置的方法,代码如下:
//获取屏幕 intwidth=(int)SystemParameters.PrimaryScreenWidth;//得到屏幕整体宽度 intheight=(int)SystemParameters.PrimaryScreenHeight;//得到屏幕整体高度 //获取鼠标初始位置,相对屏幕的绝对位置 System.Drawing.Pointp=newSystem.Drawing.Point(); ApiHelper.GetCursorPos(outp); if(width!=0)p.X=65535*p.X/width; if(height!=0)p.Y=65535*p.Y/height; //设置移动的位置坐标 intdy=100; intdx=100; dx=(int)(dx*65535/width); dy=(int)(dy*65535/height); //移到指定位置 ApiHelper.mouse_event((int)(MouseEventFlag.MOUSEEVENTF_MOVE|MouseEventFlag.MOUSEEVENTF_ABSOLUTE),dx,dy,0,IntPtr.Zero);//移动到需要点击的位置 //完成一次点击 ApiHelper.mouse_event((int)(MouseEventFlag.MOUSEEVENTF_LEFTDOWN),0,0,0,IntPtr.Zero); ApiHelper.mouse_event((int)(MouseEventFlag.MOUSEEVENTF_LEFTUP),0,0,0,IntPtr.Zero);// //单击可以写为 ApiHelper.mouse_event((int)(MouseEventFlag.MOUSEEVENTF_LEFTDOWN|MouseEventFlag.MOUSEEVENTF_LEFTUP),0,0,0,IntPtr.Zero); //双击则再重复单击方法 //回到初始位置 ApiHelper.mouse_event((int)(MouseEventFlag.MOUSEEVENTF_MOVE|MouseEventFlag.MOUSEEVENTF_ABSOLUTE),p.X,p.Y,0,IntPtr.Zero);//移动到需要点击的位置
代码中ApiHelper为作者封装的Win32API方法,读者可以通过api精灵等软件查询api函数,自行实现封装。