我之前曾问过一个关于如何让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已经拥有这种能力。
答案 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;
}