c# – 将鼠标单击发送到另一个应用程序的X Y坐标
发布时间:2020-12-15 21:34:53 所属栏目:百科 来源:网络整理
导读:我正在尝试将模拟鼠标单击发送到另一个应用程序.我了解如何实际发送密钥点击,这不是问题.我需要将鼠标单击发送到另一个应用程序的正中心.我可以简单地测试一次并找出坐标并将点击发送到该XY位置,但是有一个问题……当我移动窗口或调整此窗口大小时,XY坐标显
我正在尝试将模拟鼠标单击发送到另一个应用程序.我了解如何实际发送密钥点击,这不是问题.我需要将鼠标单击发送到另一个应用程序的正中心.我可以简单地测试一次并找出坐标并将点击发送到该XY位置,但是有一个问题……当我移动窗口或调整此窗口大小时,XY坐标显然不会相同.
所以我需要找出如何获得窗口的大小及其位置,然后从中找到中心点.有人知道怎么做吗?非常感谢您的回复! 这是我发送鼠标点击的代码 public void SendLeftClick(int x,int y) { int old_x,old_y; old_x = Cursor.Position.X; old_y = Cursor.Position.Y; SetCursorPos(x,y); mouse_event(MouseEventFlag.LeftDown,x,y,UIntPtr.Zero); mouse_event(MouseEventFlag.LeftUp,UIntPtr.Zero); SetCursorPos(old_x,old_y); } 解决方法
您可以使用GetWindowInfo API:
[return: MarshalAs(UnmanagedType.Bool)] [DllImport("user32.dll",SetLastError = true)] private static extern bool GetWindowInfo(IntPtr hwnd,ref WINDOWINFO pwi); [StructLayout(LayoutKind.Sequential)] struct WINDOWINFO { public uint cbSize; public RECT rcWindow; public RECT rcClient; public uint dwStyle; public uint dwExStyle; public uint dwWindowStatus; public uint cxWindowBorders; public uint cyWindowBorders; public ushort atomWindowType; public ushort wCreatorVersion; public WINDOWINFO(Boolean? filler) : this() // Allows automatic initialization of "cbSize" with "new WINDOWINFO(null/true/false)". { cbSize = (UInt32)(Marshal.SizeOf(typeof(WINDOWINFO))); } } [StructLayout(LayoutKind.Sequential)] struct RECT { public int left,top,right,bottom; } private void button1_Click_1(object sender,EventArgs e) { var p = System.Diagnostics.Process.GetProcessesByName("mspaint"); if (p.Length == 0) return; WINDOWINFO wi = new WINDOWINFO(false); GetWindowInfo(p[0].MainWindowHandle,ref wi); SendLeftClick((wi.rcWindow.left + wi.rcWindow.right) / 2,(wi.rcWindow.top + wi.rcWindow.bottom) / 2); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |