首页 > 解决方案 > 如何格式化 Registry->Shell->Open->Command(从 AssocQueryString 输出)

问题描述

我不能使用 ShellExecute(Ex) 但我必须提供非常相似的功能。

我的函数接受“文件”和“参数”字符串。从文件字符串中,我提取一个扩展名(如果可用)并调用 AssocQueryStringW。具体来说:

    rc = AssocQueryStringW(URL_SCHEME_FILE | ASSOCF_NOTRUNCATE,
                           ASSOCSTR_COMMAND,
                           extension,
                           verb,
                           execStr,
                           &execStrSize);

(动词 == “打开”)。如果已注册扩展,这将返回与注册表项关联的数据字符串:HKEY_CLASSES_ROOT/\Shell\Open\Command。我想我可以使用 FormatMessage 来格式化返回的字符串和我的参数。不幸的是,有些条目包含 (%*)。IE.AssocFile.WEBSITE 包含一个 %l(是的小写 L,而不是一 (1)。我将此信息传递给 CreateProcessAsUser。是否有 Windows 函数/API 可以格式化这些“命令行”?

如果不是,我可以依赖 %* 作为 shell 打开字符串中的最后一个测试,并且除了 %1 (文件名)之外没有其他参数被使用?换句话说,我可以用我的参数字符串替换 %* 吗?

标签: c++cwindows

解决方案


推荐阅读