View Full Version : سوال: چطور میشه icon مربوط به application های نصب شده را یافت و نمایش داد
devil00x
سه شنبه 29 فروردین 1391, 14:03 عصر
ببخشید امیدوارم که دوستان احساس نکن که سوال بی ربطی به این بخش هستش / چون می خوام با کد نویسی دلفی این کار رو انجام بدم...
من سوالم اینکه این نرم افزارهای uninstaller که لیست application های نصب شده و آیکون اونها رو نمایش می ده آیکون رو از کجا میارن.
من همچین برنامه ای دارم می نویسم لیست applicaiton ها رو تونستنم از رجیستری در بیارم اما آیکون ها رو نمی دونم از کجا بایستی نمایش بدم.
بهروز عباسی
سه شنبه 29 فروردین 1391, 14:16 عصر
اول باید آدرس فایل رو بدست بیاری بعد ایکنش روبا استفاده از این توابع میتونی بدست بیاری
{ File icon
Programmer : Behrooz Abbasi
Developed by www.programming-co.com
E-mail: Programming.co.info@Gmail.com}
unit PCFileIcon;
interface
uses
SysUtils, Classes,Graphics,StrUtils,shellapi;
type
TPCFileIcon = class(TComponent)
private
FFilePath:Boolean;
FLargIcon:Boolean ;
FFileName:String;
// FFileicon:TIcon;
function ExtractFileExtXE(const FileName: string): string;
function Get_FileIconPath(const FileName:String):string;
protected
{ Protected declarations }
public
function Get_FileName(const FileName: string):string;
function Get_FileIcon:TIcon;
property FileIcon:TIcon read Get_FileIcon ;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property FileName :String read FFileName write FFileName ;
property AnalyzeFileName :Boolean read FFilePath write FFilePath ;
property LargeIcon :Boolean read FLargIcon write FLargIcon ;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('programming-Co', [TPCFileIcon]);
end;
{ TPCFileIcon }
constructor TPCFileIcon.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FLargIcon:=true;
end;
{+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=+}
destructor TPCFileIcon.Destroy;
begin
inherited Destroy;
end;
{+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=+}
function TPCFileIcon.ExtractFileExtXE(const FileName: string): string;
var
I: Integer;
begin
I := LastDelimiter('.' + PathDelim + DriveDelim, FileName);
if (I > 0) and (FileName[I] = '.') then
Result := Copy(FileName, I, 4) else
Result := '';
end;
{+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=+}
function TPCFileIcon.Get_FileIcon: TIcon;
var
SHFileInfo:TSHFileInfo;
Icon :TIcon;
FileNameXE:string;
begin
icon:= Ticon.Create;
if FFilePath then
FileNameXE:= Get_FileIconPath( fileName)
else
FileNameXE:=FFileName;
if FLargIcon then begin
ShGetFileInfo(Pchar((FileNameXE)),
0,
SHFileInfo,
SizeOf(SHFileInfo),
SHGFI_TYPENAME or
SHGFI_ICON or
SHGFI_LARGEICON or
SHGFI_LARGEICON );
Icon.Handle := shFileInfo.hIcon;
result:= Icon ;
end ;
if not(FLargIcon) then begin
ShGetFileInfo(Pchar((FileNameXE)),
0,
SHFileInfo,
SizeOf(SHFileInfo),
SHGFI_TYPENAME or
SHGFI_ICON or
SHGFI_LARGEICON or
SHGFI_SMALLICON );
Icon.Handle := shFileInfo.hIcon;
result:= Icon;
end;
end;
{+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=+}
function TPCFileIcon.Get_FileIconPath(const FileName: String): string;
var
intA,intB,intC:Integer;
strA,StrB:string ;
begin
intA:=Pos(ExtractFileExtXE(Trim(StrLower(pchar( FileName)))),Trim(StrLower(pchar( FileName)) ) );
intb :=Pos('"',Trim(StrLower(pchar(FileName)))) ;
if intb<>0 then
begin
stra:= LeftStr(Trim(StrLower(pchar( FileName))),intA+3) ;
for intc:=1 to inta+3 do
strb:=strb+copy(stra,intc+1,1) ;
Result:=strb;
end;
if intb=0 then
begin
Result:= LeftStr(Trim(StrLower(pchar( FileName))),inta+3) ;
end ;
end;
function TPCFileIcon.Get_FileName(const FileName: string):string;
begin
Result:=Get_FileIconPath( FileName);
end;
end.
بهروز عباسی
سه شنبه 29 فروردین 1391, 14:40 عصر
برای بدست اوردن ادرس برنامه اصلی فکر کنم این ادر رجیستری کمکت کنه من الان اینو گیر اوردم برای برنامه Alcohol.exe
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\App Paths\Alcohol.exe
نتیجه
C:\Program Files\Alcohol Soft\Alcohol 120\Alcohol.exe
devil00x
سه شنبه 29 فروردین 1391, 14:55 عصر
دوست عزیز از پاسختون ممنونم ، اما یک مسئله ای وجود داره:
ببینید من لیست برنامه های نصب شده رو از آدرس
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Uninstall
می خوانم و مثلا در یک لیست باکس نمایش می دم حالا نکته اینجاست که کلیدهای محل AppPath با UnInstall متفاوت هستش ، ضمن اینکه من دارم به صورت remote به ماشینی در شبکه وصل می شم و لیست نرم افزار هاش رو دارم می خونم.
devil00x
چهارشنبه 30 فروردین 1391, 15:40 عصر
یعنی واقعا هیچ کسی از اساتید نمی خواد یه کمک برسونه!!!!!!!!
سعید صابری
چهارشنبه 30 فروردین 1391, 19:43 عصر
به نظر من از مسیری که پست شما را 3 گفته آدرس فایل اجرایی را بخون و بعد با دستور api
ExtractIcon() آیکون استخراج کن
شاید این روش روش خوبی نباشه ولی یک روشه!
devil00x
پنج شنبه 31 فروردین 1391, 10:37 صبح
دوست عزیز آخه همونطور که قبلا گفتم اون دو تا لیست هیچ همخانی با هم ندارند.
راه کار دیگری دوستان به ذخنشون نمی رسه!!!!!!!!!!!!
Mask
پنج شنبه 31 فروردین 1391, 12:22 عصر
remote به ماشینی در شبکه وصل می شم و لیست نرم افزار هاش رو دارم می خونم.
منم قبل یه همچین برنامه ای نوشته بودم.
برای این قسمتش باید یه یرنامه سمت کلاینت باشه که آیکن فایل برنامه رو اکستراکت کنه و به صورت استریم بفرسته برای برنامه سرور ، و در سمت سرور استریم رو به bitmap تبدیل و هرجایی که نیاز دارید ازش استفاده کنید.
devil00x
شنبه 02 اردیبهشت 1391, 10:07 صبح
دوست عزیز مشکل من آخه اینه که قراره برنامه agentless عمل کنه!!!!
لطفا یکی یه راهکار ارائه کنه؟؟؟؟؟؟؟؟؟؟!!!!!!!!!!
javad p
یک شنبه 03 اردیبهشت 1391, 08:51 صبح
من سوالم اینکه این نرم افزارهای uninstaller که لیست application های نصب شده و آیکون اونها رو نمایش می ده آیکون رو از کجا میارن.تمام برنامه هایی که قراره هنگام نصب شدن بر روی سیستم برن تو لیست برنامه های نصب شده و تو Add or Remove نمایش داده بشن تو مسیر زیر یک کلاس میسازن
اگه برنامه دارای کلاس باشه و تو کل رجیستری هم از همون کلاس استفاده کنه، اینجا هم با همون ثبت میکنه . در غیر این صورت با یک نام ثبت میشه
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Uninstall
هر برنامه بعد از ساخت کلاس خودش ، توی اون قسمت یه سری string value میسازه که هرکدوم مشخصات اون برنامه رو برمیگردونه
DisplayName
نامی که تو Add or Remove نمایش داده میشه
UninstallString
آدرس فایل Uninstall
DisplayVersion
ورژن برنامه
DisplayIcon
ادرس آیکون فایل - همونی که شما میخواهید
این آدرس هم میتونه آدرس یه فایل آیکون باشه که معمولا برنامه ها این کار رو نمیکنن
هم میتونه آدرس یه فایل exe باشه
من قبلا یه پلاگین (http://www.abtinsoft.com/?page_id=62) برای برنامه مولتی مدیا بیلدر ساخته بودم که همینکارو میکرد
گفتم شاید بتونم کمکی بکنه
موفق باشید
بهروز عباسی
یک شنبه 03 اردیبهشت 1391, 09:54 صبح
DisplayIcon
ادرس آیکون فایل - همونی که شما میخواهید
دوست عزیز
همه برنامه ها این مقدار رو ندارن
javad p
یک شنبه 03 اردیبهشت 1391, 10:24 صبح
دوست عزیز
همه برنامه ها این مقدار رو ندارن
وقتی این مقدار وجود نداره، سیستم به طور پیشفرض آدرس UninstallString رو به جای اون درنظر میگیره
یعنی آیکون فایل Uninstall نمایش داده میشه
Mask
یک شنبه 03 اردیبهشت 1391, 11:05 صبح
این دوستمون : به صورت ریموت داره کار میکنه نه لوکال.
devil00x
دوشنبه 04 اردیبهشت 1391, 12:48 عصر
این دوستمون : به صورت ریموت داره کار میکنه نه لوکال.
بله درسته من دارم به صورت ریموت کار می کنم و همه مشکلم هم همین قسمت بازی هست!!!!!!!!1
devil00x
سه شنبه 05 اردیبهشت 1391, 12:23 عصر
دوستان اگه راهی به ذهنتون می رسه لطفا ارائه بدید، واقعا راه منطقی به ذهنم نمی رسه!!!
البته یکی از دوستان گفت می تونی یک سری آیکون از نرم افزارهای معروف که معمولا نصب می شه رو نگه داری و از اونجا بخونی ، اما راه زیاد معقول و منطقی نیست!!!
devil00x
جمعه 08 اردیبهشت 1391, 15:58 عصر
یعنی هیچ کس راهی به ذهنش نمی رسه راهنمایی کنه!
devil00x
سه شنبه 19 اردیبهشت 1391, 12:13 عصر
دوستان لطفا یکی یاری کنه ، من همچنان درگیر این مسئله هستم......
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.