2012-05-03 10 views
1

私はC#で書かれた小さなテストドライバアプリケーションをデバッグしようとしています。私たちが持っているテストアプリのいくつかのインスタンスを開きます。テストアプリはサーバーに接続し、接続が成功すると、ラベルに「REMOTE_CONNECTED」と表示されます。したがって、テストドライバーは、テストアプリにデータをフィードする前に、それを探しています。常にコンソールに出力IntPtr.ZeroとHWNDが、私はテストアプリケーションに期待ハンドルで戻ってくるconnHwndそれ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"); 

は、ここでは、コードは次のようになります。テストドライバーはしばらくの間ループして、そのラベルが見つかるまで上記のコードを繰り返し呼び出します。画面上で、ラベルが「REMOTE_CONNECTED」と表示されているが、機能が見つけられていないことがわかります。

さらに、他の人々がこれをXP上で動作させています(私はWindows 7上ですが)。

最後に、これをVisual Studioで実行していくつかのブレークポイントを設定すると、動作するようです。だから、論理的な欠陥のようには見えないが、何らかのタイミングや競合の問題がある。

+1

FindWindowExは 'WM_GETTEXT'ではなく' GetWindowText'文字列を検索することを覚えておいてください。 –

+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

私の問題は、この問題のものと同様であることが判明:私のMainWindowHandleが、私はスパイ++を使用して考え出した私はそれがあることが予想ウィンドウ(おかげで、ロブPに設定されていなかった

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

!)。そこで私はEnumWindowsを使って、探していたウィンドウを見つけ出しました(リンク先のJoshuaの答えを見てください)。そして、そのWindowハンドルを使ってFindWindowExに渡し、すべてが期待通りに機能しました。

関連する問題