为什么FindWindowEx在我的窗口中找不到标签?

时间:2012-05-03 17:57:04

标签: c# .net winapi windows-7 windows-xp

我正在尝试调试用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中运行它并设置一些断点,那么它似乎可行。所以它似乎不是一个逻辑缺陷,而是某种时机或争用问题。

1 个答案:

答案 0 :(得分:1)

我的问题与此问题类似:

Why can't get the main window handle for a started process?

我的MainWindowHandle没有设置到我预期的窗口(我发现使用Spy ++,感谢Rob P.!)。因此,我使用EnumWindows编写了一些代码来查找我正在寻找的Window(请参阅Joshua在链接帖子中的答案),然后使用Window Handle传递给FindWindowEx,一切都按预期工作。