DwmSetWindowAttribute 不适用于 DWMWA_CLOAK
DwmSetWindowAttribute does not work with DWMWA_CLOAK
我最近开始将较低级别的 windows APIsn 与 C# 一起用于应用程序原型,我偶然发现了一个我无法解决的问题:考虑以下代码:
public class dW
{
[DllImport("dwmapi.dll")]
public static extern int DwmSetWindowAttribute(IntPtr hwnd, DwmWindowAttribute dwAttribute, ref int pvAttribute, int cbAttribute);
[Flags]
public enum DwmWindowAttribute : uint
{
DWMWA_NCRENDERING_ENABLED = 1,
DWMWA_NCRENDERING_POLICY,
DWMWA_TRANSITIONS_FORCEDISABLED,
DWMWA_ALLOW_NCPAINT,
DWMWA_CAPTION_BUTTON_BOUNDS,
DWMWA_NONCLIENT_RTL_LAYOUT,
DWMWA_FORCE_ICONIC_REPRESENTATION,
DWMWA_FLIP3D_POLICY,
DWMWA_EXTENDED_FRAME_BOUNDS,
DWMWA_HAS_ICONIC_BITMAP,
DWMWA_DISALLOW_PEEK,
DWMWA_EXCLUDED_FROM_PEEK,
DWMWA_CLOAK,
DWMWA_CLOAKED,
DWMWA_FREEZE_REPRESENTATION,
DWMWA_LAST
}
public IntPtr Handle { get; private set; }
public void HideWindow()
{
int value = 0x01;
int hr = DwmSetWindowAttribute(Handle, DwmWindowAttribute.DWMWA_CLOAK, ref value, Marshal.SizeOf(typeof(int)));
}
}
考虑到 Handle 是一个定义明确的 IntPtr
。我正在尝试使用 DwmSetWindowAttribute
隐藏 window 但由于某些奇怪的原因它永远不会起作用(window 始终可见),结果(存储在 hr
) 总是-2147024891。我只是不明白为什么会这样,因为代码似乎是正确的(恕我直言)。
你有什么线索吗?
谢谢
我也得到了相同的结果(访问被拒绝),即使使用管理员,我发现只有系统 shell 和应用程序本身可以设置 cloak,third-party 进程将被拒绝。
我最近开始将较低级别的 windows APIsn 与 C# 一起用于应用程序原型,我偶然发现了一个我无法解决的问题:考虑以下代码:
public class dW
{
[DllImport("dwmapi.dll")]
public static extern int DwmSetWindowAttribute(IntPtr hwnd, DwmWindowAttribute dwAttribute, ref int pvAttribute, int cbAttribute);
[Flags]
public enum DwmWindowAttribute : uint
{
DWMWA_NCRENDERING_ENABLED = 1,
DWMWA_NCRENDERING_POLICY,
DWMWA_TRANSITIONS_FORCEDISABLED,
DWMWA_ALLOW_NCPAINT,
DWMWA_CAPTION_BUTTON_BOUNDS,
DWMWA_NONCLIENT_RTL_LAYOUT,
DWMWA_FORCE_ICONIC_REPRESENTATION,
DWMWA_FLIP3D_POLICY,
DWMWA_EXTENDED_FRAME_BOUNDS,
DWMWA_HAS_ICONIC_BITMAP,
DWMWA_DISALLOW_PEEK,
DWMWA_EXCLUDED_FROM_PEEK,
DWMWA_CLOAK,
DWMWA_CLOAKED,
DWMWA_FREEZE_REPRESENTATION,
DWMWA_LAST
}
public IntPtr Handle { get; private set; }
public void HideWindow()
{
int value = 0x01;
int hr = DwmSetWindowAttribute(Handle, DwmWindowAttribute.DWMWA_CLOAK, ref value, Marshal.SizeOf(typeof(int)));
}
}
考虑到 Handle 是一个定义明确的 IntPtr
。我正在尝试使用 DwmSetWindowAttribute
隐藏 window 但由于某些奇怪的原因它永远不会起作用(window 始终可见),结果(存储在 hr
) 总是-2147024891。我只是不明白为什么会这样,因为代码似乎是正确的(恕我直言)。
你有什么线索吗?
谢谢
我也得到了相同的结果(访问被拒绝),即使使用管理员,我发现只有系统 shell 和应用程序本身可以设置 cloak,third-party 进程将被拒绝。