Verknüpfungen, wie geht das ??



  • Hallo Leute,
    weiß hier nicht zufällig jemand, wie man ein Programm schreibt, dass selbstständig Verknüpfungen (z.B. auf dem Desktop)erzeugen kann ? Gibt's da irgendwelche Funktionen in der Win API ?

    Danke im Voraus !



  • Geklaut aus PC Intern 5, Data Becker:

    //----- Typedefs -------------------------------------------------------
    
    typedef IShellLink *LPSHELLLINK;
    typedef IPersistFile *LPPERSISTFILE;
    
    /**********************************************************************/
    /* CreateShortcut : Hilfsfunktion zur Erzeugung eines Shortcuts       */
    /*--------------------------------------------------------------------*/
    /* Parameter :    pszPath       - Pfad, auf den der Shortcut verweist */
    /*                pszArguments  - Programmargumente                   */
    /*                pszLocation   - Wo und unter welchem Namen soll der */
    /*                                Shortcut gespeichert werden?        */
    /*                pszWorkingDir - Arbeitsverzeichnis                  */
    /*                        pszIcon          - Icon                                             */
    /*                nCmdShow      - Wie soll das Applikationsfenster    */
    /*                                nach dem Start dargestellt werden?  */
    /* Rückgabewert : TRUE  - Shortcut wurde erzeugt                      */
    /*                FALSE - Fehler                                      */
    /**********************************************************************/
    BOOL CreateShortcut( LPSTR pszPath,
                         LPSTR pszArguments,
                         LPSTR pszLocation,
                         LPSTR pszWorkingDir,
                         LPSTR pszIcon,
                         int   nCmdShow )
    {
      LPSHELLLINK pShellLink;
      HRESULT hrCoInit;                        // OLE-Installations-Ergebnis
      HRESULT hr;                             // Ergebnis der Objektmethoden
    
      hrCoInit = CoInitialize( NULL );                 // OLE initialisieren
      hr = CoCreateInstance(   CLSID_ShellLink, // ShellLink-Objekt erzeugen
                               NULL,
                               CLSCTX_INPROC_SERVER,
                               IID_IShellLink,
                               (void**)&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 );
          }
    //    *************************************
    //
    //      hr = pPersistFileRelease( );
    //
    //    *************************************
        }
        pShellLink->Release( );
      }
      // Wenn OLE hier initialisiert wurde, muß es auch hier wieder de-
      // installiert werden.
      if( SUCCEEDED( hrCoInit ) ) CoUninitialize();
    
      return SUCCEEDED( hr );
    }
    

    Mit dem Teil kann man eine Verknuepfung in einem beliebigen Verzeichnis erstellen. Ist - denke ich mal - selbsterklaerend!

    edit: WORD durch wchar_t ersetzt.


Anmelden zum Antworten