以编程方式在 Win 10 中切换焦点辅助模式

在我看过的几乎所有地方都有一些未解决的问题,所以我想我应该把我的问题加到统计表中。

我希望以编程方式在 Win 10 中切换 Focus Assist 模式,但迄今为止在官方和非官方渠道中都没有找到很多关于此的文档。

如果我无法以编程方式切换焦点辅助,我将需要从本质上模拟相同的行为含义,即我将需要拦截和压制传入的通知,直到它被关闭,然后显示在此期间被静音的通知。

似乎现在唯一可用的方法是使用反向 WNF 信息编写一些 c++,然后祈祷它不会在更新中中断。在我进入那个兔子洞之前,我想我会看看是否有人这样做过,或者也许可以给我指出一个我没有考虑过的资源。

通知侦听器很棒,可以让我访问所述通知以满足我的次要要求,但它不允许我在它们进入时将它们静音,因为它与 vs 并行运行会中断通知流。


泛舟湖上清波郎朗
浏览 86回答 3
3回答

冉冉说

我希望以编程方式在 Win 10 中切换 Focus Assist 模式,但迄今为止没有成功目前,UWP 不提供这样的 api 以Focus Assist编程方式切换模式。如果您确实需要此功能,请随时在UserVoice上请求此功能。

喵喔喔

您可以使用 WNF 机制切换模式。生成文件“0”= 00 00 00 00(十六进制)和文件“1”= 02 00 00 00(十六进制)的二进制内容例如,在 git bash 中echo -n -e "\x00\x00\x00\x00" > 0 echo -n -e "\x02\x00\x00\x00" > 1克隆存储库:https ://github.com/ionescu007/wnfunpip install Pywin32 pip install hexdump开启优先模式python WnfDump.py -w WNF_SHEL_QUIET_MOMENT_SHELL_MODE_CHANGED 1关闭焦点辅助python WnfDump.py -w WNF_SHEL_QUIET_MOMENT_SHELL_MODE_CHANGED 0如果您找到打开“仅警报”模式的方法,请告诉我。您也可以使用相同的技术 C++。编辑:实际上,该命令激活为“全屏模式”设置的模式,文件内容 01 00 00 00 将激活“游戏模式”。如果两者都关闭,则该命令将无效。

眼眸繁星

正如 Pavel Henrykhsen 的回答所说,有一种程序化的方式,尽管没有记录且不受支持。这是一个实现,尽管是用 Rust 编写的。相关功能是ZwUpdateWnfStateData来自ntdll.dll. 在这种情况下,相关论点是我在https://github.com/googleprojectzero/sandbox-attacksurface-analysis-tools/blob/80d7fcc8df9c3160c814c60f5121ae46c560a1b5/NtApiDotNet/NtWnfWellKnownNames.cs#L865找到的状态 ID具有值的缓冲区[0x02, 0x00, 0x00, 0x00]缓冲区的长度之后的所有参数都可以安全地忽略。// Pseudo-codeZwUpdateWnfStateData(            0xd83063ea3bf5075UL,            new byte[] {0x02, 0x00, 0x00, 0x00},            4,            0,            0,            0,            0,        );这似乎确实依赖于在焦点模式设置中打开的“当我在全屏模式下使用应用程序时”设置。此外,如果有人试图使用它来启用焦点模式,我建议首先禁用焦点模式(new byte[] {0x00, 0x00, 0x00, 0x00}而不是通过)。然后,几毫秒后,可以安全地启用聚焦模式。
打开App,查看更多内容
随时随地看视频慕课网APP