2

我正在尝试调试一个用 C# 编写的小测试驱动程序应用程序。它打开了我们拥有的测试应用程序的几个实例。测试应用程序连接到服务器,并在成功连接后在标签中显示“REMOTE_CONNECTED”。因此,测试驱动程序在尝试将数据提供给测试应用程序之前正在寻找它。

代码如下所示:

  Console.Out.WriteLine("MAIN HANDLE IN GETCONN: " + Hwnd);
  //Attempt to find if we have have connected to the remote server
  IntPtr connHwnd = FindWindowEx(Hwnd, IntPtr.Zero, null, "REMOTE_CONNECTED");

connHwnd 总是返回 IntPtr.Zero 并且打印到控制台的 Hwnd 是我期望的测试应用程序的句柄。测试驱动程序在循环中坐了一会儿,反复调用上面的代码,直到找到那个标签。我可以在屏幕上看到标签显示“REMOTE_CONNECTED”但该功能没有找到它。

此外,其他人已经让它在 XP 上工作(而我在 Windows 7 上)。

最后,如果我在 Visual Studio 中运行它并设置一些断点,那么它似乎可以工作。所以这似乎不是一个逻辑缺陷,而是某种时间或争用问题。

4

1 回答 1

1

我的问题结果与这个问题相似:

为什么无法获取已启动进程的主窗口句柄?

我的 MainWindowHandle 没有设置为我期望的窗口(我使用 Spy++ 弄清楚了,感谢 Rob P.!)。因此,我使用 EnumWindows 编写了一些代码来查找我正在寻找的窗口(请参阅链接文章中 Joshua 的回答),然后使用该窗口句柄传递给 FindWindowEx,一切都按预期工作。

于 2012-05-03T21:52:44.397 回答