Creación de un acceso directo

Para crear un acceso directo es necesario crear un objeto COM de la Shell de Windows, obteniendo un puntero a la interfaz IShellLink. Esta interfaz cuenta con una serie de métodos que permiten establecer el destino del acceso directo, los parámetros, el icono, etc. Fijados esos parámetros se obtiene un puntero a la interfaz IPersistFile del mismo objeto, mediante el método QueryInterface, salvando el acceso directo con el método Save. El siguiente fragmento de código efectuaría todo el proceso.

Function CreaEnlace: Boolean;

Var

     IShellLinkInterface: IShellLink; // Para acceder a la interfaz IShellLink
     IPersistFileInterface: IPersistFile; // Para acceder a la interfaz IPersistFile
     ResultCode: HResult; // Para obtener los códigos de retorno
     WidePath: Array[0..1024] Of WideChar; // Para componer el camino como cadena UNICODE

Begin

     // Obtenemos la interfaz IShellLink
     IShellLinkInterface := IShellLink(CreateCOMObject(CLSID_ShellLink));
     With IShellLinkInterface Do // Establecemos los parámetros del acceso directo
     Begin

          SetPath('C:\Config.sys'); // Establecemos el camino
          SetDescription('Archivo de configuración'); // la descripción

     End;

     // Convertimos el destino en cadena UNICODE
     StringToWideChar('Mi enlace a Config.sys.lnk', WidePath, 1024);
     // Obtenemos la interfaz IPersistFile
     ResultCode := IShellLinkInterface.QueryInterface(IPersistFile, IPersistFileInterface);

     If ResultCode <> S_OK Then // Si no fue posible
     Begin

          Result := False; // no continuamos
          Exit;

     End;

     // Salvamos el acceso directo en el archivo
     ResultCode := IPersistFileInterface.Save(WidePath, True);

End;

Para que este código funcione correctamente hay que incluir en el programa los módulos ShlObj, ActiveX y ComObj. Yo lo
he probado con Delphi 3.0 y el resultado es el esperado, se crea un acceso directo al archivo CONFIG.SYS, salvándose en el
archivo LNK ‘Mi enlace a Config.sys’, que se almacena en la carpeta desde la cual se ejecute el programa.