R
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.