您好我一直在使用与我一直在进行的自动化中使用类似的代码
public static void LeftClick(int x, int y)
{
Cursor.Position = new System.Drawing.Point(x, y); //<= fails without this
mouse_event((int)(MouseEventFlags.LEFTDOWN), 0, 0, 0, 0);
mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0);
}
然而,除非我是愚蠢的,否则将鼠标移动到屏幕左上角的x,y,如果活动窗口不是我期望的那样,会导致我出现问题,任何人都可以建议实现将鼠标移动到相对于活动窗口的点的相同功能。
由于
答案 0 :(得分:1)
您需要调整GetWindowRect()以找出窗口的位置。因此,您可以通过窗口位置调整 x 和 y 。访问pinvoke.net获取声明。
答案 1 :(得分:0)
只需减去所定位窗口的位置(相对于屏幕)。
答案 2 :(得分:0)
您所看到的确实是预期的行为。 Cursor.Position
property描述了光标在屏幕坐标中的位置,而不是相对于您的表单。
但是,每个控件都会公开两个方便的方法,您可以利用它们在屏幕坐标和控制坐标之间进行转换:
Control.PointToClient
method计算指定屏幕点到客户端坐标的位置。使用此选项将从屏幕坐标转换为客户端坐标(即相对于您的控件的坐标),例如表格。
Control.PointToScreen
method计算指定客户端点的位置为scren坐标。使用此选项将从客户端坐标转换为屏幕坐标。
答案 3 :(得分:0)
尝试使用您正在尝试查找相对点的控件的PointToClient
和PointToScreen
。