【问题标题】:SetWindowPlacement not moving certain windowsSetWindowPlacement 不移动某些窗口
【发布时间】: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 以获取提示,但没有人喜欢这样。除非您也运行提升的应用程序,否则您不能对提升的应用程序的窗口进行操作。

标签: windows winapi


【解决方案1】:

谢谢,乔纳森和汉斯。这就是问题所在。如果我运行提升的代码,它可以在所有窗口上运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多