Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-查找Winform应用程序的坐标_C#_Winforms_Desktop Application - Fatal编程技术网

C#-查找Winform应用程序的坐标

C#-查找Winform应用程序的坐标,c#,winforms,desktop-application,C#,Winforms,Desktop Application,我有一个简单的登录屏幕windows窗体应用程序,我正在通过适配器控制该应用程序。现在我想找到文本框和按钮的坐标,我右键单击文本框控件并从其属性中选择位置后尝试使用坐标,但它不起作用。所以我想找到合适的位置,因为windows窗体应用程序窗体大小可以在运行时更改。那么,如何才能找到windows窗体坐标 我尝试使用textbox和button控件的属性中提供的坐标,但这些都不起作用 IntPtr childHwnd = Win32API.FindWindowByPosition(ptr, new

我有一个简单的登录屏幕windows窗体应用程序,我正在通过适配器控制该应用程序。现在我想找到文本框和按钮的坐标,我右键单击文本框控件并从其属性中选择位置后尝试使用坐标,但它不起作用。所以我想找到合适的位置,因为windows窗体应用程序窗体大小可以在运行时更改。那么,如何才能找到windows窗体坐标

我尝试使用textbox和button控件的属性中提供的坐标,但这些都不起作用

IntPtr childHwnd = Win32API.FindWindowByPosition(ptr, new Point(intFirstNameCoordX,intFirstNameCoordY));
这就是我想找到窗户的方式


我想在windows窗体中找到文本框和按钮的位置。我在谷歌上搜索并找到了一些Spy++工具,但我不确定这是否是我所需要的,如果是的话,请任何人指导我如何使用它在一个简单的窗口窗体应用程序中找到位置。

好的,我可以看到您正在使用WinApi函数,所以我不会深入讨论,只是给您一些想法

首先,您可以获取主窗口句柄。您可以通过进程(枚举进程窗口)或其标题获取句柄。如果要通过标题获取句柄,可以使用

此句柄是窗口句柄。接下来,您可以枚举它的子窗口-例如面板或其他控件,使用

现在剩下的取决于您的GUI架构。面板中可能有编辑和按钮,因此必须搜索该面板的子窗口。您可能在主窗口上放置了一些控件,所以您只需搜索该窗口的子控件


接下来,当您找到感兴趣的控件时,您可以获得更多信息,例如使用

您到底在寻找什么?某些控件的(绝对)屏幕坐标,或这些控件相对于其所属窗口的相对坐标?如果您有一个应用程序需要以某种方式检查另一个,IMO是一个不错的选择。打开窗口(任何窗口)时,您都可以收到通知并解析子树以获得其任何子控件的信息。此外,如果需要,您可以对这些控件执行操作。@elgonzo我想要绝对坐标的意思是,即使我更改桌面应用程序的大小,坐标也应该保持不变。这意味着坐标不依赖于桌面应用程序大小,因此他们将桌面应用程序屏幕视为实际屏幕,然后给出不依赖于屏幕的固定x和y坐标。size@jimi你能再多告诉我一点吗?它是干什么用的?我怎么用?我还是不知道你到底想要什么。您正在谈论一个未命名的神秘适配器。我不知道你说的适配器是什么意思。您似乎希望使用与包含控件的窗口的实际大小无关的相对坐标。如果坐标应该独立于实际应用程序窗口大小,那么这些坐标不能是像素坐标,不是吗?那么,你实际使用的坐标系是什么?我还是搞不懂…所以你是说我不应该通过它的位置而不是它的把手来找到窗户?如果是,那么在哪里可以找到句柄名称?我对这个很陌生,所以提前向您道歉,我为您提供了函数:)FindWindow-您将找到您的主应用程序窗口。然后,您必须使用EnumChildWindows查找其子项。一切都是一个窗口-窗口、面板、按钮、文本框。。。FindWindow将为您控制主窗口。EnumChildWindows将为您提供句柄和其他一些儿童窗口的内容。好的,我知道这一点,但如何才能获得窗口的句柄?比如我必须使用一些工具吗?像一些树可视化工具之类的?我知道父句柄、子句柄等。不,每次创建控件时,句柄都是不同的。您将从FindWindow和EnumChildWindows获得句柄。阅读我帖子中的链接:)目前在我的代码中,我找到了像这样的MainWindowHandle IntPtr ptr=MainWindowHandle;