如何让Windows命令行“打开...”功能?

时间:2013-08-20 03:29:01

标签: c++ windows msdn

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

示例:

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

答案 1 :(得分:0)

SHOpenWithDialog功能。

Link to SHOpenWithDialog on MSDN

但是,您无法使用它来检索所选程序。您只能使用它来调用“打开方式”行为并最终打开文件(如果设置了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;
}