Сценарий состоит в том, что у меня есть список дескрипторов окон для окон верхнего уровня, и я хочу переместить их так, чтобы они были расположены в z-порядке по моему выбору.Я начал с итерации списка (с окном, которое я хочу завершить в верхней части списка), вызывая SetForegroundWindow
для каждого.Казалось, это работало иногда, но не всегда, немного улучшаясь, когда я немного останавливался между каждым вызовом.
Есть ли лучший способ сделать это?
Редактировать:
Похоже, путь BeginDeferWindowPos
/ DeferWindowPos
/ EndDeferWindowPos
- это путь.Однако я не могу заставить его работать с более чем одним окном за раз.Когда я ограничиваю список окон одним окном, оно работает правильно.Когда в списке есть несколько окон, кажется, что он получает только одно из них.Вот псевдокод того, что я делаю:
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);
Я уверен, что это что-то маленькое / очевидное, я здесь упускаю, но я просто не вижу этого.