【发布时间】:2012-05-13 06:58:12
【问题描述】:
我正在尝试调试一个用 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 中运行它并设置一些断点,那么它似乎可以工作。所以这似乎不是逻辑缺陷,而是某种时间或争用问题。
【问题讨论】:
-
记住 FindWindowEx 搜索的是
GetWindowText字符串,而不是WM_GETTEXT值。 -
Spy++ 对追踪此类事件非常有帮助。
-
是的,我读过其他帖子,但真正让我困惑的是,它在设置断点时有效。我也会调查一下陈先生的建议。
-
所以在 Spy++ 中查看,似乎父窗口句柄与我在代码中打印的句柄不同。很有趣……至少这让我有继续前进的动力。
标签: c# .net winapi windows-7 windows-xp