2012-05-03 79 views
1

我正在嘗試調試用C#編寫的一個小測試驅動程序。它打開了我們的測試應用程序的幾個實例。測試應用程序連接到服務器,如果連接成功,則在標籤中顯示「REMOTE_CONNECTED」。因此,在嘗試向測試應用程序提供數據之前,測試驅動程序正在尋找。爲什麼FindWindowEx在我的窗口中找不到標籤?

下面的代碼是什麼樣子:

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

請記住,FindWindowEx搜索'GetWindowText'字符串,而不是'WM_GETTEXT'值。 –

+4

Spy ++可以真正幫助追蹤這樣的東西。 –

+0

檢查這個帖子http://stackoverflow.com/questions/5241984/findwindowex-from-user32-dl​​l-is-returning-a-handle-of-zero-and-error-code-of-127 – volody

回答

1

我的問題竟然是在這個問題類似於:

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

我MainWindowHandle未設置爲我希望它是(我想通了,使用間諜++的窗口,感謝羅布P !)。所以我使用EnumWindows編寫了一些代碼來查找我正在查找的窗口(請參閱鏈接的帖子中的Joshua的答案),然後使用該窗口句柄傳入FindWindowEx,並且所有內容都按預期工作。

相關問題