Newsgroup: it.comp.lang.delphi
Titolo: CreateLink non va!

Ciao a tutti,
Scusate se ripeto il post, ma non so più dove attaccarmi, sono giorni che
sto impazzando su questo problema:
Uso la seguente funzione per creare un link sul desktop alla mia
applicazione (uso XP), dopo che si è verificato un determinato evento. Cosa
succede: viene creato il link, tutto bene,tutto funziona, ma poi quando
eseguo un logoff e login da My computer non riesco più ad aprire c:\ (d:\ ed
e:\ non hanno problemi )
Viene  creata questa chiave :
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPo
ints2\{f291b704-e6a5-11d6-90a0-806d6172696f}
Se la elimino tutto funziona!!!
Qualcuno ha qualche idea? O sa suggerirmi un link con qualcosa di
funzionante.
bug???
Grazie a tutti
function CreateLink(pathObj,pathLink, desc,icon: string) : boolean;
var
    psl: IShellLink;
begin
    psl:=CreateComObject(CLSID_ShellLink) as IShellLink;
    psl.SetPath(pchar(pathObj));
    psl.SetDescription(pchar(desc));
    psl.SetIconLocation(pchar(icon),0);
    result:=(psl as
IPersistFile).Save(PWideChar(wideString(pathLink)),true)=S_OK;
end;

>>>> The caller must call the IPersistFile::SaveCompleted method to
indicate completion. <<<<<<<<
Magari non ha niente a che fare con il tuo problema, ma ti consiglio di dare
un occhio nella guida sdk alla IPersistentFile.
Bye
A
--
Per rispondere non usare il reply ma scrivere al seguente indirizzo:
alsalvati(at)
supereva.it

 Bye
Grazie, per la dritta, ho provato a controllare e ad usare SaveCompleted, ma
nulla...al riavvio quando viene ricaricato il registro BOMBA,cioč non riesco
piů ad aprire c:\ da mycomputer.
Qualcuno ha qualche link da postarmi, su come si crea uno shortcut in "altri
modi"...o altre idee sono piů che ben accette...
Sono alle corde, troppo tempo buttato!!!
Grazie a tutti in anticipo

 Sono alle corde, troppo tempo buttato!!!
Forse ci sono problemi con i parametri che passi alla funzione
(directory o file non esistenti?) o forse con il typecasting.
Prova cosi`:
I parametri da passare alla funzione sono i seguenti
LinkPath: Path e nome del collegamento
  (esempio: c:\windows\desktop\MioCollegamento.lnk)
ObjectPath:  Path e nome del file sul quale si crea il collegamento
 (esempio: c:\programmi\MiaDirectory\MiaApplicazione.exe)
Uses Shlobj, Activex, ComObj;
Function CreaLink(const LinkPath, ObjectPath, Descrizione: String) :
integer;
var
   WLinkPath     : array [0..MAX_PATH] of WideChar;
   SHLinkObj      : IShellLink;     //ShlObj
   PersistFileObj : IPersistFile;   // ActiveX
begin
   { Ottiene un puntatore alla interfaccia IshellLink }
        SHLinkOBj := CreateComObject(CLSID_ShellLink) as IShellLink;
   { Ottiene un puntatore all'interfaccia IPersistFile }
        PersistFileObj := SHLinkObj as IPersistFile;
   { Imposta il path all'interno del link }
        SHLinkOBj.SetPath(pchar(ObjectPath));
   { Imposta la Descizione - valida solo per i file MSDOS }
        SHLinkOBj.SetDescription(pchar(Descrizione));
        StringToWideChar(LinkPath, WLinkPath, MAX_PATH);
   {Salva il Link }
        Result := PersistFileObj.Save(WLinkPath,TRUE);
end;
Ciao.
--
ACSH
[D4]
---------------------------
Chi fa da se'
fatica il doppio