mittels C++ Icon auf Desktop erzeugen



  • Guten Morgen ich hätte da mal eine Frage und hoffe sehr das mir da jemand weiterhelfen kann.
    Es geht ganz einfach gesagt darum mittels C++ ein Icon auf dem Desktop zu erzeugen.
    Weis jemand wie das geht oder hat da jemand Erfahrung mit gemacht?

    Wäre wirklich sehr dankbar um jeden Tipp und jede Idee

    greetz sand13r



  • /*
    * Verknüpfung erstellen mit C++
    * ---------------------------------------
    *
    * Written by M4CH!N3
    *
    * Params:
    *	pszPath =		Pfad zum/zur Verknüpften Ordner/Datei
    *	pszArguments=	eventuelle Kommandozeilenparameter
    *	pszLocation=	Pfad, wo die Verknüpfung gespeichert werden soll
    *	pszWorkingDir=	Working Directory -> Aktives Directory, in welchem die Verknüpfung arbeiten soll
    *	pszIcon=		Pfad zum Icon / zur Exe mit dem Icon
    *	nCmdShow=		Showstate vom Verknüpften Programm/Ordner (SW_SHOWNORMAL; SW_SHOWMAXIMIZED; SW_SHOWMINNOACTIVE)
    *
    * November 2006
    *
    */
    #include <shobjidl.h>
    #include <shlguid.h>
    
    typedef IShellLink *LPSHELLLINK; 
    typedef IPersistFile *LPPERSISTFILE; 
    
    BOOL CreateShortcut( LPCSTR pszPath, LPCSTR pszArguments, LPCSTR pszLocation, LPCSTR pszWorkingDir, LPCSTR pszIcon, int nCmdShow ) 
    { 
      LPSHELLLINK pShellLink; 
      HRESULT hrCoInit;                        
      HRESULT hr;                             
    
      hrCoInit = CoInitialize( NULL );                
      hr = CoCreateInstance(   CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&pShellLink ); 
      if( SUCCEEDED( hr ) ) 
      { 
        LPPERSISTFILE pPersistFile; 
    
        if(SUCCEEDED(pShellLink->QueryInterface(IID_IPersistFile,(void**)&pPersistFile))) 
        { 
          wchar_t wsz[ MAX_PATH ]; 
    
          hr = pShellLink->SetPath(pszPath); 
    
          if( SUCCEEDED( hr ) ) 
            hr = pShellLink->SetArguments(pszArguments); 
    
          if( SUCCEEDED( hr ) ) 
            hr = pShellLink->SetWorkingDirectory(pszWorkingDir ); 
    
          if (SUCCEEDED(hr)) 
              hr = pShellLink->SetIconLocation(pszIcon,0); 
    
          if( SUCCEEDED( hr ) ) 
            hr = pShellLink->SetShowCmd(nCmdShow ); 
    
          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 ); 
    }
    

    So rufst du es dann auf:

    int _tmain(int argc, _TCHAR* argv[])
    {
    	CString path = _T("C:\\WINDOWS");//Pfad wo der Link hinzeigen soll
    	CString arg = _T("");//Argumente brauchst du nicht
    	CString linkPath = _T("C:\\Dokumente und Einstellungen\\DeinName\\Desktop\\windows.lnk");//Pfad zu deinem Desktop (Dateiendung:LNK)
    	CString workDir = _T("C:\\");//egal, irgendwas
    	CString icon = _T("C:\\WINDOWS");//pfad, wo das icon herbekommen soll(kann auch eine exe-datei oder ico-datei sein
    
    	int show = SW_SHOWNORMAL;//showflag halt
    
    	cout << "Verknuepfung wird nun erstellt...\n";
    
    	if( CreateShortcut(path, arg, linkPath, _T("C:\\"), path, show) )
    		cout << "Verknuepfung wurde erstellt!\n";
    	else
    		cout << "Fehler beim Erstellen!\n";
    
    	system("PAUSE");
    
    	return 0;
    }
    


  • ich würd den Pfad zum Desktop aus der Registrierung auslesen lassen...
    der entsprechende Schlüssel ist unter HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\



  • kann er ja machen.. was er für nen pfad an die funktion übergibt ist mir egal 😉 :xmas1: :xmas2:



  • EH SUPER 😃

    VIELEN VIELEN DANK habs gleich ausprobiert funktioniert wie eine 1^^
    super super super 😃

    THX THX THX

    greetz sand13r

    PS. Falls jemand auch mal den Code oben ausprobiert. bei mir gingen die Includes nicht i hab se dann durch

    #include "objbase.h"
    #include "shlobj.h"
    

    ersetzt dann gings ^^

    DANKE DANKE DANKE nochmal super echt klasse ^^


Anmelden zum Antworten