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 で実行していくつかのブレークポイントを設定すると、うまくいくようです。したがって、これは論理的な欠陥ではないように見えますが、ある種のタイミングまたは競合の問題です。