在 Windows 10 中以 shell 而不是资源管理器的形式启动批处理脚本

在 Windows 10 中以 shell 而不是资源管理器的形式启动批处理脚本

在 Windows 10 中,默认 shell 是explorer.exe,它为您提供任务栏、桌面图标和开始菜单。

自 Windows 10 v1909(可能还有 v1903)以来,微软决定使用超级键(CTRL- ALT- SHIFT- WIN)加上几个键,这是 Office 应用程序的默认键,而不允许未安装 Office 的用户使用这些键来休闲。

我已将这些键绑定到各种程序中的操作,但现在每个键都会在我的网络浏览器中打开一个页面,导航到我不使用的 office365,或者在 O 代表 OneDrive 的情况下,由于我没有安装 OneDrive,所以给我一个错误消息。

应该可以通过调整注册表来实现按下按钮时不打开任何内容,但在 Windows 10 v1909 中,该功能不再起作用。

我需要摆脱这种行为,所以我做了一些研究:

看来微软已将这种支持直接构建到了explorer.exe;我可以杀死explorer.exe它并且热键最终消失了,但是当我启动时explorer.exe,它们又回来了。

似乎在 启动时explorer.exe,这些键会被注册一次,如果键注册失败,Explorer 将不会再次尝试。这实际上意味着,为了恢复我的热键,我需要关闭 Explorer,重新启动使用这些热键的应用程序,然后启动 Explorer。甚至可以关闭 Explorer,启动一个注册了所有 Office 热键的应用程序,启动 Explorer,然后取消注册 Office 热键,从那一刻起,它们就完全自由了。

鉴于我只有一个使用所有这些全局热键的程序,我需要做的就是在启动 Explorer 之前启动这个程序就可以了。

我当然可以运行一个脚本来终止 Explorer,启动我的程序,然后启动 Explorer,但考虑到这无论如何都会在系统启动时运行,如果我可以启动我的启动脚本而不是 Explorer,则可以避免 Explorer 闪烁,这可以通过设置备用 shell 来实现。但据我所知,只有.exe文件可以设置为 shell。

有谁知道如何将.cmd文件(或其他脚本语言)设置为 shell,或者有谁知道一种干净的方法来解决我的全局热键问题?

编辑:我在使用 Windows 10 Pro。

我实际上尝试过制作一个 VB .net 程序,该程序explorer.exe在注册热键后会启动,但无法使其可靠地工作。如果explorer.exe不是 shell,并且我启动 explorer.exe,虽然它没有运行,但我只得到一个文件浏览器,而不是任务栏等。如果 Explorer 是 shell,并且它启动了,那么通过我的程序终止它会中止启动序列,因此我不得不大大延迟我的例程,这意味着在某个时候我会得到明显的 Explorer 重启,这远非理想。

我曾考虑过制作自己的 shell 来替代任务栏和桌面,但考虑到我使用的是 Actual Tools Window Manager,并且它依赖于 Explorer 作为 shell,所以这也不是非常理想。因此,这个问题仍然悬而未决,尽管我担心我所问的问题根本不可能实现。

答案1

键盘筛选器(WMI 提供程序参考)

仅支持 Windows 10 企业版和 Windows 10 教育版

WEKF_PredefinedKey
此类阻止或取消阻止预定义的组合键,例如Ctrl++AltDelete

class WEKF_PredefinedKey {
 [Static] uint32 Enable (
   [In] string PredefinedKey<
 );

 [Static] uint32 Disable (
   [In] string PredefinedKey
 );

 [Key] string Id;
 [Read, Write] boolean Enabled;
};

来源: 微软文档

答案2

我还没有测试过这个想法,但它看起来既可行又简单:不是替换 Explorer,而是创建一个.reg文件,删除或修改 Explorer 在注册表中创建的不良条目。然后在 Windows 的任务计划程序中创建一个任务,该任务将运行该.reg文件,并在您每次登录 Windows 时触发。

有关详细信息,请参阅:For more information, see:
如何使用 .reg 文件添加、修改或删除注册表子项和值

答案3

这里已经解决: https://github.com/stringlapse/OfficeKeyFix

您应该加载带有 C++ 常规任务扩展的 Visual Studio。创建空项目,构建它,然后移至自动运行。

最好在任务计划器中创建延迟 30 或 60 秒的任务。

相关内容