Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Registryden exe yolunu alma
#1
Merhabalar,


PC'de yüklü olan tüm browserların exe yolunu alıyorum. Mozilla firefox garip bir isimde Registry yükleme yapmış.

Farklı PC'lerde bu sorunu yaşamamak adına nasıl bir yol izleye bilirim?



GWHoUP.png


procedure TForm1.Button4Click(Sender: TObject);
var
  Reg: TRegistry;
  Result: AnsiString;
begin
  Result := '';
  Reg := TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKeyReadOnly('SOFTWARE\Clients\StartMenuInternet\Mozilla Firefox\DefaultIcon') then
    begin
      Result := Reg.ReadString('');
      if Length(Result) > 0 then
      begin
        ShowMessage(Result);
      end
      else
      begin
        ShowMessage('yok');
      end;
    end;
  finally
    Reg.CloseKey;
    Reg.Free;
  end;
end;
Cevapla
#2
Merhaba.
Klasör isimlerini sadece bir anahtar olarak değerlendirmelisiniz.
Daha önce paylaştığımız kodda da aynı şekilde bu isim sadece klasör referansı olarak değerlendirilmişti hatırlarsınız.

FriendlyName olarak tabi edilen menüde görünen isimleri bu klasör altındaki ilk değerdir. Her bir klasör altında önce düzgün adını, ardından da shell\open\command klasörü altındaki dosya yolunu alabilirsiniz.


bprkelsp6723cjm3rnw5.gif
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#3
Merhaba,
Konularınızı alakalı kategoriler altında açar iseniz mutlu oluruz.
Sadece Windows/PC üzerine olan konularınızı FMX kategorisi yerine genel programlama kategorisinde açınız.
2 defa yanlış yerde konu açtığınızı bildirmek ve bundan sonraki dikkatsizliğinizin cezayla son bulacağını söylemek isterim.

Konu taşınmıştır.
Cevapla
#4
(15-12-2020, Saat: 16:28)Mr.Developer Adlı Kullanıcıdan Alıntı: Merhaba,
Konularınızı alakalı kategoriler altında açar iseniz mutlu oluruz.
Sadece Windows/PC üzerine olan konularınızı FMX kategorisi yerine genel programlama kategorisinde açınız.
2 defa yanlış yerde konu açtığınızı bildirmek ve bundan sonraki dikkatsizliğinizin cezayla son bulacağını söylemek isterim.

Konu taşınmıştır.

Kusura bakmayın lütfen.

Projeyi FMX ile geliştirince konuyu da Mobil Platform - FireMonkey (FMX) açtım bundan sonra daha dikkatli olurum.

(15-12-2020, Saat: 16:24)mrmarman Adlı Kullanıcıdan Alıntı: Merhaba.
Klasör isimlerini sadece bir anahtar olarak değerlendirmelisiniz.
Daha önce paylaştığımız kodda da aynı şekilde bu isim sadece klasör referansı olarak değerlendirilmişti hatırlarsınız.

FriendlyName olarak tabi edilen menüde görünen isimleri bu klasör altındaki ilk değerdir. Her bir klasör altında önce düzgün adını, ardından da shell\open\command klasörü altındaki dosya yolunu alabilirsiniz.


bprkelsp6723cjm3rnw5.gif


Üstat Registry bakıp "Firefox-308046B0AF4A39CB" isimle klasör görünce farklı PC'lerde "Firefox-xxxxxxxxxx" gibi  isimler olabilir diye düşündüm. 
Fark ettim ki sizin PC'de aynı isimle, anlaşılan o ki "Firefox-308046B0AF4A39CB" bu isimle PC'ye kurulum yapıyormuş  Idea


Teşekkür ederim.
Cevapla
#5
@Altıner üstadım, isimlere takılmayın.

* İsimleri zaten bir dizi / stringlist'e alıyorsun ya, orada sadece dizinin (n) nolu elemanlısı ne ise o şeklinde yaklaşmalısınız.

   Reg.GetKeyNames( aList ); // Temporary Get Folder Names...


Buradan aList[0] elemanı dediğinizde size o garip dediğiniz isim otomatik gelir zaten. Gizli özne olarak dinamik kullanın, statik kod olarak değil. Şunu da unutmayın, piyasada sadece chrome, mozilla vs. yok daha bir sürü belki de sizin de yapacağınız yeni bir browser var ve olacak. Onları da kapsamı alanına almak dinamizm gereğidir. Idea
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#6
benim bilgisayarımda opera yüklü ve malesef o reg anahtarında (start menu internet) görünmüyor.
Cevapla
#7
@hayalyilmaz43


Windows, bir yazılımın İnternet Browser olarak tanınması için bu registry kaydına ihtiyaç duyar. 

Örneğin varsayılan browser seçiminde karşınıza çıkacak seçenekler bu klasörden güdümle listelenir. 

aklıma gelen olasılıklar:
  • Opera kurulumunda sorun olabilir, 
  • Portable sürüm olabilir. 
  • Stabil olmayan beta türevlerinden biri olabilir. 
  • Başka bir yazılım (tweak vs) registry kayıtlarında hasara neden olmuş olabilir. 
  • kurulum kaldırılmış ancak klasör başka yerdeki yedekten çalışıyor olabilir. 
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#8
(16-12-2020, Saat: 01:40)mrmarman Adlı Kullanıcıdan Alıntı: @hayalyilmaz43


Windows, bir yazılımın İnternet Browser olarak tanınması için bu registry kaydına ihtiyaç duyar. 

Örneğin varsayılan browser seçiminde karşınıza çıkacak seçenekler bu klasörden güdümle listelenir. 

aklıma gelen olasılıklar:
  • Opera kurulumunda sorun olabilir, 
  • Portable dürüm olabilir. 
  • Stabil olmayan beta türevlerinden biri olabilir. 
  • Başka bir yazılım (tweak vs) registry kayıtlarında hasara neden olmuş olabilir. 
  • kurulum kaldırılmış ancak klasör başka yerdeki yedekten çalışıyor olabilir. 

merhaba söylediğiniz olasılıkların hiç biri mevcut değil, sanal makinelerimdeki operalarıda kontrol ettim malesef sadece iexplorer kaydı mevcut, platform windows 10 pro 64 bit tr, isterseniz birde kendiniz test edin,

bunun anlamı o anahtarın geçerliliğini yitirmiş olması veya dikkate alınmıyor olması olabilir, daha iyi bir yöntem bulmak daha iyi olacakdır.
Cevapla
#9
@hayalyilmaz43  bu da bir olasılık Smile

Kendi bilgisayarıma kurdum, gördüm ki kullanıcı seviyesinde kurulum olmuş, anahtar halen işlevsel görünüyor. 

Şunu deneyin...

Uses Registry;

procedure AddBrowserList( aList:TStrings; aRootKey: HKEY; aRegTree: String );
var
  Reg : TRegistry;
  i   : Integer;
  TempList: TStringList;
begin
  aRegTree := ExcludeTrailingPathDelimiter(aRegTree) + PathDelim; // Prevent missing ending path delimimiter
  TempList    := TStringList.Create;
  Reg         := TRegistry.Create(KEY_READ);
  Reg.RootKey := aRootKey;
  try
    Reg.Access  := KEY_WOW64_64KEY or KEY_ALL_ACCESS;
    if not Reg.KeyExists( aRegTree ) then Exit;
    if not Reg.OpenKeyReadOnly( aRegTree ) then Exit;
    Reg.GetKeyNames( TempList ); // Temporary Get Folder Names...
    for i := 0 to pred( TempList.Count ) do
    begin
      if Reg.OpenKeyReadOnly( aRegTree + TempList[i] ) then begin
        TempList[i] :=  Reg.ReadString(''); // Read Friendly Name
      end else Showmessage( aRegTree + TempList[i] );
      Reg.OpenKeyReadOnly(aRegTree); // Get back to the BrowserList root
    end;
    for i := 0 to pred(TempList.Count) do
      if aList.IndexOf( TempList[i] ) < 0 then
        aList.Add( TempList[i] );
  finally
    Reg.Free;
    TempList.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.Clear;
  AddBrowserList( Memo1.Lines, HKEY_LOCAL_MACHINE, '\SOFTWARE\Clients\StartMenuInternet' );
  AddBrowserList( Memo1.Lines, HKEY_CURRENT_USER,  '\SOFTWARE\Clients\StartMenuInternet' );
end;

Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#10
Teşekkürler büyük üstat.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  IEC 61850 Potokolünden veri alma shooterman 1 413 14-03-2024, Saat: 11:38
Son Yorum: shooterman
  Problem - ZKTeco Cihazlardan Anlık Veri Alma mad85 16 7.951 25-12-2023, Saat: 11:35
Son Yorum: osiso
  [ÇÖZÜLDÜ]Firebase Bearer Token Alma shooterman 8 620 05-12-2023, Saat: 12:17
Son Yorum: shooterman
  yeni kayıtta bildirim alma ercanskose 5 1.108 26-06-2023, Saat: 13:04
Son Yorum: ercanskose
  Stringgrid Hücre Bilgisi Alma oguzk06 5 844 03-05-2023, Saat: 19:39
Son Yorum: oguzk06



Konuyu Okuyanlar: 1 Ziyaretçi