注意:此问题仅适用于 Windows 11。
我想在现有 shell 窗口的新选项卡中打开一个文件夹。官方好像没有API。
我尝试过两种方法:
第一个,也是最明显的一个,是ShellExecute
带有动词的函数opennewtab
(该动词来自注册表中文件夹 ProgID 的 Shell 键内部 - [HKEY_CLASSES_ROOT\Folder\shell\opennewtab]
)。但是,这没有用。该函数只是为该文件夹打开一个新窗口。
为了第二次机会,我检查了opennewtab
注册表中的动词。它被实现为IExecuteCommand
(through DelegateExecute
)。因此,我的第二次尝试是从COM服务器检索接口,通过它们提供的方法(SetXXX
for 的函数系列IExecuteCommand
、Initialize
方法IInitializeCommand
等)设置所需的参数,最后调用该Execute
方法。
为了了解Windows Shell传递给这些方法的内容以及调用它们的顺序,我实现了自定义动词实现及其COM服务器,并替换了在我的服务器上注册的旧COMopennewtab
服务器。
在这里您可以看到 DebugView 显示的输出(我的动词实现使用 输出OutputDebugString
)。
正如您所看到的,它并没有调用接口的所有方法。所以,我认为通过设置相同的参数应该很容易。但是,是的,有些事情我没有考虑到。此方法生成了Null
解除引用异常,但没有成功。
注意:我知道第二个是“hacky”的。
注意:CLSID
实现默认动词处理程序的 是CLSID_ExecuteFolder
。
我们如何在新选项卡中打开文件夹?