C#相对于活动窗口移动鼠标并单击

C#相对于活动窗口移动鼠标并单击,c#,.net,winforms,mouseevent,C#,.net,Winforms,Mouseevent,嗨,我一直在一个自动化项目中使用类似的代码 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.LE

嗨,我一直在一个自动化项目中使用类似的代码

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);
}
publicstaticvoidleftclick(intx,inty)
{

Cursor.Position=new System.Drawing.Point(x,y);//只需减去目标窗口的位置(相对于屏幕)。

您看到的确实是预期的行为。描述光标在屏幕坐标中的位置,而不是相对于窗体的位置

但是,每个控件都公开了两种方便的方法,您可以利用它们在屏幕坐标和控件坐标之间进行转换:

  • 将指定屏幕点的位置计算为客户端坐标。使用此选项可将屏幕坐标转换为客户端坐标(即与控件相关的坐标,如窗体)

  • 将指定客户端点的位置计算为scren坐标。使用此选项可将客户端坐标转换为屏幕坐标


尝试
指向客户端
指向屏幕
,您正在尝试查找控件的相对点。

您需要pinvoke GetWindowRect()找到窗口的位置。这样您就可以根据窗口位置调整x和y。请访问pinvoke.net获取声明。

您好,谢谢您,我需要的是GetWindowRect。我已经访问了pinvoke.net。我只是对如何获取窗口句柄感到困惑。有人能给我一个指针吗?这里有很多关于这方面的问题。搜索EnumWindows、FindWindow、GetClassName、Spy++。我在讨论中的java应用程序上使用了ui Spy,该窗口返回为SunAwtDialog,但GetWindowRect(SunAwtDialog.hWnd,rct);不正确