所以,是的,我发现自己处于一个可疑的位置,即执行一个SwitchToThisWindow强制我的窗口到前面的调用.我同意,它并不理想,但并不总是可以反对别人认为必要的产品"功能".
现在,我认为SwitchToThisWindow是一个胜利的AttachThreadInput黑客做强制窗口切换,因为它不太可能死锁,应该SwitchToThisWindow被删除,或停止运作我不会抱怨.
但是,SwitchToThisWindow除了在为fAltTab参数传递FALSE时将目标窗口置于顶部,并且如果传递TRUE则不执行任何操作时,会产生令人遗憾的副作用,即将当前前景窗口推送到z顺序的底部.
如何避免这种"推动当前活动到z-bottom"的行为而不诉诸AttachThreadInput?
或者,MS可以删除AttachThreadInput作为一个可行的解决方法,我可以告诉我的经理,实际上,不可能,实际上是不可能的.
我不知道这是否有帮助,但我发现可靠地将窗口置于最高位置的唯一方法是进行以下2次调用:
ShowWindow(myhwnd, SW_MINIMIZE);
ShowWindow(myhwnd, SW_RESTORE);
Run Code Online (Sandbox Code Playgroud)
显然,当您的窗口当前不是最顶层的窗口时,应该进行这些调用以避免闪烁.但是这也不应该具有将当前前窗置于z顺序底部的副作用.