C#:从代码后面拖动任何窗口(以编程方式)
请让我详细说明我在做什么.
我正在创建一个屏幕共享应用程序.其中有2个应用程序首先是Windows应用程序(其屏幕正在共享),另一个是浏览器Web应用程序(用户正在其上观看屏幕).浏览器Web应用程序将鼠标的客户端x和y坐标发送到Windows应用程序. Windows应用程序使用x和y坐标使用下面给出的代码移动鼠标. [DllImport("user32.dll")] static extern bool SetCursorPos(int X,int Y); public static void MoveCursorToPoint(int x,int y) { SetCursorPos(x,y); } 浏览器应用程序也发送鼠标点击,Windows应用程序正在使用下面给出的代码执行点击. [DllImport("user32.dll",CharSet = CharSet.Auto,CallingConvention = CallingConvention.StdCall)] public static extern void mouse_event(long dwFlags,long dx,long dy,long cButtons,long dwExtraInfo); private const int MOUSEEVENTF_LEFTDOWN = 0x02; private const int MOUSEEVENTF_LEFTUP = 0x04; private const int MOUSEEVENTF_RIGHTDOWN = 0x08; private const int MOUSEEVENTF_RIGHTUP = 0x10; public static void DoMouseClick() { mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP,0); } 问题/挑战 这里的问题或挑战是执行拖动操作.例如,如何将任何应用程序的窗口从C#代码从一个位置拖动到另一个位置. 非常感谢您的关注. 解决方法
最后,这是将执行所有系统鼠标事件的代码.为了执行拖放操作,您需要首先发送MouseDown(鼠标单击)并保持单击时更改鼠标位置而不是发送鼠标单击(释放单击)这样的事情.
MouseHelper mh = new MouseHelper(); mh.sendMouseDown(); Cursor.Position = new Point(30,30); mh.sendMouseUp(); 这是整个帮助文件 public class MouseHelper { [DllImport("user32.dll",CallingConvention = CallingConvention.StdCall)] //public static extern void mouse_event(long dwFlags,long dwExtraInfo); public static extern void mouse_event(uint dwFlags,uint dx,uint dy,uint cButtons,uint dwExtraInfo); private const uint MOUSEEVENTF_LEFTDOWN = 0x02; private const uint MOUSEEVENTF_LEFTUP = 0x04; private const uint MOUSEEVENTF_RIGHTDOWN = 0x08; private const uint MOUSEEVENTF_RIGHTUP = 0x10; public void sendMouseRightclick(Point p) { mouse_event((uint)MOUSEEVENTF_RIGHTDOWN | (uint)MOUSEEVENTF_RIGHTUP,(uint)p.X,(uint)p.Y,(uint)0,(uint)0); } public void sendMouseDoubleClick(Point p) { mouse_event((uint)MOUSEEVENTF_LEFTDOWN | (uint)MOUSEEVENTF_LEFTUP,(uint)0); Thread.Sleep(150); mouse_event((uint)MOUSEEVENTF_LEFTDOWN | (uint)MOUSEEVENTF_LEFTUP,0); } public void sendMouseRightDoubleClick(Point p) { mouse_event((uint)MOUSEEVENTF_RIGHTDOWN | (uint)MOUSEEVENTF_RIGHTUP,0); Thread.Sleep(150); mouse_event((uint)MOUSEEVENTF_RIGHTDOWN | (uint)MOUSEEVENTF_RIGHTUP,0); } public void sendMouseDown() { mouse_event(MOUSEEVENTF_LEFTDOWN,50,0); } public void sendMouseUp() { mouse_event(MOUSEEVENTF_LEFTUP,0); } } Source此源链接上的给定代码将给出错误
为了解决我已经改变的错误 public static extern void mouse_event(long dwFlags,long dwExtraInfo); 对此 public static extern void mouse_event(uint dwFlags,uint dwExtraInfo); 错误是long的使用,因为long是一个例外,因为它是一个64位,因为它是32位的uint有效 – 但它不适用于负坐标(这是Windows中常见的监视器设置). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |