2

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

4

1 に答える 1

1

私の問題は、この質問の問題に似ていることが判明しました。

開始されたプロセスのメイン ウィンドウ ハンドルを取得できないのはなぜですか?

私の MainWindowHandle は、私が期待していたウィンドウに設定されていませんでした (これは、Spy++ を使用して理解しました。Rob P. に感謝します!)。そのため、探しているウィンドウを見つけるために EnumWindows を使用していくつかのコードを作成し (リンクされた投稿の Joshua の回答を参照)、そのウィンドウ ハンドルを使用して FindWindowEx に渡すと、すべてが期待どおりに機能しました。

于 2012-05-03T21:52:44.397 に答える