我正在尝试将模拟鼠标单击发送到另一个应用程序.我了解如何实际发送密钥点击,这不是问题.我需要将鼠标单击发送到另一个应用程序的正中心.我可以简单地测试一次并找出坐标并将点击发送到该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); }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。