4

プロセスの 1 つに次の Window 階層があるとします。

Main Window               (class name: XYZ_Widget_1)
`- Child Window           (class name: XYZ_Widget_0)
  `- Child-Child Window    (class name: XYZ_Renderer)

の HWND を見つけるにはどうすればよいChild-Child Windowですか?

クラスFindWindowで Win32 API 関数を使用しようとしましたが、関数は子ウィンドウを見つけません。XYZ_RendererFindWindow

次に、 を使用FindWindowして を見つけようとしましたがMain Window、成功しましたが、その後、は の子ではないため、 を使用してFindWindowExのみ見つけることができます。Child WindowChild-Child WindowMain Window

Child Window1 層深くまで進み、見つかったらFindWindowEx を呼び出すことができると思います。

しかし、それを行う前に、簡単に見つける方法があるのではないかと考えましたChild-Child Window

4

2 に答える 2

12

前のレベルで見つかったものを親としてFindWindowEx()指定して、下に移動する各子レベルを呼び出す必要があります。例:HWND

HWND hWnd = FindWindow("XYZ_Widget_1", NULL);
if (hWnd != NULL)
{
    hWnd = FindWindowEx(hWnd, NULL, "XYZ_Widget_0", NULL);
    if (hWnd != NULL)
    {
        hWnd = FindWindowEx(hWnd, NULL, "XYZ_Renderer", NULL);
        // and so on... 
    }
}

それを行うためのより簡単な方法はありません。コードを単純化するために、クラス/ウィンドウ名のパスを入力として受け入れる独自の関数を記述し、FindWindow/Ex()必要に応じて各レッグを呼び出してループすることができます。

于 2012-10-05T01:59:42.883 に答える
5

EnumChildWindows親ウィンドウを として渡して呼び出しますhwndParent。あなたのウィンドウは、クラス名が に等しいウィンドウXYZ_Rendererです。

ドキュメントには次のように記載されています。

子ウィンドウが独自の子ウィンドウを作成した場合、EnumChildWindowsはそれらのウィンドウも列挙します。

于 2012-10-05T08:49:06.507 に答える