私は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で実行していくつかのブレークポイントを設定すると、動作するようです。だから、論理的な欠陥のようには見えないが、何らかのタイミングや競合の問題がある。
FindWindowExは 'WM_GETTEXT'ではなく' GetWindowText'文字列を検索することを覚えておいてください。 –
Spy ++はこのようなものを追跡するのに本当に役立ちます。 –
この記事をチェックするhttp://stackoverflow.com/questions/5241984/findwindowex-from-user32-dll-is-returning-a-handle-of-zero-and-error-code-of-127 – volody