如何获得Windows的命令行“打开..”function?

我以前问过一个关于如何让Windows“打开..”应用程序列表的问题。 这是一个这个问题的链接 。

我们可以使用SHAssocEnumHandlers接口来获取特定文件扩展名的文件关联,例如.png

然后使用IAssocHandler并可以检索与文件types( .png )关联的可执行文件的完整path和文件名。 例如: ['Paint': 'C:\\Windows\\system32\\mspaint.exe', ...]

但是我想获得执行mspaint.exe与给定的图像的命令行。 像这样〜 "%systemroot%\system32\mspaint.exe" "%1"

有没有另一个MSDN API可以帮助我们获得“打开..”命令? 我认为它应该有,因为Windows XP已经有这个能力。

Solutions Collecting From Web of "如何获得Windows的命令行“打开..”function?"

使用AssocQueryString(..., ASSOCSTR_COMMAND, ...);

例:

 TCHAR commandline[1024]; DWORD size = ARRAYSIZE(commandline); AssocQueryString(0, ASSOCSTR_COMMAND, _T(".txt"), 0, commandline, &size); 

SHOpenWithDialog函数。

链接到MSDN上的SHOpenWithDialog

但是,您不能使用它来检索选定的程序。 您只能用它来调用“打开方式”行为并最终打开文件(如果设置了OAIF_EXEC )。 如果这是你感兴趣的所有内容,那就试试看:

 #include <windows.h> #include <Shlobj.h> #pragma comment(lib, "Shell32.lib") int main() { OPENASINFO info = { 0 }; info.pcszFile = L"C:\\Temp\\SomeFile.png"; info.pcszClass = NULL; info.oaifInFlags = OAIF_ALLOW_REGISTRATION | OAIF_EXEC; SHOpenWithDialog(NULL, &info); return 0; }