시나리오는 최상위 창에 대한 창 핸들 목록이 있으며 선택 순서대로 정렬되도록 주위를 이동하려고합니다. 필자는 목록을 반복하여 (마지막으로 끝내고 자하는 창으로) 각각을 SetForegroundWindow
으로 호출하기 시작했습니다. 이것은 시간의 일부가 작동하는 것처럼 보였지만 언제나 그런 것은 아니며, 각 호출 사이에서 약간 일시 중지했을 때 약간 향상되었습니다.Win32 API를 사용하여 많은 Windows의 Z- 순서 업데이트하기
더 좋은 방법이 있나요?
편집 :
그것은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);
내가 뭔가 작은 확신/분명 내가 여기 실종 해요하지만 난 그냥 보이지 않아요.
+1 : 이것은 특히 더 많은 수의 창을 다루는 경우에 더 나은 경로입니다. –
팁 주셔서 감사합니다, 이것은 올바른 접근 방식처럼 보입니다. 내가 겪고있는 문제에 대한 나의 편집을 보라. –
@ 그렉 샤클 즈 : SWP_NOACTIVATE, 아마도 SWP_ASYNCWINDOWPOS를 원할 것입니다. – Anders