如何获取窗口的命令行"打开方式.."功能?

How to get command line of windows "open with .." function?

本文关键字:方式 功能 命令行 何获取 获取 窗口      更新时间:2023-10-16

我之前问过一个问题,关于如何让窗口"用..打开"应用程序列表。这是这个问题的链接。

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

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

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

有没有其他msdnapi可以帮助我们获得"openwith.."命令?我认为它应该有,因为windows XP已经有了这个功能。

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

示例:

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

SHOpenWithDialog函数。

MSDN 上SHOpenWithDialog的链接

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