我怎样才能强制Aero绘制一个无边框窗口,就好像它是活动的一样,即使它不是?

Ome*_*mer 24 windows aero windows-7 winforms

我想要与Windows 7任务栏具有相同的效果.
我已经看过这个问题: 保持窗口看起来很活跃
它很好但只有窗口有一个非客户区域.

我的窗口是无边框的,无论我做什么,它的内容(只是黑色背景)都会呈现为不活动状态.

我将窗口标志设置为Windows 7任务栏,但它没有帮助.

我现在唯一的想法就是用边框画它并剪掉它们,有没有更好的方法来实现我想要的?

编辑1:
剪切不起作用,剪切边框后,窗口内容呈现为非活动窗口.那么Windows 7任务栏到底有什么用呢?

EDIT2:
添加一些照片来更好地解释自己,以下窗口内容是黑色背景.

这是一个非活动窗口(内容呈现有点暗): 非活动窗口

这是一个活跃的窗口:
活动窗口

如果窗口没有客户区,则内容总是呈现为非活动窗口,但是窗口任务栏总是呈现为活动窗口,并且它没有任何NC区域(至少根据spy ++).这就是我想要模仿的东西.

编辑3:
分享我最近的发现.explorer.exe主窗口是无框架的,并具有以下标志: Explorer图像参数

我潜入了探险家的进程dwmapi.dll导出函数: 资源管理器dwmapi.dll导出函数

就像我一样,它使用DwmEnableBlurBehindWindow.
我检查了未记录的序数函数,但没有一个与将空气玻璃渲染为活动状态有关.

可能是DWM规则不适用于资源管理器吗?

Jel*_*eer 2

棘手的一个..
使用“DwmSetWindowAttribute”API 将 NCRenderingPolicy 设置为启用。
http://msdn.microsoft.com/en-us/library/windows/desktop/aa969524(v=vs.85).aspx

    [DllImport("dwmapi.dll", PreserveSig = false)]
    public static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, ref int attrValue, int attrSize);

    [Flags]
    public enum DwmWindowAttribute
    {
        NCRenderingEnabled = 1,
        NCRenderingPolicy,
        TransitionsForceDisabled,
        AllowNCPaint,
        CaptionButtonBounds,
        NonClientRtlLayout,
        ForceIconicRepresentation,
        Flip3DPolicy,
        ExtendedFrameBounds,
        HasIconicBitmap,
        DisallowPeek,
        ExcludedFromPeek,
        Last
    }

    [Flags]
    public enum DwmNCRenderingPolicy
    {
        UseWindowStyle,
        Disabled,
        Enabled,
        Last
    }

    public static bool SetNCRenderingActive(IntPtr Handle)
    {
        int renderPolicy = (int)DwmNCRenderingPolicy.Enabled;            
        return (DwmSetWindowAttribute(Handle, (int)DwmWindowAttribute.NCRenderingPolicy, ref renderPolicy, sizeof(int)  ) == 0);
    }
Run Code Online (Sandbox Code Playgroud)