【发布时间】:2016-03-18 22:52:51
【问题描述】:
我正在编写一个 Windows 10 C# 程序来保存和恢复打开窗口(无论是显示还是最小化)的位置和大小。以下循环几乎适用于所有窗口,但不适用于资源监视器或计算机管理窗口:
foreach (KeyValuePair<HWND, InfoWindow> entry in openWindows)
{
IntPtr hWnd = entry.Key;
Rectangle rect = entry.Value.Rect;
WINDOWPLACEMENT wpl = new WINDOWPLACEMENT();
if (!GetWindowPlacement(hWnd, ref wpl)) continue;
wpl.rcNormalPosition = rect;
SetWindowPlacement(hWnd, ref wpl);
}
SetWindowPlacement 函数似乎对资源监视器或计算机管理窗口的位置或大小没有影响。我也尝试过使用SetWindowPos,这对这些窗口也没有影响(但适用于我尝试过的所有其他窗口)。
为什么这些特定窗口的行为不同?有什么替代方法可以移动这些窗口?
【问题讨论】:
-
大概他们被提升了,而你没有。
-
当然,它们很特别。他们在不提示您的情况下运行提升的 UAC。您可以配置 UAC 以获取提示,但没有人喜欢这样。除非您也运行提升的应用程序,否则您不能对提升的应用程序的窗口进行操作。