我正在尝试调试用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中运行它并设置一些断点,那么它似乎可行。所以它似乎不是一个逻辑缺陷,而是某种时机或争用问题。
答案 0 :(得分:1)
我的问题与此问题类似:
Why can't get the main window handle for a started process?
我的MainWindowHandle没有设置到我预期的窗口(我发现使用Spy ++,感谢Rob P.!)。因此,我使用EnumWindows编写了一些代码来查找我正在寻找的Window(请参阅Joshua在链接帖子中的答案),然后使用Window Handle传递给FindWindowEx,一切都按预期工作。