シナリオは、トップ レベル ウィンドウへのウィンドウ ハンドルのリストがあり、選択した z オーダーに配置されるようにそれらを移動したいというものです。リストを繰り返し (一番上に表示したいウィンドウを最後に)、SetForegroundWindow
それぞれを呼び出すことから始めました。これは時々うまくいくように見えましたが、常にではなく、各呼び出しの間に少し一時停止すると少し改善されました.
これを行うより良い方法はありますか?
編集:
BeginDeferWindowPos
/ DeferWindowPos
/EndDeferWindowPos
ルートが進むべき道のようです。ただし、一度に複数のウィンドウで動作させることはできないようです。ウィンドウ リストを 1 つのウィンドウに制限すると、正しく機能します。リストに複数のウィンドウがある場合、そのうちの 1 つだけを取得しているように見えます。これが私がやっていることの疑似コードです:
HWND[] windows;
HWND lastWindowHandle = 0;
HDWP positionStructure = BeginDeferWindowPos(windows.length);
for (int i = 0; i < windows.length; i++)
{
positionStructure = DeferWindowPos(positionStructure, windows[i],
lastWindowHandle, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}
EndDeferWindowPos(positionStructure);
ここに欠けているのは小さい/明らかなものだと確信していますが、私はそれを見ていません。