gpt4 book ai didi

wpf - 在 WPF 应用程序中禁用 Aero Peek

转载 作者:行者123 更新时间:2023-12-04 18:50:56 26 4
gpt4 key购买 nike

我想在我的 WPF 应用程序中禁用 Aero Peek(当用户将鼠标放在“显示桌面”按钮上时,我的应用程序必须可见)。我使用这个 PInvoke 签名:

[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_LAST
}

[Flags]
public enum DWMNCRenderingPolicy : uint
{
UseWindowStyle,
Disabled,
Enabled,
Last
}

[DllImport("dwmapi.dll", PreserveSig=false)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool DwmIsCompositionEnabled();

[DllImport("dwmapi.dll", PreserveSig=false)]
public static extern Int32 DwmSetWindowAttribute(IntPtr hwnd,
DwmWindowAttribute dwmAttribute,
IntPtr pvAttribute,
uint cbAttribute);

和这种用法:
    var helper = new WindowInteropHelper(this);
helper.EnsureHandle();

if (API.DwmIsCompositionEnabled())
{
var status = Marshal.AllocCoTaskMem(sizeof(uint));
Marshal.Copy(new[] {(int) API.DWMNCRenderingPolicy.Enabled}, 0, status, 1);
API.DwmSetWindowAttribute(helper.Handle,
API.DwmWindowAttribute.DWMWA_EXCLUDED_FROM_PEEK,
status,
sizeof (uint));
}

在我的 64 位系统(Windows 7 Professional)中,只有在我运行 64 位应用程序时它才有效。如果我在 WOW64 模式下运行 32 位应用程序,我会收到异常:

“对 PInvoke 函数 'XXX::DwmSetWindowAttribute' 的调用使堆栈失衡。这可能是因为托管 PInvoke 签名与非托管目标签名不匹配。检查 PInvoke 签名的调用约定和参数是否与目标非托管签名匹配。 "

你怎么看待这件事?解决办法是什么?

最佳答案

我更改签名:

[DllImport("dwmapi.dll", PreserveSig = true)]
public static extern int DwmSetWindowAttribute(IntPtr hwnd,
DwmWindowAttribute dwmAttribute,
IntPtr pvAttribute,
uint cbAttribute);

和用法:
if (API.DwmIsCompositionEnabled())
{
var status = Marshal.AllocHGlobal(sizeof(int));
Marshal.WriteInt32(status, 1); // true
API.DwmSetWindowAttribute(helper.Handle,
API.DwmWindowAttribute.DWMWA_EXCLUDED_FROM_PEEK,
status,
sizeof(int));
}

关于wpf - 在 WPF 应用程序中禁用 Aero Peek,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6160118/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com