Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何获取windows的命令行;以…开头;功能?_C++_Windows_Msdn - Fatal编程技术网

C++ 如何获取windows的命令行;以…开头;功能?

C++ 如何获取windows的命令行;以…开头;功能?,c++,windows,msdn,C++,Windows,Msdn,我以前问过一个问题,关于如何获得windows“打开时使用…”应用程序列表。 我来回答这个问题 我们可以使用shassoceneumhandlers接口获取与特定文件扩展名的文件关联,例如.png 然后使用IAssocHandler,可以检索与文件类型(.png)关联的可执行文件的完整路径和文件名。例如:['Paint':'C:\\Windows\\system32\\mspaint.exe',…] 但是我想获得使用给定图像执行mspaint.exe的命令行。 像这样~%systemroot%\

我以前问过一个问题,关于如何获得windows“打开时使用…”应用程序列表。 我来回答这个问题

我们可以使用
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程序需要这样做,如果以这种方式调用时需要其他参数,它们将提供一个不需要的包装器可执行文件。