Verknüpfung erstellen



  • Hallo,
    wie erstell ich per Code eine Verknüpfung? und wie ist so eine Datei überhaupt aufgebaut?

    Mfg Burnner



  • Siehe FAQ.



  • nett gibt 3 fehler...
    ich hab den Code schon gesehen.. aber weil er nicht funzte hab ich hier halt mal reingeschrieben..

    error C2664: 'MultiByteToWideChar': Konvertierung des Parameters 5 von 'WORD [260]' in 'LPWSTR' nicht möglich
            Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
    error C2664: 'IPersistFile::Save': Konvertierung des Parameters 1 von 'WORD [260]' in 'LPCOLESTR' nicht möglich
            Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
    error C2664: 'IPersistFile::SaveCompleted': Konvertierung des Parameters 1 von 'WORD [260]' in 'LPCOLESTR' nicht möglich
            Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
    


  • hmm weiss niemand wie?



  • Zeig mal den Code, wie du die Funktion eingebunden hast 😉



  • Ganz normal.. code reinkopiert. fertig naja ka welche include der braucht. sollte man auch in die faq schreiben..



  • Ohne es überprüft zu haben: schreib anstelle WORD im Code mal wchar_t.



  • joa
    geil danke dir!
    Sollte man noch in die FAQ schreiben



  • 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 ?


Log in to reply