我正在创建一个屏幕共享应用程序.其中有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#代码从一个位置拖动到另一个位置.
非常感谢您的关注.
解决方法
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); } }
Additional @R_377_4045@ion: A call to PInvoke function ‘KinectHandTrackmyApping!myApp.MainWindow::mouse_event’ has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.
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中常见的监视器设置).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。