C# 即使在现代应用程序中也是最顶级的

C# 即使在现代应用程序中也是最顶级的,c#,wpf,topmost,C#,Wpf,Topmost,我有一个录音程序,除了打开一个现代应用程序(Windows 8)或开始屏幕时,它一直保持在最顶端 可以使桌面应用程序保持在现代应用程序之上,如放大镜工具: 现在的问题是,在WPF窗口中使用最上面的选项和/或API调用在现代应用程序中不起作用 我正在尝试的是: 只有标记为可访问性相关的应用程序才能执行此操作。要实现这一目标,请遵循以下指南(摘自的评论部分): 应用程序必须要求uiAccess(app.manifest) 应用程序必须断言“最顶层”窗口定位(在Win32/SetWindowPos或

我有一个录音程序,除了打开一个
现代应用程序(Windows 8)
开始屏幕
时,它一直保持在
最顶端

可以使桌面应用程序保持在现代应用程序之上,如
放大镜
工具:

现在的问题是,在WPF窗口中使用最上面的选项和/或API调用在现代应用程序中不起作用

我正在尝试的是:
只有标记为可访问性相关的应用程序才能执行此操作。要实现这一目标,请遵循以下指南(摘自的评论部分):

  • 应用程序必须要求uiAccess(app.manifest)
  • 应用程序必须断言“最顶层”窗口定位(在Win32/SetWindowPos或WinForms/WPF的“最顶层”属性中, (以编程方式或其他方式)
  • 在不更改组策略设置的情况下,必须将其安装到某个受信任的位置[C:\Windows,C:\Program Files, C:\ProgramFiles(x86)]。A.注意:如果您希望能够运行它 对于任意位置,必须禁用安全设置:“用户” 帐户控制:仅升级已安装的UIAccess应用程序 在安全地点”。B注2:这与设置相同 HKLM\Software\Microsoft\Windows\CurrentVersion\Policys\System\ValidateAdminCodeSignatures 到0
  • 无法在调试器中运行所述应用程序
  • 如果是.NET应用程序a。清单必须嵌入到生成后步骤b中。应用程序必须具有“延迟签名” (这意味着它不能从内置调试器运行,尽管您可以 构建和附加–这是Microsoft所做的)
  • 应用程序必须使用受信任的证书签名
  • 所说的可信证书必须安装到可信根证书颁发机构(这很重要!它不能只是简单地 已安装)有关更多信息,请参阅:

  • 。。。这可不是一件小事

    那是不可能的。就像你不能在全屏DirectX游戏上显示窗口一样。也许在Windows 10中,还没有使用它。但是示例图像发生了什么?Win32应用程序运行在一切之上。
    static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
    static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2);
    static readonly IntPtr HWND_TOP = new IntPtr(0);
    static readonly IntPtr HWND_BOTTOM = new IntPtr(1);
    const UInt32 SWP_NOSIZE = 0x0001;
    const UInt32 SWP_NOMOVE = 0x0002;
    const UInt32 TOPMOST_FLAGS = SWP_NOMOVE | SWP_NOSIZE;
    
    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
    
    //OnLoaded event handler:
    
    var source = PresentationSource.FromVisual(this) as HwndSource;
    SetWindowPos(source.Handle, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS);