在 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++AltDeleteclass 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 秒的任务。