Verknüpfung erstellen



  • hmm ok der erstellt nun ein Shortcut... aber das verweisst nicht auf die richtige datei.. hat hier mal jemandn beispiel wie man diese Funktion richtig verwendet?



  • Hier: Die Loesung
    an alle, auch mal gucken!



  • mano ich bin dumm^^ ich dachte immer verknüpfungen hätten die endung ink.. dabei ist lnk scheisse...



  • Ich hab den Code aus dem Post http://www.c-plusplus.net/forum/viewtopic-var-t-is-39361.html in mein Programm kopiert, das funzt aber nich.
    Es kommen einige Fehlermeldungen, wobei ich annehme, dass es Folgefehler aus folgendem Fehler sind:
    Zu

    typedef IShellLink *LPSHELLLINK;
    

    kommt die Fehlermeldung

    ',' expected
    

    Kann mir da jemand Helfen?
    Ich verwende den Borland C++ Builder Standard



  • ich sehe in dem typedef keinen fehler ausser IShellLink ist nicht deklariert. ergo header eingebunden? afaik müsste es shobjidl.h sein. ich glaub den typedef kannst du dir auch schenken, schau am besten mal im header nach.
    falls das nicht der fehler war brauchen wir mehr code und genauere fehlerbeschreibungen.



  • Hier die Fehler:

    typedef IShellLink *LPSHELLLINK;                                         //ein Komma wird direkt nach IShellLink erwartet (dann kommt hier keine Fehlermeldung mehr; aber in der nächsten Zeile funzt das ja so wies is, die anderen Fehlermeldungen werden davon auch nicht beeinflusst)
    typedef IPersistFile *LPPERSISTFILE;
    
    BOOL CreateShortcut( LPSTR pszPath,
                         LPSTR pszArguments,
                         LPSTR pszLocation,
                         LPSTR pszWorkingDir,
                         LPSTR pszIcon,
                         int   nCmdShow )
    {
      LPSHELLLINK pShellLink;                                                //Undefined Symbol 'LPSHELLLINK' und Statement missing ';'
      HRESULT hrCoInit;                       // OLE-Installations-Ergebnis
      HRESULT hr;                             // Ergebnis der Objektmethoden
    
      hrCoInit = CoInitialize( NULL );                 // OLE initialisieren
      hr = CoCreateInstance(   CLSID_ShellLink, // ShellLink-Objekt erzeugen //Undefined Symbol 'CLSID_ShellLink'
                               NULL,
                               CLSCTX_INPROC_SERVER,
                               IID_IShellLink,                               //Undefined Symbol 'IID_IShellLink'
                               (void**)&pShellLink );                        //Undefined Symbol 'pShellLink'
      if( SUCCEEDED( hr ) )
      {
        LPPERSISTFILE pPersistFile;
    
        // PersistFile Interface ermitteln   -------------------------------
        if(SUCCEEDED(pShellLink->QueryInterface(IID_IPersistFile,(void**)&pPersistFile)))
        {
          wchar_t wsz[ MAX_PATH ];
    
          // Programmpfad setzen  ------------------------------------------
          hr = pShellLink->SetPath(pszPath);
    
          // Argumente setzen ----------------------------------------------
          if( SUCCEEDED( hr ) )
            hr = pShellLink->SetArguments(pszArguments);
    
          // Arbeitsverzeichnis setzen -------------------------------------
          if( SUCCEEDED( hr ) )
            hr = pShellLink->SetWorkingDirectory(pszWorkingDir );
    
          // Icon setzen ---------------------------------------------------
          if (SUCCEEDED(hr))
              hr = pShellLink->SetIconLocation(pszIcon,0);
    
          // ShowCommand setzen --------------------------------------------
          if( SUCCEEDED( hr ) )
            hr = pShellLink->SetShowCmd(nCmdShow );
    
          // Pfad setzen, an dem Shortcut abgespeichert werden soll  -------
          if( SUCCEEDED( hr ) )
          {
            MultiByteToWideChar( CP_ACP, 0, pszLocation, -1, wsz, MAX_PATH);
            hr = pPersistFile->Save( wsz, TRUE );
            hr = pPersistFile->SaveCompleted( wsz );
          }
        }
        pShellLink->Release( );
      }
      if( SUCCEEDED( hrCoInit ) ) CoUninitialize();
    
      return SUCCEEDED( hr );
    }
    

    Mehr kann ich dazu nicht sagen.

    miller_m: Bist du sicher, das die header-Datei shobjidl.h heist? Die kann bei mir nämlich nicht eingebunden werden, weil sie nicht existiert

    #include <shobjidl.h>
    

    .

    Wo muss das typedef stehen?



  • Da habe ich auch mal lange geknabbert. Habe mir das Ganze dann in eine Klasse gepackt (ist aber nur dünn umhüllt). Funktioniert jedenfalls. Vielleicht hilfreich.
    ..



  • Ich weiß leider nicht, wie ich die Funktion aufrufen muss. Kann mir das jemand erklären?



  • Jetzt hab ichs, man brauch nur die Funktion aufrufen. (LoL an mich) 🙂



  • Ich drehe mich beim Versuch dies anzuwenden immer im Kreis.

    Entweder erhalte ich die Fehlermeldung, dass "CLSID_ShellLink" nicht bekannt ist, oder es hagelt beim Einbinden von "#include <ShObjIdl.h>" Fehler wegen doppelter Definitionen.

    Was mache ich den bloß falsch ?
    Welcher Include fehlt denn für CLSID_ShellLink ?


Anmelden zum Antworten