C++ 如何获取windows的命令行;以…开头;功能?
我以前问过一个问题,关于如何获得windows“打开时使用…”应用程序列表。 我来回答这个问题 我们可以使用C++ 如何获取windows的命令行;以…开头;功能?,c++,windows,msdn,C++,Windows,Msdn,我以前问过一个问题,关于如何获得windows“打开时使用…”应用程序列表。 我来回答这个问题 我们可以使用shassoceneumhandlers接口获取与特定文件扩展名的文件关联,例如.png 然后使用IAssocHandler,可以检索与文件类型(.png)关联的可执行文件的完整路径和文件名。例如:['Paint':'C:\\Windows\\system32\\mspaint.exe',…] 但是我想获得使用给定图像执行mspaint.exe的命令行。 像这样~%systemroot%\
shassoceneumhandlers
接口获取与特定文件扩展名的文件关联,例如.png
然后使用IAssocHandler,可以检索与文件类型(.png
)关联的可执行文件的完整路径和文件名。例如:['Paint':'C:\\Windows\\system32\\mspaint.exe',…]
但是我想获得使用给定图像执行mspaint.exe的命令行。
像这样~%systemroot%\system32\mspaint.exe“%1”
是否有另一个msdn api可以帮助我们获得“使用..打开”命令?
我认为应该有,因为windows XP已经有了这个功能。有
SHOpenWithDialog
功能
但是,您不能使用它来检索所选程序。您只能使用它来调用“打开方式”行为并最终打开文件(如果设置了OAIF\u 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;
}
#包括
#包括
#pragma注释(lib,“Shell32.lib”)
int main()
{
OPENASINFO信息={0};
info.pcszFile=L“C:\\Temp\\SomeFile.png”;
info.pcszClass=NULL;
info.oaifInFlags=OAIF_ALLOW_REGISTRATION | OAIF_EXEC;
SHOpenWithDialog(空,&info);
返回0;
}
使用AssocQueryString(…,ASSOCSTR_命令,…)代码>
例如:
TCHAR commandline[1024];
DWORD size = ARRAYSIZE(commandline);
AssocQueryString(0, ASSOCSTR_COMMAND, _T(".txt"), 0, commandline, &size);
你好,谢谢你的建议。我仍然想得到命令行,因为我想实现我自己的OpenWith菜单。也许我在你的问题中遗漏了一些东西。您说过可以检索可执行文件的完整路径。要构造命令行,只需添加目标文件作为第一个参数。Windows程序需要这样做,如果以这种方式调用时需要其他参数,它们将提供一个不需要的包装器可执行文件。