IShellLink::SetArguments



  • Das Auslesen von IShellLinks (Windows Shortcuts) klappt. Aber beim Editieren der Argumente via IShellLink::SetArguments passiert nichts.

    std::wstring link(L"C:\\Users\\test\\Desktop\\test.lnk");
    SetArguments(link, L"hello");
    

    Folgenden Code verwende ich zum Editieren der Argumentliste:

    void SetArguments(const std::wstring& path, const std::wstring& arguments) {
      IShellLink* shell_link;
      IPersistFile* persistent_file;
    
      if (SUCCEEDED(CoCreateInstance(CLSID_ShellLink,
                                     NULL,
                                     CLSCTX_INPROC_SERVER,
                                     IID_IShellLink,
                                     reinterpret_cast<LPVOID*>(&shell_link)))) {
        if (SUCCEEDED(shell_link->QueryInterface(IID_IPersistFile,
                                                 reinterpret_cast<void**>(&persistent_file)))) {
          if (SUCCEEDED(persistent_file->Load(path.c_str(), STGM_READ))) {
            if (SUCCEEDED(shell_link->SetArguments(arguments.c_str()))) {
              // OK
            }
          }
          persistent_file->Release();
        }
        shell_link->Release();
      }
    }
    

    Alles wurde zuvor mit CoInitialize(NULL) initialisiert. Der Testlink existiert bereits.



  • In IPersistFile gibt es nicht nur Load, sondern auch Save. 😉



  • Vielen dank!!!


Anmelden zum Antworten