0

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

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

.png然后使用 IAssocHandler 并可以检索与文件类型( )关联的可执行文件的完整路径和文件名。前任:['Paint': 'C:\\Windows\\system32\\mspaint.exe', ...]

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

是否有另一个 msdn api 可以帮助我们获得“open with..”命令?我认为它应该有,因为 Windows XP 已经有这个能力。

4

2 回答 2

1

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;
}
于 2013-08-20T04:03:41.540 回答
1

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

例子:

TCHAR commandline[1024];
DWORD size = ARRAYSIZE(commandline);
AssocQueryString(0, ASSOCSTR_COMMAND, _T(".txt"), 0, commandline, &size);
于 2013-08-20T12:54:55.707 回答