uses
Windows, Dialogs, ..., ShlObj, ActiveX, StdCtrls, Registry, ComObj;
Este sería el procedimiento:
procedure CrearAccesoDirecto( sExe, sArgumentos, sDirTrabajo, sNombreLnk, sDirDestino: string );
var
Objeto: IUnknown;
UnSlink: IShellLink;
FicheroP: IPersistFile;
WFichero: WideString;
begin
Objeto := CreateComObject( CLSID_ShellLink );
UnSlink := Objeto as IShellLink;
FicheroP := Objeto as IPersistFile;
with UnSlink do
begin
SetArguments( PChar( sArgumentos ) );
SetPath( PChar( sExe ) );
SetWorkingDirectory( PChar( sDirTrabajo ) );
end;
WFichero := sDirDestino + '\' + sNombreLnk;
FicheroP.Save( PWChar( WFichero ), False );
end;
Y estos son sus parámetros:
sExe -> Ruta que apunta al ejecutable o archivo a crear el acceso directo
sArgumentos -> Parámetros que le mandamos al EXE
sDirTrabajo -> Ruta al directorio de trabajo del ejecutable
sNombreLnk -> Nombre del acceso directo
sDirDestino -> Ruta destino donde se creará el acceso directo
Aquí os muestro un ejemplo de cómo crear un acceso directo de la calculadora de Windows al escritorio:
procedure CrearAccesoCalculadora;
var
sEscritorio: String;
Registro: TRegistry;
begin
Registro := TRegistry.Create;
// Leemos la ruta del escritorio
try
Registro.RootKey := HKEY_CURRENT_USER;
if Registro.OpenKey( '\Software\Microsoft\Windows\CurrentVersion\explorer\Shell Folders', True ) then
sEscritorio := Registro.ReadString( 'Desktop' );
finally
Registro.CloseKey;
Registro.Free;
inherited;
end;
CrearAccesoDirecto( 'C:\Windows\System32\calc.exe', '',
'C:\Windows\System32\', 'Calculadora.lnk', sEscritorio );
end;
Pruebas realizadas en Delphi 7.
2 comentarios:
Hola,
Con la nueva versión del S.O. Windows 7 no funciona la creación de los accesos directos.
O al menos a mi me ha dejado de funcionar.
Acabo de comprobar el valor de la variable sEscritorio que guarda el path del escritorio en el registro...
Debería ser en mi caso: c:\Users\Public\Desktop
y devuelve en su lugar...
C:\Windows\system32\config\systemprofile\Desktop
Buscando en c: ciertamente existe esta carpeta y allí estánn los accesos creados, pero luego estos accesos no aparecen en el escritorio.
Y finalmente, si a la variable: sEscritorio se le da el valor del path (c:\Users\Public\Desktop) entonces sí que funciona el acceso.
¿Se te ocurre una solución?
Un saludo
Julián
Hola como puedo saber si el acceso directo ya esta creado y no volver a crearlo
Publicar un comentario