Yorumları: 616
Konuları: 66
Kayıt Tarihi: 05-10-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 3.270
Uzman
19-10-2016, Saat: 00:27
(Son Düzenleme: 19-10-2016, Saat: 07:39, Düzenleyen: TescilsizUzman.)
program Project2;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
System.Classes,
System.Win.Registry,Winapi.Windows;
var
MyList: TStringList;
Plist: TStringList;
MyRegistry: TRegistry;
i: Integer;
Str: string;
begin
try
{ TODO -oUser -cConsole Main : Insert code here }
MyRegistry:=TRegistry.Create;
MyList:=TStringList.Create;
Plist:=TStringList.Create;
with MyRegistry do
begin
RootKey :=HKEY_LOCAL_MACHINE;
if OpenKey(
'Software\Microsoft\Windows\CurrentVersion\Uninstall',
False)=True then GetKeyNames(MyList);
CloseKey;
for i:=0 to MyList.Count-1 do
begin
RootKey:=HKEY_LOCAL_MACHINE;
OpenKey(
'Software\Microsoft\Windows\CurrentVersion\Uninstall\'+
MyList[i],
False);
Str:=ReadString('DisplayName');
if Str<>'' then
Plist.Add(ReadString('DisplayName'));
CloseKey;
end;
end;
if Plist.Count>0 then
begin
Plist.SaveToFile(ExtractFilePath(ParamStr(0))+'\programlist.txt');
FreeAndNil(Plist);
end;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
Bu kodla windowstaki yüklü program listesini bir metin belgesine kaydediyorum.
normalde Win32\Debug içerisinde programı çalıştırdığımda kaydetiği listede 226 yüklü program buldu içerisinde bende yüklü olan winrarı göremedim target platformdan 64 bit ekledim birde 64 bit olarak derledim 64 bit olarak derlediğim exe yi çalıştırdığımda 152 yüklü program buldu ve winrar da bunun içerisindeydi aynı kodla 32 bit derlenen programın çıkardığı sonuç farklı 64 bit derlenen exe nin çıkardığı sonuç farklı 64 bit derlenen 64 bit program listesini 32 bit derlenen 32 yüklü program listesini verdi.
32 bit olarak 64 bit yüklü programların listesini nasıl alabilirim?
“Do. Or do not. There is no try.”
Yorumları: 970
Konuları: 44
Kayıt Tarihi: 24-07-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 2.712
Uzman
Kodları paylaşabilir misin?
Ağlarsa kablosuz ağlar, gerisi yerel ağlar...
Yorumları: 616
Konuları: 66
Kayıt Tarihi: 05-10-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 3.270
Uzman
19-10-2016, Saat: 00:47
(Son Düzenleme: 19-10-2016, Saat: 07:40, Düzenleyen: TescilsizUzman.)
(19-10-2016, Saat: 00:44)engerex Adlı Kullanıcıdan Alıntı: Kodları paylaşabilir misin?
Kodlar görünüyor ilk gönderimde yine ekleyeyim
program Project2;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
System.Classes,
System.Win.Registry,Winapi.Windows;
var
MyList: TStringList;
Plist: TStringList;
MyRegistry: TRegistry;
i: Integer;
Str: string;
begin
try
{ TODO -oUser -cConsole Main : Insert code here }
MyRegistry:=TRegistry.Create;
MyList:=TStringList.Create;
Plist:=TStringList.Create;
with MyRegistry do
begin
RootKey :=HKEY_LOCAL_MACHINE;
if OpenKey(
'Software\Microsoft\Windows\CurrentVersion\Uninstall',
False)=True then GetKeyNames(MyList);
CloseKey;
for i:=0 to MyList.Count-1 do
begin
RootKey:=HKEY_LOCAL_MACHINE;
OpenKey(
'Software\Microsoft\Windows\CurrentVersion\Uninstall\'+
MyList[i],
False);
Str:=ReadString('DisplayName');
if Str<>'' then
Plist.Add(ReadString('DisplayName'));
CloseKey;
end;
end;
if Plist.Count>0 then
begin
Plist.SaveToFile(ExtractFilePath(ParamStr(0))+'\programlist.txt');
FreeAndNil(Plist);
end;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
“Do. Or do not. There is no try.”
Yorumları: 970
Konuları: 44
Kayıt Tarihi: 24-07-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 2.712
Uzman
32bit ve 64 bit uyumluluğu sağlamak için farklı yollar gerekiyor.
'Software\Microsoft\Windows\CurrentVersion\Uninstall' yerine 'Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall' kullanmayı dene.
Ne hikmetse 32 bit veya 64 bit derlesem dahi aynı liste çıkıyor ve 64 bit uygulamalar listede yok. (En azından Winrar yok.) Önerdiğim yolda da aynı sonucu aldım. Sende farklı sonuç çıkabilir.
@Tuğrul HELVACI bu konuda yardımcı olabilir.
(Bu arada kodlar her iki mesajda da gözüküyor.)
Ağlarsa kablosuz ağlar, gerisi yerel ağlar...
Yorumları: 616
Konuları: 66
Kayıt Tarihi: 05-10-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 3.270
Uzman
(19-10-2016, Saat: 01:23)engerex Adlı Kullanıcıdan Alıntı: 32bit ve 64 bit uyumluluğu sağlamak için farklı yollar gerekiyor.
'Software\Microsoft\Windows\CurrentVersion\Uninstall' yerine 'Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall' kullanmayı dene.
Ne hikmetse 32 bit veya 64 bit derlesem dahi aynı liste çıkıyor ve 64 bit uygulamalar listede yok. (En azından Winrar yok.) Önerdiğim yolda da aynı sonucu aldım. Sende farklı sonuç çıkabilir.
@Tuğrul HELVACI bu konuda yardımcı olabilir.
(Bu arada kodlar her iki mesajda da gözüküyor.)
İlginçtir ki Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall bu yol registery de var ama kodda Software\Microsoft\Windows\CurrentVersion\Uninstall yerine koyup çalıştırdığımda sonuç getirmiyor.
“Do. Or do not. There is no try.”
Yorumları: 616
Konuları: 66
Kayıt Tarihi: 05-10-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 3.270
Uzman
(19-10-2016, Saat: 09:13)yhackup Adlı Kullanıcıdan Alıntı: http://www.delphican.com/showthread.php?...t=registry
Bu konuda barutalinin verdiği ipucu ile bir ilgisi olabilir bir kontrol etmelisin.
Reg := TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);
Malesef sadece 64 bit listeyi getirdi bu sefer.
“Do. Or do not. There is no try.”
Yorumları: 304
Konuları: 20
Kayıt Tarihi: 26-09-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 3.967
Uzman
(19-10-2016, Saat: 13:11)masteryoda Adlı Kullanıcıdan Alıntı: (19-10-2016, Saat: 09:13)yhackup Adlı Kullanıcıdan Alıntı: http://www.delphican.com/showthread.php?...t=registry
Bu konuda barutalinin verdiği ipucu ile bir ilgisi olabilir bir kontrol etmelisin.
Reg := TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);
Malesef sadece 64 bit listeyi getirdi bu sefer.
function TForm1.GetProgramList(const x64: Boolean): TStrings;
var
MyList: TStringList;
Plist: TStringList;
MyRegistry: TRegistry;
i: Integer;
Str: string;
begin
try
if x64 then
MyRegistry:=TRegistry.Create(KEY_READ or KEY_WOW64_64KEY)
else
MyRegistry:=TRegistry.Create(KEY_READ or KEY_WOW64_32KEY);
MyList:=TStringList.Create;
Plist:=TStringList.Create;
with MyRegistry do
begin
RootKey :=HKEY_LOCAL_MACHINE;
if OpenKey('Software\Microsoft\Windows\CurrentVersion\Uninstall', False) = True then
GetKeyNames(MyList);
CloseKey;
for i:=0 to MyList.Count-1 do
begin
RootKey:=HKEY_LOCAL_MACHINE;
OpenKey(
'Software\Microsoft\Windows\CurrentVersion\Uninstall\'+
MyList[i],
False);
Str:=ReadString('DisplayName');
if Str<>'' then
Plist.Add(ReadString('DisplayName'));
CloseKey;
end;
end;
finally
Result := Plist;
end;
end;
Amatör Küme Bilgisayar Programcısı
Yorumları: 616
Konuları: 66
Kayıt Tarihi: 05-10-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 3.270
Uzman
@
barutali teşekkürler kod işimi gördü.
“Do. Or do not. There is no try.”