Newsgroup: it.comp.lang.delphi
Titolo: Esecuzione di un file link

Come posso eseguire il file puntato dal link presente sul desktop?
Ho provato con la "WINEXEC", con il componente "EXECFILE" e con
"ABCLAUNCHER" ma niente da fare non riesco ad eseguire un "lnk".
Dovrei trovare il file puntato, ma come faccio a vedere a cosa punta?
Grazie ciao.

Ciao Filippo,
non è necessario che tu cerchi il file puntato, semplicemente utilizza la
ShellExecute
che è molto meglio della WinExec. Per utilizzare ShellExecute devi includere
la
ShellApi nella Uses altrimenti non verrà riconosciuto come comando.
Ecco un esempio :
ShellExecute( Handle, nil, 'c:\project1.lnk', nil, nil, SW_SHOWNORMAL );
Ciao Ciao!!
--
- Carlo -
BSSoftware Tips Mailing-List Support

Ciao Filippo,
Filippo Boatto ha scritto:

con un' interfaccia della shell !!!!
Ci ho perso qualche minuto e ti ho preparato due righe di codice.
Mi sono sorpreso che il codice che ho scritto ha funzionato al primo colpo.
In genere quando ci sono di mezzo le interfacce o argomenti simili c' è
sempre qualcosa che non va oppure non riesci a farla andare come vorresti !!
:-(((
Forse è la mia giornata fortunata !! eheh
Allora.....per trattare i file LNK, mi sono servito dell' interfaccia
"IShellLink" e pure della "IPersistFile".
Questo è il codice che ho scritto:
uses
  ActiveX, ShlObj, ComObj;
.....
.....
.....
procedure TForm1.Button1Click(Sender: TObject);
var  Obj                       :IUnknown;
       PersistFile          :IPersistFile;
       ShellLink             :IShellLink;
       Win32FindData :TWin32FindDataA;
       Path                     :PChar;
       Size                     :Integer;
       LNKFile              :WideString;
begin
  Size:=300;
  GetMem(Path,Size);
  Obj:=CreateComObject(CLSID_ShellLink);
  ShellLink:=Obj as IShellLink;
  PersistFile:=Obj as IPersistFile;
  LNKFile:='C:\Windows\Desktop\Winamp.lnk';
  PersistFile.Load(PWChar(LNKFile),1);
  ShellLink.GetPath(Path, Size, Win32FindData, SLGP_UNCPRIORITY);
  ShowMessage(StrPas(Path));
  FreeMem(Path);
end;
in questo codice sono coinvolte due interfacce. La prima è la IShellLink, l'
altra la IPersistFile.
Il nome del collegamento che ho scelto, è quello di Winamp.
Per sbrigarmi, ho assegnato direttamente il percorso del file LNK alla
variabile LNKFile.
Però sarebbe meglio utilizzare l' api che ti restituisce il nome della
directory dove sta Windows, e poi gli aggiungi Desktop come costante, oppure
bisogna controllare che non ci sia già un'api che restituisce il path
completo di questa cartella, visto che per alcune directory di windows è
possibile.
Comunque quanto ho scritto funziona ugualmente.
Ora tramite il metodo Load della IPersistFile, ho fatto riferimento al file
LNK specificato nella variabile LNKFile.
Il secondo parametro non ho controllato a cosa serve, così (sempre per
sbrigarmi) l' ho tirato a caso mettendoci 1 visto che è di tipo Integer.
Poi tramite il Win32SDK mi sono andato a cercare il nome di un metodo di
questa interfaccia maledetta (IShellLink) che facesse al caso mio. Ho
trovato il metodo GetPath che è semplicissimo da usare !!
Infine il path cercato, viene visualizzato tramite la procedura
"ShowMessage".
Con questo codice, dovresti risolvere il problema in pieno !!!
Poi, tra tutte le API che hai provato, ti sei dimenticato la più popolare
che è la "ShellExecute".
In ogni caso hai il codice che ho preparato, quindi vedi tu cosa fare !!!
Ti saluto .... buon lavoro !!
Antonio Tarolla
BSSoftware Tips Mailing - List Support

 che è la "ShellExecute".
Tra l'altro direi che al posto della "vecchia" ShellExecute sarebbe +
consono sfruttare la ShellExecuteEx che, a parità di comodità di utilizzo,
ti permette di fare molte + cose carine...
Ciao :-)
--
(¯`·.¸¸.·´¯`·.¸¸.-> Andrea <-.¸¸.·´¯`·.¸¸.·´¯)
AntiSpam: rimuovere il trattino basso dall'indirizzo per rispondere
AntiSpam: remove the underscore from the e-mail address to reply

ti permette di fare molte + cose carine...
la stavo vedendo giorni fa. Ricca la struttura che vuole come parametro !!
:-)))
Ci sentiamo Andrea......ciaooo !!!
