Skróty programów

Adam Boduch

Umiejętność umieszczania skrótów bądĽ to na
pulpicie, czy w menu start jest rzadko używana, ale czasem się
przydaje więc rozwiązanie tego problemu tutaj prezentuje.

Przede wszystkim do listy uses należy dodać takie moduły:

uses Registry, ActiveX, SHlObj, ComObj;

Teraz musisz zadeklarować nowe typy:

type
  TInk = (onDesktop, onMenuStart, onSendTo, onPrograms, onStartUp);
  ELackOfFile = class(Exception); // if file doesn't exist

Pierwszy typ "mówi" gdzie skrót ma być
umieszczony, czy: na pulpicie, w menu start, w "wyślij do", w
menu Programy menu start, w autostarcie.

Oto procedura umieszczająca skrót w wybranym miejscu.
Pierwszym parametrem jest nazwa pliku, a drugi to miejsce gdzie skrót
ma być umieszczony:

procedure SetShortening(FName: PChar; Where: TInk);
var
  IObject   : IUnknown;
  ISLink    : IShellLink;
  IPFile    : IPersistFile;
  FileName  : String;
  Directory : String;
  WFileName : WideString;
  Reg       : TRegistry;
begin
  IObject := CreateComObject(CLSID_ShellLink); // stworz objekt COM
  ISLink := IObject as IShellLink;
  IPFile := IObject as IPersistFile;
  FileName:= FName;

  if not FileExists(FName) then
    raise ELackOfFile.Create(
    'File "' + FName + '" does not found. Check It');

   with ISLink do
   begin
     SetPath(PChar(FileName));
     SetWorkingDirectory(PChar(ExtractFilePath(FileName)));
   end;

   Reg := TRegistry.Create;
   Reg.OpenKey(
   'Software\MicroSoft\Windows\CurrentVersion\Explorer\Shell Folders', False);
 {
   W zaleznosci od wybranej opcji do zmiennej Directory przypisywana
   jest odpowiednia sciezka folderu
 }
    case Where of
      onDesktop : Directory := Reg.ReadString('Desktop');
      onSendTo : Directory := Reg.ReadString('SendTo');
      onMenuStart : Directory := Reg.ReadString('Start Menu');
      onPrograms : Directory := Reg.ReadString('Programs');
      onStartUp : Directory := Reg.ReadString('Startup');
    end;

  CreateDir(Directory);

  WFileName := Directory + '' + ExtractFileName(ChangeFileExt(FileName, '.lnk'));
  IPFile.Save(PWChar(WFileName), False); // zapisz lacznik
  Reg.Free;
end;

To może być trochę skomplikowane - fakt.

Teraz, aby wykorzystać powyższą procedurę musisz
napisać:

  SetShortening('C:\polecamy.gif', onPrograms);

W tym wypadku skrót zostanie umieszczony w menu
Programy Menu Start.

1 komentarz

Przydatne, tylko nie wiem do czego ten typ TLnk...można się obyć bez niego z samą lokalizacją skrótu. Spróbuję.
Pozdro.