Verknüpfung erstellen

JayDaKuku

Grünschnabel
Hey,
ich versuche eine Verknüpfung zu erstellen aber das klappt nicht ganz....

Meine Funtkion ist:

Code:
bool CreateShortcut( LPCSTR pszPath, LPCSTR pszArguments, LPCSTR pszLocation, LPCSTR pszWorkingDir, LPCSTR pszIcon) 
{ 
  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(0); 

      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 ); 
}

Aufrufen tu ich das mit:

Code:
LPCTSTR lpszFileName = (arg.c_str());
			LPCTSTR lpszShortcutDesc = ("Anything can go here");
			LPCTSTR lpszShortcutLocation = ("");
			LPCTSTR lpszShortcutPath = ("%Userprofile%\\Appdata\\Roaming\\Microsoft\\Windows\\SendTo\\verknüpfung.lnk");
			LPCTSTR lpszIcon = ("");

			CreateShortcut(lpszFileName, lpszShortcutDesc, lpszShortcutLocation, lpszShortcutPath, lpszIcon);


Als Rückgabe bekomme ich nichtmal einen Fehler... Kann mir bitte jemand helfen? ;).

lg
 
Hi,

kann dir zwar nicht direkt weiterhelfen, aber laufen die Befehle auch alle durch? Schon mit dem Debugger überprüft?

Gruß
BK
 
Hi.

Was heißt "es klappt nicht ganz"?

Welche Fehler treten auf? Prüfe den HRESULT Code von jedem Rückgabewert.

Dokumentation von IPersistFile::SaveCompleted sagt:

This method always returns S_OK.

Damit machst du dir vermutlich den Fehlerwert kaputt den IPersistFile::Save zurückgegeben hat.

Du hast vergessen IPersistFile::Release aufzurufen.

Gruß
 
OK... soweit bin ich noch nicht *gg*... ich lerne gerade C++ & muss nun ein Uploadprogramm schreiben... Damit man Bilder hochladen kann. Ich hab alles bis auf die Verknüpfung in den sendto Ordner damit das per Rechtsklick-menü geht.

lg
 
Zurück