Delphi Programlama Dilinde Registry İşlemleri (Program Kısa Yollarının Oluşturulması)

Tekrar Merhaba,  

Programciyim.com ekibi olarak sizlere en iyi bilgiyi en anlaşılır biçimde sunmak ilk hedefimiz.

Delphi Programlama Dili ile Registry (Windows Kayıt Defteri) İşlemlerine devam ediyoruz. Bu makalemi yazmaya başlamadan önce hangi konu üzerinde yazsam acaba diye biraz araştırma yaptım. Programciyim.com ekibi olarak sizlere en iyi bilgiyi en anlaşılır biçimde sunmak ilk hedefimiz. Diğer bir hedefimizde makalelerimizi okurken sıkılmadan makalenin sonuna kadar okumanızı sağlamak. Biraz öncede bahsettiğim gibi hangi konudan bahsetsem diye biraz araştırma yaptım.

Win32 uygulamalarınızın kullanımının kolay olması her zaman ilk hedefiniz olmalı

Win32 (Windows Masa Üstü) uygulamlarınızı geliştirdikten sonra ikinci aşama uygulamanızın müşteride kullanılması gelmektedir. Eğe hedefiniz programınızın çok kolay bir kullanıma sahip olması ise yapmanız gereken ilk konulardan birisi de kurulum işlemlerinden sonra veya çok kullanıcılı ortamlarda client bir bilgisayardan program çalıştırıldığında programa ait kısa yolların istendiğinde masa üstüne, görev çubuğuna veya başlat menüsüne kolay bir şekilde tanımlanabilmesidir. Bu işlemi programınızda yapabiliyor olmanız kullanıcılarınızın hoşuna gidecektir.

Registry (Windows Kayıt Defteri)'ye hakim olan programcı daima güzel uygulamalar geliştirecektir.

Bu aşamada Registry (Windows Kayıt Defteri) den başlat menüsünü tıkladığımız zaman karşımıza gelen programların yer aldığı klasörün yerini öğrenmek, masa üstü klasörünün yerini ve quick launch klasörünün yerini öğrenmek amacı ile faydalanıyoruz.

Aşağıdaki kaynak kod örneğinde iki konuyu birden göreceksiniz. Birincisi Delphi Programlama Dili'nde Registry ile çalışma ve geliştirmiş olduğunuz uygulamanızın kıs yollarının oluşturulması.

 

unit frmKisayolOlustur1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Registry, ActiveX, ComObj, ShlObj, StdCtrls, Buttons, ExtCtrls;

type
  TfrmKisayolOlustur = class(TForm)
    Panel1: TPanel;
    GroupBox1: TGroupBox;
    cbDesktopOlustur: TCheckBox;
    cbQuickLaunchOlustur: TCheckBox;
    cbProgramlarMenusuKisayolOlustur: TCheckBox;
    btnOlustur: TBitBtn;
    btnVazgec: TBitBtn;
    procedure btnVazgecClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure btnOlusturClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmKisayolOlustur: TfrmKisayolOlustur;
type
  ShortcutType = (_DESKTOP, _QUICKLAUNCH, _SENDTO, _STARTMENU, _OTHERFOLDER);

implementation

{$R *.dfm}

function KisayolOlustur(KaynakDosyaAdi: string; Lokasyon: ShortcutType; AltKlasor, CalismaYeri, Parametre, Aciklama: string): string;
const
SHELL_FOLDERS_ROOT = 'Software\MicroSoft\Windows\CurrentVersion\Explorer';
QUICK_LAUNCH_ROOT = 'Software\MicroSoft\Windows\CurrentVersion\GrpConv';
var
KYObject    :IUnknown;
KYSLink     :IShellLink;
KYPFile     :IPersistFile;
Klasor,LinkAdi: string;
WDosyaAdi   :WideString;
Reg         :TRegIniFile;
begin
KYObject := CreateComObject(CLSID_ShellLink);
KYSLink := KYObject as IShellLink;
KYPFile := KYObject as IPersistFile;

KYSLink.SetPath(PChar(KaynakDosyaAdi));
KYSLink.SetArguments(PChar(Parametre));
KYSLink.SetDescription(PChar(Aciklama));

LinkAdi := ChangeFileExt(KaynakDosyaAdi, '.lnk');
LinkAdi := ExtractFileName(LinkAdi);

  // Hızlı Başlat
if Lokasyon = _QUICKLAUNCH then begin
    Reg := TRegIniFile.Create(QUICK_LAUNCH_ROOT);
    try
        Klasor := Reg.ReadString('MapGroups', 'Quick Launch', '');
    finally
        Reg.Free;
    end;
end
// Diğer lokasyonlar
else begin
    Reg := TRegIniFile.Create(SHELL_FOLDERS_ROOT);
    try
        case Lokasyon of
            _OTHERFOLDER : Klasor := AltKlasor;
            _DESKTOP     : Klasor := Reg.ReadString('Shell Folders', 'Desktop', '');
            _STARTMENU   : Klasor := Reg.ReadString('Shell Folders', 'Start Menu', '');
            _SENDTO      : Klasor := Reg.ReadString('Shell Folders', 'SendTo', '');
        end;
    finally
        Reg.Free;
    end;
end;

if Klasor <> '' then  begin
    if(AltKlasor <> '') and (Lokasyon <> _OTHERFOLDER) then
        WDosyaAdi := Klasor + '\' + AltKlasor + '\' + LinkAdi
    else
        WDosyaAdi := Klasor + '\' + LinkAdi;
    if CalismaYeri = '' then
        KYSLink.SetWorkingDirectory(PChar(ExtractFilePath(KaynakDosyaAdi)))
    else
        KYSLink.SetWorkingDirectory(PChar(CalismaYeri));
    KYPFile.Save(PWChar(WDosyaAdi), False);
    Result := WDosyaAdi;
    end;
end;

function ProgramYolu: string;
var
reg: TRegistry;
begin
reg := TRegistry.Create;
try
    reg.RootKey := HKEY_CURRENT_USER;
    reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\
Shell Folders', False);
    Result := reg.ReadString('Programs');
    reg.CloseKey;
finally
    reg.Free;
end;
end;

procedure TfrmKisayolOlustur.btnVazgecClick(Sender: TObject);
begin
Close;
end;

procedure TfrmKisayolOlustur.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
Action := caFree;
end;

procedure TfrmKisayolOlustur.btnOlusturClick(Sender: TObject);
const PROGR = 'C:\Programim.exe';
var
PPath   :String;
begin
if(cbDesktopOlustur.Checked)then KisayolOlustur(PROGR, _DESKTOP, '','','','Description');
if(cbQuickLaunchOlustur.Checked)then KisayolOlustur(PROGR, _QUICKLAUNCH, '','','','Description');
if(cbProgramlarMenusuKisayolOlustur.Checked)then PPath := KisayolOlustur(PROGR, _OTHERFOLDER, ProgramYolu,'','','Açıklama');
if((cbProgramlarMenusuKisayolOlustur.Checked) and (PPath <> '')) then begin
    ShowMessage('Kısayol ' + PPath + ' klasörüne oluşturuldu');
end;
end;

end.

 

Program Kısa Yolu Oluşturma

Kısa Yol Oluşturma