Registry Delete

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Registry Delete

Mesaj gönderen haydarxxx »

Forumda aradı ama..yabancı sitelerede bakatım denemeler yapmamam rağmen Registry silemedim.

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\ekran

ekran dosyasını nasıl sildirebilirim........
En son haydarxxx tarafından 30 Nis 2018 03:08 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Registry Delete

Mesaj gönderen mkysoft »

UAC'dan dolayı silememiş olabilirsiniz. Uygulamanızı yönetici olarak çalıştırırsanız bulduğunuz örneklerle silebilirsiniz.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: Registry Delete

Mesaj gönderen haydarxxx »

Hocam daha cok kod hatası veriyor.uses de registry var ama kodların bölümleri icin yazılan kod yok.kod calıssa uac den diyebiliriz
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: Registry Delete

Mesaj gönderen greenegitim »

haydarxxx yazdı: 30 Nis 2018 03:06 Hocam daha cok kod hatası veriyor.uses de registry var ama kodların bölümleri icin yazılan kod yok.kod calıssa uac den diyebiliriz
kodunuzu paylaşmanız daha faydalı olacaktır.

Kod: Tümünü seç

procedure RegDeleteValue(const ARootKey: Winapi.Windows.HKEY; const APath: string);
var
  SubKey: string;     // registry sub-key extracted from APath
  ValueName: string;  // value name extracted from APath
begin
  with System.Win.Registry.TRegistry.Create do
    try
      RootKey := ARootKey;
      RegParsePath(APath, SubKey, ValueName);
      if OpenKey(SubKey, True) then
        DeleteValue(ValueName);
    finally
      Free;
    end;
end;
Mücadele güzelleştirir!
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Registry Delete

Mesaj gönderen ertank »

haydarxxx yazdı: 29 Nis 2018 08:29 Forumda aradı ama..yabancı sitelerede bakatım denemeler yapmamam rağmen Registry silemedim.

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\ekran

ekran dosyasını nasıl sildirebilirim........
Merhaba,

"HKEY_LOCAL_MACHINE" registry içinde özel bir bölümdür ve normal prosesler sadece okuma yapabilir. Yazma yapabilmek için uygulamanızın @mkysoft 'un da anlatmaya çalıştığı gibi UAC (User Access Control) yani farklı bir ifade ile "Administrator" yetkisi ile çalışıyor olması gerekir.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: Registry Delete

Mesaj gönderen haydarxxx »

Tmm Kullanıcı ya adnin girisi yap deriz.Sonra programı calıştır deriz hocam.Burada yapmak istediğim acılışta calışan uygulamamı kaldırması.Burada programla yapmaya çalışıyorum yazdırmada bir sorun yok silme kodu bulamadım

Greenegitimin verdiği procedure nasıl kullanılacak
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: Registry Delete

Mesaj gönderen haydarxxx »

nette denediğim kode

Create:

Kod: Tümünü seç

var
reg1,tregistry,key:string;
begin
key:='SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace\ {0052D9FC-6764-4D29-A66F-2F3BD9E2BB40}';
reg1:=tregistry.Create;
reg1.RootKey:=HKEY_LOCAL_MACHINE;
reg1.Access: = KEY_WOW64_64KEY + KEY_ALL_ACCESS;
if reg1.Openkey(key,true)=true then showmessage('ok');
reg1.Closekey;
reg1.free;
Delete:

Kod: Tümünü seç

var
reg1,tregistry, key:string;
    begin
    reg1: = tregistry.Create;
    reg1.RootKey: = HKEY_LOCAL_MACHINE;
    reg1.Access: = KEY_WOW64_64KEY + KEY_ALL_ACCESS;
    key: ='SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace\{0052D9FC-6764-4D29-A66F-2F3BD9E2BB40}';
    if reg1.KeyExists (Key)=true then Showmesage ('Key exists'); // work
    if reg1.DeleteKey (Key)=true then Showmesage ('Ok'); // ! not work !
    Showmesage (inttostr(getlasterror)); // show "0"
    reg1.Free;
    end;
[dcc32 Error] Unit2.pas(33): E2250 There is no overloaded version of 'Create' that can be called with these arguments
[dcc32 Error] Unit2.pas(34): E2003 Undeclared identifier: 'RootKey'
[dcc32 Error] Unit2.pas(35): E2003 Undeclared identifier: 'Access'
[dcc32 Error] Unit2.pas(36): E2003 Undeclared identifier: 'Openkey'

hatası veriyor
kocaV
Üye
Mesajlar: 15
Kayıt: 21 Tem 2017 01:10

Re: Registry Delete

Mesaj gönderen kocaV »

değişkenleri yanlış tanımlamışsınız.
reg1:tregistry;
key:string;
bu şekilde deneyin.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: Registry Delete

Mesaj gönderen haydarxxx »

düzenledim kocaV.tşk ama istediğim sonuç olmadı yinede.başka bir kod ile aşağıda

Kod: Tümünü seç

var
AppExe :string;
Registry : TRegistry;
begin
   Registry := TRegistry.Create;
   try
    with Registry do
    begin
     RootKey := HKEY_CURRENT_USER;
     if OpenKey ('SOFTWARE\Microsoft\Windows\CurrentVersion\Run', true) then
     begin
      AppExe:=#34+Application.Exename+#34;
      WriteString('ekran','C:\Data\bilgisayar.exe');
     end;
    end;
   finally
    Registry.Free;
   end;
yazdırabiliyorum.
bunun silme kodu nasıl olur
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Registry Delete

Mesaj gönderen ertank »

Merhaba,

Registry ile uğraşmadan Windows'un özel dizinleri içine kısayol oluşturarak bir çözüm kullanabilirsiniz. Kaldırmak istediğiniz zaman ilgili kısayol dosyasını silmeniz yeterli olacaktır.

Kısayol oluşturmak için kullanılabilecek kod:

Kod: Tümünü seç

uses
  System.IOUtils,
  ShlObj,
  ComObj,
  ActiveX;

const
  CSIDL_DESKTOP                 = $0000; { <desktop> }
  CSIDL_INTERNET                = $0001; { Internet Explorer (icon on desktop) }
  CSIDL_PROGRAMS                = $0002; { Start Menu\Programs }
  CSIDL_CONTROLS                = $0003; { My Computer\Control Panel }
  CSIDL_PRINTERS                = $0004; { My Computer\Printers }
  CSIDL_PERSONAL                = $0005; { My Documents.  This is equivalent to CSIDL_MYDOCUMENTS in XP and above }
  CSIDL_FAVORITES               = $0006; { <user name>\Favorites }
  CSIDL_STARTUP                 = $0007; { Start Menu\Programs\Startup }
  CSIDL_RECENT                  = $0008; { <user name>\Recent }
  CSIDL_SENDTO                  = $0009; { <user name>\SendTo }
  CSIDL_BITBUCKET               = $000a; { <desktop>\Recycle Bin }
  CSIDL_STARTMENU               = $000b; { <user name>\Start Menu }
  CSIDL_MYDOCUMENTS             = $000c; { logical "My Documents" desktop icon }
  CSIDL_MYMUSIC                 = $000d; { "My Music" folder }
  CSIDL_MYVIDEO                 = $000e; { "My Video" folder }
  CSIDL_DESKTOPDIRECTORY        = $0010; { <user name>\Desktop }
  CSIDL_DRIVES                  = $0011; { My Computer }
  CSIDL_NETWORK                 = $0012; { Network Neighborhood (My Network Places) }
  CSIDL_NETHOOD                 = $0013; { <user name>\nethood }
  CSIDL_FONTS                   = $0014; { windows\fonts }
  CSIDL_TEMPLATES               = $0015; { <user name>\appdata\roaming\template folder }
  CSIDL_COMMON_STARTMENU        = $0016; { All Users\Start Menu }
  CSIDL_COMMON_PROGRAMS         = $0017; { All Users\Start Menu\Programs }
  CSIDL_COMMON_STARTUP          = $0018; { All Users\Startup }
  CSIDL_COMMON_DESKTOPDIRECTORY = $0019; { All Users\Desktop }
  CSIDL_APPDATA                 = $001a; { <user name>\Application Data }
  CSIDL_PRINTHOOD               = $001b; { <user name>\PrintHood }
  CSIDL_LOCAL_APPDATA           = $001c; { <user name>\Local Settings\Application Data (non roaming) }
  CSIDL_ALTSTARTUP              = $001d; { non localized startup }
  CSIDL_COMMON_ALTSTARTUP       = $001e; { non localized common startup }
  CSIDL_COMMON_FAVORITES        = $001f; { User favourites }
  CSIDL_INTERNET_CACHE          = $0020; { temporary inter files }
  CSIDL_COOKIES                 = $0021; { <user name>\Local Settings\Application Data\..\cookies }
  CSIDL_HISTORY                 = $0022; { <user name>\Local Settings\Application Data\..\history}
  CSIDL_COMMON_APPDATA          = $0023; { All Users\Application Data }
  CSIDL_WINDOWS                 = $0024; { GetWindowsDirectory() }
  CSIDL_SYSTEM                  = $0025; { GetSystemDirectory() }
  CSIDL_PROGRAM_FILES           = $0026; { C:\Program Files }
  CSIDL_MYPICTURES              = $0027; { C:\Program Files\My Pictures }
  CSIDL_PROFILE                 = $0028; { USERPROFILE }
  CSIDL_SYSTEMX86               = $0029; { x86 system directory on RISC }
  CSIDL_PROGRAM_FILESX86        = $002a; { x86 C:\Program Files on RISC }
  CSIDL_PROGRAM_FILES_COMMON    = $002b; { C:\Program Files\Common }
  CSIDL_PROGRAM_FILES_COMMONX86 = $002c; { x86 C:\Program Files\Common on RISC }
  CSIDL_COMMON_TEMPLATES        = $002d; { All Users\Templates }
  CSIDL_COMMON_DOCUMENTS        = $002e; { All Users\Documents }
  CSIDL_COMMON_ADMINTOOLS       = $002f; { All Users\Start Menu\Programs\Administrative Tools }
  CSIDL_ADMINTOOLS              = $0030; { <user name>\Start Menu\Programs\Administrative Tools }
  CSIDL_CONNECTIONS             = $0031; { Network and Dial-up Connections }
  CSIDL_COMMON_MUSIC            = $0035; { All Users\My Music }
  CSIDL_COMMON_PICTURES         = $0036; { All Users\My Pictures }
  CSIDL_COMMON_VIDEO            = $0037; { All Users\My Video }
  CSIDL_RESOURCES               = $0038; { Resource Directory }
  CSIDL_RESOURCES_LOCALIZED     = $0039; { Localized Resource Directory }
  CSIDL_CDBURN_AREA             = $003b; { USERPROFILE\Local Settings\Application Data\Microsoft\CD Burning }


function GetSpecialFolderPath(CSIDLFolder: Integer): string;
var
   FilePath: array [0..MAX_PATH] of char;
begin
  SHGetFolderPath(0, CSIDLFolder, 0, 0, FilePath);
  Result := FilePath;
end;


function CreateDesktopShellLink(const CSID: Cardinal; const TargetName: string): Boolean;
var
  IObject: IUnknown;
  ISLink: IShellLink;
  IPFile: IPersistFile;
  PIDL: PItemIDList;
  LinkName: string;
  InFolder: array [0..MAX_PATH-1] of Char;
begin
  Result := False;

  IObject := CreateComObject(CLSID_ShellLink);
  ISLink := IObject as IShellLink;
  IPFile := IObject as IPersistFile;

  with ISLink do
  begin
    SetDescription('Açıklama ...');
    SetPath(PChar(TargetName));
    SetWorkingDirectory(PChar(ExtractFilePath(TargetName)));
  end;

  SHGetSpecialFolderLocation(0, CSID, PIDL);
  SHGetPathFromIDList(PIDL, InFolder) ;

  LinkName := IncludeTrailingPathDelimiter(GetSpecialFolderPath(CSID));
  LinkName := LinkName + TPath.GetFileNameWithoutExtension(TargetName) + '.lnk';

  if not FileExists(LinkName) then
    if IPFile.Save(PWideChar(LinkName), False) = S_OK then
      Result := True;
end;
Kullanıcıya özel başlangıç dizinine kısayol oluşturmak için kullanımı:

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  if CreateDesktopShellLink(CSIDL_ALTSTARTUP, 'C:\Folder\ExeFile.exe') then
    ShowMessage('Kısayol dosyası oluşturuldu ...');
end;
Daha sonra kısayol dosyasını silmek için aşağıdaki gibi bir kod kullanabilirsiniz:

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
var
  FileName: string;
begin
  FileName := GetSpecialFolderPath(CSIDL_ALTSTARTUP);
  FileName := TPath.Combine(FileName, 'ExeFile.lnk');

  if TFile.Exists(FileName) then
  begin
    try
      TFile.Delete(FileName);
    except
      on E: Exception do
      begin
        ShowMessage('Kısayol dosyası silinemedi.' + sLineBreak + AnsiQuotedStr(E.Message, '"'));
      end;
    end;
  end;
end;
Bilgisayara özel başlangıç dizinine kısayol oluşturmak için sadece ilk parametreyi değiştirmeniz yeterli (bu kodun çalışması için uygulamanızın Administrator yetkisi ile çalışıyor olması gerekli):

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  if CreateDesktopShellLink(CSIDL_COMMON_ALTSTARTUP, 'C:\Folder\ExeFile.exe') then
    ShowMessage('Link has been created ...');
end;
Örnek kodların WindowsXP ile çalışıyor olması gerekli. Ancak test etmedim.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: Registry Delete

Mesaj gönderen haydarxxx »

:bravo: win 10 da deniyorum oldu.Çok teşekkürler ertank bu yöntem daha güzel
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: Registry Delete

Mesaj gönderen haydarxxx »

ertank görev yöneticisinden başlangıç etkisini en yükse olarak nasıl belirleyebiliriz.Program window masa üstü ile aynı anda gelmiyor.Yani devreye çok geç giriyor haliyle program açılana kadar istenilen yere tıklanıp açılabiliniyor windows daBen win masa üstüne bir perde çekmeye çalışıyorum..Projem de ekranı kaplayan bir formum var.formdaki gerekli işlem yapıldığında form try e yerleşecek.Tray tmm ama program çok geç devreye giriyor win10 kullanıyorum
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: Registry Delete

Mesaj gönderen haydarxxx »

Kod: Tümünü seç

var
  FileName: string;
begin
  FileName := GetSpecialFolderPath(CSIDL_ALTSTARTUP);
  FileName := TPath.Combine(FileName, 'ExeFile.lnk');

  if TFile.Exists(FileName) then
  begin
    try
      TFile.Delete(FileName);
    except
      on E: Exception do
      begin
        ShowMessage('Kısayol dosyası silinemedi.' + sLineBreak + AnsiQuotedStr(E.Message, '"'));
      end;
    end;
  end;
end;
hocam bu kod laptopda win10 mak da çalışıyor.Akkılı tahtada win8.1 var lnk silme işini yapmıyor açılışta devreye giriyor exe
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Registry Delete

Mesaj gönderen ertank »

Aldığınız hata mesajı nedir?
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: Registry Delete

Mesaj gönderen haydarxxx »

ertank hocam yarın bakıp yazacağım
Cevapla