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);