使用Win32 API更新许多Windows的Z顺序

场景是我有一个顶级窗口的窗口句柄列表,我想转移它们,所以它们按我选择的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,SWP_NOMOVE | SWP_NOSIZE);
}

EndDeferWindowPos(positionStructure);

我确定这是一个小/明显的我在这里失踪,但我只是没有看到它.

有针对多个窗口设置窗口位置的特殊API集: BeginDeferWindowPos DeferWindowPos EndDeferWindowPos(在一个循环SetWindowPos也将工作过程中的,但它可能有更多的闪烁)

相关文章

(1)when you ping a computer from itsafe,the ping command should return the local IP address. (...
1、点击win菜单,点击设置图标 2、选择系统选项 3、选择应用与程序选项 4、拉到最下方,选择程序与功能...
目前一直直接往Windows 2008 R2 Server中复制文件(暂时还没有搭建ftp服务),突然不能复制了,于是百度...
windows下使用vscode配合xebug调试php脚本 要下载有php_xebug.dll扩展的版本,最新版可能没有这个扩展,p...
在控制面板的程序与功能里启用和关闭windows功能打开,适用于linux的windows子系统
效果演示 推荐一个非常牛的文档网站生成器:docsify 我通过这个工具,成功将码云上的个人学习笔记发布到...