C#鼠标移动和点击相对于活动窗口

问题描述:

您好我一直在使用类似的代码在一块自动化的我一直在努力C#鼠标移动和点击相对于活动窗口

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从屏幕的左上角,如果活动窗口不是我期望它的位置,会导致问题,任何人都可以提出一种实现相同功能的方法,将鼠标移动到相对于活动窗口的点。

谢谢

您需要安装GetWindowRect()来找出窗口的位置。所以你可以通过窗口位置调整xy。访问pinvoke.net进行声明。

+0

嗨,那里感谢,因为它似乎GetWindowRect是我需要我访问了pinvoke.net我只是困惑如何获得窗口句柄可能有人给我一个指针。 – rs82uk 2011-01-31 22:27:12

只需要减去您的目标窗口的位置(相对于屏幕)。

你所看到的确实是预期的行为。 Cursor.Position property描述了光标在屏幕上的位置的坐标,而不是相对于您的窗体。

然而,每一个控制暴露了两个方便的方法,您可以利用屏幕坐标和控制坐标之间进行转换:

  • Control.PointToClient method计算指定屏幕点到客户端的位置坐标。使用它将屏幕坐标转换为客户端坐标(即与您的控件相关的那些坐标,例如表单)。

  • Control.PointToScreen method计算指定客户端到scren坐标的位置。使用它将客户端坐标转换为屏幕坐标。

尝试PointToClient,你正在努力寻找相对点控制的PointToScreen