【问题标题】:How to get command line of windows "open with .." function?如何获得 Windows 的命令行“以 .. 打开”功能?
【发布时间】:2013-08-20 23:01:28
【问题描述】:

我之前问过一个问题,是关于如何让 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 已经有这个能力了。

【问题讨论】:

    标签: c++ windows msdn


    【解决方案1】:

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

    例子:

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

    【讨论】:

      【解决方案2】:

      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;
      }
      

      【讨论】:

      • 您好,感谢您的建议。我仍然想获得命令行,因为我想实现我自己的用菜单打开。
      • 也许我从你的问题中遗漏了一些东西。您说您可以检索可执行文件的完整路径。要构建命令行,只需将目标文件添加为第一个参数。 Windows 程序期望这一点,如果它们在以这种方式调用时需要其他参数,它们将提供一个不需要的包装器可执行文件。
      猜你喜欢
      • 2013-12-04
      • 1970-01-01
      • 1970-01-01
      • 2013-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      • 1970-01-01
      相关资源
      最近更新 更多