如何查找和引用某个表格?(VB.NET)

如何查找和引用某个表格?(VB.NET),vb.net,winforms,Vb.net,Winforms,我目前正在制作一个应用程序来帮助我测试另一个单独的应用程序(两者都是在VB.NET中制作的)。我希望我的tester应用程序能够在我的其他应用程序的表单中输入信息。因为我对这两个应用程序都很熟悉,所以我知道我想在我的testee应用程序上使用的表单的名称和所有内容。我的问题是,我需要一种方法来使用被测试者表单的这些信息来获取句柄或一些我可以在我的测试者应用程序的代码中引用该表单的东西 我怎样才能拿到这份表格?我唯一的类似体验是处理流程的主窗口,但这样做更容易: Dim iTunesID as i

我目前正在制作一个应用程序来帮助我测试另一个单独的应用程序(两者都是在VB.NET中制作的)。我希望我的tester应用程序能够在我的其他应用程序的表单中输入信息。因为我对这两个应用程序都很熟悉,所以我知道我想在我的testee应用程序上使用的表单的名称和所有内容。我的问题是,我需要一种方法来使用被测试者表单的这些信息来获取句柄或一些我可以在我的测试者应用程序的代码中引用该表单的东西

我怎样才能拿到这份表格?我唯一的类似体验是处理流程的主窗口,但这样做更容易:

Dim iTunesID as intptr
    for each process as process in process.getprocesses
if proc.mainwindowtitle = "iTunes" then iTunesID = proc.MainwindowHandle
next
然而,即使这样,我也不太满意,因为它需要迭代每个过程。即使如此,我也不确定如何引用我的特定窗口,因为在本例中它不是主窗口。我尝试过搜索如何做到这一点,但我觉得我的搜索有点太模糊了,因为我只是不知道有什么方法可以用来做这件事或帮助做这件事

我的第一个想法与上面的想法类似,但类似于“for each form as forms.forms in'forms.forms running'”之类的东西,但我甚至不知道让表单运行的命令,尽管我想我可能会找到一个,但我希望找到一个比迭代所有进程/表单更好的解决方案


感谢您提前提供的帮助!:)

如果您有时间,可以查看Hawkeye源代码(http://hawkeye.codeplex.com/) 这是一个开源实用程序,用于连接到正在运行的.Net应用程序,并更改属性值、调用方法等

Hawkeye实际上通过点击操作连接到正在运行的应用程序


您可以使用现有进程上的循环找到正在运行的应用程序,然后您可以使用Hawkeye源代码中的一些诀窍连接到此应用程序,并开始更改值、调用方法等。

如果我正确地回答了您的问题,以下VB.NET代码片段可能会有所帮助:

Dim procNameSought As String = "Notepad2"

'
' Use LINQ to get the Process ID for the Application whose window should
' be brought into focus if you don't already have the Process ID...
'
Dim processID As Integer = (From proc As Process In Process.GetProcesses
                            Where proc.ProcessName.Trim() = procNameSought
                            Select proc.Id).FirstOrDefault()

'
' Use AppActivate to bring the Main Window for the Process into Focus.... 
'
Microsoft.VisualBasic.AppActivate(processID)
如果应用程序的主窗口未最小化到任务栏, (例如,主窗口被另一个应用程序隐藏),它将被 到前景去聚焦。但是,如果进程的主窗口 如果已最小化到任务栏,则可能需要查看使用PInvoke调用 Windows API函数SetActiveWindow ().

caeasy在这里的解释涵盖了一种方法:

要使用SetActiveWindow(),您需要指定要将焦点设置为的Windows句柄的实例,可以通过以下调用获得该实例:

'
' 32-Bit Window Handle : You may need to change this over to Int64 if 
' you're running on a 64-Bit OS...
'
Dim windowHandle As Int32 = (From proc As Process In Process.GetProcesses
                             Where proc.ProcessName.Trim() = procNameSought
                             Select proc.MainWindowHandle).FirstOrDefault()

Dim winHandlePtr As New IntPtr(windowHandle)

我希望这会对您有所帮助并引起您的兴趣……

您将测试人员保留在一个单独的过程中,这会使测试变得更加复杂。只是不要。在你的申请表之外找一份表格的参考有那么难吗?我不想将它们放在同一个应用程序中,因为我不想更改被测试者应用程序(您已经回答了我的一些其他问题,因此您可能知道我尝试测试的程序相当敏感…)