做一个资源管理器遇到的问题?(300分) 2.有一个API函数可获得在系统中注册的图标,具体是哪个我不记得了.我用这个函数做过一个程序.可实现这个功能. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 去年做的程序啦,记不起来了.你可以查一下API函数. 1.好像是用winexec()这个api函数来执行外部应用程序的2.读取文件可以用opendialog,然后用extracticon()获得句柄,再用drawicon()画出来吧 当然要在canvas上面进行。 我对文件夹图标有过研究 最近在写一个相关的软件你可以读取Desktop.ini文件里面的设置为iconfile=/../aaa.ico等 你要是用vc你的这个问题就小kiss了可惜我刚学delphi还帮不上忙 创建一个应用程序的快捷方式:unit CreateLink_Unit;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ActiveX, ComObj, ShlObj;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);var ShLink: IShellLink; PFile: IPersistFile; FileName: WideString;begin FileName := ExtractFilePath(Application.ExeName) + 'Shutcut to ' + ExtractFileName(Application.ExeName) + '.lnk'; if FileExists(FileName) then Exit; ShLink := CreateComObject (CLSID_ShellLink) as IShellLink; PFile := ShLink as IPersistFile; ShLink.SetPath(PChar(Application.ExeName)); ShLink.SetWorkingDirectory(PChar(ExtractFilePath(Application.ExeName))); PFile.Save(PWChar(FileName), False);end;end.读取任意文件/文件夹的图标unit SysShellIcon_Unit;interfaceuses Windows, Messages, SysUtils,Classes, Graphics, Controls,Forms, Dialogs, ComCtrls,StdCtrls, ShellAPI, ExtCtrls,ImgList;type TForm1 = class(TForm) Button1: TButton; ListView1: TListView; Button2: TButton; ImageList1: TImageList; Edit1: TEdit; Button3: TButton; extedit: TEdit; Button4: TButton; procedure Button1Click(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end;constTest='c:\idftp.txt';varForm1: TForm1;implementation{$R *.DFM}function GetFileIconIndex(FileName:string):integer;varExt:String;FileInfo: TSHFILEINFO;beginExt:=FileName;Result:=ShGetFileInfo(Pchar(Ext), 0, FileInfo,SizeOf(TSHFileInfo), SHGFI_LARGEICON orSHGFI_SYSICONINDEX);Result:=FileInfo.iIcon;end;procedure TForm1.FormDestroy(Sender: TObject);beginListView1.SmallImages.Free;ListView1.LargeImages.Free;end;procedure TForm1.Button1Click(Sender: TObject);beginif ListView1.Items.Count<>0 thenListView1.Items.Item[0].ImageIndex:=GetFileIconIndex(edit1.Text);end;procedure TForm1.Button2Click(Sender: TObject);var i,j:integer;FileInfo: TSHFILEINFO;begin//with ListView1 dobegin{SmallImages:=TImageList.CreateSize(32,32);SmallImages.ShareImages:=True;i:=ShGetFileInfo('*.*',0,FileInfo, SizeOf(TSHFileInfo),SHGFI_SmallICON orSHGFI_ICON or SHGFI_SYSICONINDEX);if i<>0 then SmallImages.Handle:=i;LargeImages:=TImageList.CreateSize(32,32);LargeImages.ShareImages:=True;}j:=ShGetFileInfo('',0,FileInfo, SizeOf(TSHFileInfo),SHGFI_LARGEICON orSHGFI_ICON or SHGFI_SYSICONINDEX {or SHGFI_PIDL});if j<>0 then ImageList1.Handle:=j;end;end;procedure TForm1.Button3Click(Sender: TObject);var FileInfo:TSHFileInfo;begin SHGetFileInfo(pchar('temp.'+extedit.Text),FILE_ATTRIBUTE_NORMAL, FileInfo, SizeOf(TSHFileInfo), SHGFI_LargeICON or SHGFI_ICON or SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES); ListView1.Items.Item[0].ImageIndex:=FileInfo.iIcon;end;procedure TForm1.Button4Click(Sender: TObject);var i:integer; it:tlistitem;begin listview1.Items.Clear; for i:=0 to listview1.LargeImages.Count-1 do begin it:=listview1.Items.Add; it.Caption:=Inttostr(i); it.ImageIndex:=i; end;end;end. 1. 用Image显示Dll中的ico. 想使Image显示C:\windows\system\shell32.dll中的第2个图标,应该用image.picture.icon.handle:=ExtractIcon (Hinstance,'C:\windows\system\shell32.dll',1)2.快捷方式...Uses comobj,ShlObj,activex,FileCtrl//快捷方式(桌面,开始按钮)//filename 文件名 filedesc 文件描述Procedure MakeLink(Filename:string;FileDesc:string;leixing:integer);var tmpObject : IUnknown; tmpSLink : IShellLink; tmpPFile : IPersistFile; PIDL : PItemIDList; StartupDirectory : array[0..MAX_PATH] of Char; LinkFilename : WideString; bianliang,Path:string;begin bianliang:='\'+FileDesc+'.lnk'; tmpObject := CreateComObject(CLSID_ShellLink);//创建建立快捷方式的外壳扩展 tmpSLink := tmpObject as IShellLink; //取得接口 tmpPFile := tmpObject as IPersistFile; //用来储存*.lnk文件的接口 tmpSLink.SetPath(pChar(FileName)); //设定 filename 所在路径 tmpSLink.SetWorkingDirectory(pChar(ExtractFilePath(FileName))); //设定工作目录//创建桌面快捷方式 if leixing=1 then begin SHGetSpecialFolderLocation(0,CSIDL_DESKTOPDIRECTORY,PIDL);//获得桌面的Itemidlist Fillchar(startupdirectory,Max_Path+1,0); SHGetPathFromIDList(PIDL,StartupDirectory); //获得路径 LinkFilename := StartupDirectory + bianliang; WriteToUnstallFile(LinkFilename,2); tmpPFile.Save(pWChar(LinkFilename),FALSE); //保存*.lnk文件 End else begin//创建开始按钮中的 program 快捷方式 SHGetSpecialFolderLocation(0, CSIDL_PROGRAMS,PIDL); //获得开始按钮中的program的Itemidlist Fillchar(startupdirectory,Max_Path+1,0); SHGetPathFromIDList(PIDL,StartupDirectory); //获得路径 Path:=StartupDirectory+'\港澳资讯'; If not DirectoryExists(Path) then begin MkDir(Path); WriteToUnstallFile(Path,1); end; Path:=Path+'\'+ChanPinName; If not DirectoryExists(path) then begin MkDir(Path); WriteToUnstallFile(Path,1); end; LinkFilename := path + bianliang; WriteToUnstallFile(LinkFilename,2); tmpPFile.Save(pWChar(LinkFilename),FALSE); //保存*.lnk文件 End;end; 3.ExtractAssociatedIcon /ExtractIcon...自己看帮助吧 :p 请问有哪位高手知道,能不能实现把Image图片颜色替换 返回数集时提示,多步操作错误 如何解决! self和application 急问: 动态创建IMAGE时,有时它的BRUSH的COLOR不能显示 如何把一个unix文本文件里的内容做一个格式的转换。 我用ADO访问加密的Access为什么连接不上呀??急!!~@!@ 关于创建文本文件的问题 求TDBChart控件的用法?(用代码来控制) 如在程序中关闭当前计算机的活动窗口? 100 分请教关于NMSMTP发邮件的问题。 \winnt\Deanom.exe在我注册表的run里面。是不是将死者病毒??? 请教高手一个问题。
2.读取文件可以用opendialog,然后用extracticon()获得句柄,再用drawicon()画出来吧
当然要在canvas上面进行。
你可以读取Desktop.ini文件里面的设置为iconfile=/../aaa.ico等
可惜我刚学delphi
还帮不上忙
unit CreateLink_Unit;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ActiveX, ComObj, ShlObj;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
ShLink: IShellLink;
PFile: IPersistFile;
FileName: WideString;
begin
FileName := ExtractFilePath(Application.ExeName) + 'Shutcut to '
+ ExtractFileName(Application.ExeName) + '.lnk';
if FileExists(FileName) then Exit;
ShLink := CreateComObject (CLSID_ShellLink) as IShellLink;
PFile := ShLink as IPersistFile;
ShLink.SetPath(PChar(Application.ExeName));
ShLink.SetWorkingDirectory(PChar(ExtractFilePath(Application.ExeName)));
PFile.Save(PWChar(FileName), False);
end;end.读取任意文件/文件夹的图标
unit SysShellIcon_Unit;interfaceuses
Windows, Messages, SysUtils,
Classes, Graphics, Controls,
Forms, Dialogs, ComCtrls,
StdCtrls, ShellAPI, ExtCtrls,
ImgList;type
TForm1 = class(TForm)
Button1: TButton;
ListView1: TListView;
Button2: TButton;
ImageList1: TImageList;
Edit1: TEdit;
Button3: TButton;
extedit: TEdit;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;const
Test='c:\idftp.txt';var
Form1: TForm1;
implementation{$R *.DFM}
function GetFileIconIndex(FileName:string):integer;
var
Ext:String;
FileInfo: TSHFILEINFO;
begin
Ext:=FileName;
Result:=ShGetFileInfo(Pchar
(Ext), 0, FileInfo,
SizeOf(TSHFileInfo), SHGFI_LARGEICON or
SHGFI_SYSICONINDEX);
Result:=FileInfo.iIcon;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
ListView1.SmallImages.Free;
ListView1.LargeImages.Free;
end;procedure TForm1.Button1Click
(Sender: TObject);
begin
if ListView1.Items.Count<>0 then
ListView1.Items.Item[0].ImageIndex:=GetFileIconIndex(edit1.Text);
end;
procedure TForm1.Button2Click(Sender: TObject);
var i,j:integer;
FileInfo: TSHFILEINFO;
begin
//with ListView1 do
begin
{SmallImages:=TImageList.CreateSize(32,32);
SmallImages.ShareImages:=True;
i:=ShGetFileInfo('*.*',0,
FileInfo, SizeOf(TSHFileInfo),
SHGFI_SmallICON or
SHGFI_ICON or SHGFI_SYSICONINDEX);
if i<>0 then SmallImages.Handle:=i;
LargeImages:=TImageList.CreateSize(32,32);
LargeImages.ShareImages:=True;}
j:=ShGetFileInfo('',0,
FileInfo, SizeOf(TSHFileInfo),
SHGFI_LARGEICON or
SHGFI_ICON or SHGFI_SYSICONINDEX {or SHGFI_PIDL});
if j<>0 then ImageList1.Handle:=j;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var FileInfo:TSHFileInfo;
begin
SHGetFileInfo(pchar('temp.'+extedit.Text),FILE_ATTRIBUTE_NORMAL, FileInfo, SizeOf(TSHFileInfo),
SHGFI_LargeICON or SHGFI_ICON or SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES);
ListView1.Items.Item[0].ImageIndex:=FileInfo.iIcon;
end;procedure TForm1.Button4Click(Sender: TObject);
var i:integer; it:tlistitem;
begin
listview1.Items.Clear;
for i:=0 to listview1.LargeImages.Count-1 do
begin
it:=listview1.Items.Add;
it.Caption:=Inttostr(i);
it.ImageIndex:=i;
end;
end;end.
2.快捷方式...
Uses
comobj,ShlObj,activex,FileCtrl//快捷方式(桌面,开始按钮)
//filename 文件名 filedesc 文件描述
Procedure MakeLink(Filename:string;FileDesc:string;leixing:integer);
var
tmpObject : IUnknown;
tmpSLink : IShellLink;
tmpPFile : IPersistFile;
PIDL : PItemIDList;
StartupDirectory : array[0..MAX_PATH] of Char;
LinkFilename : WideString;
bianliang,Path:string;
begin
bianliang:='\'+FileDesc+'.lnk';
tmpObject := CreateComObject(CLSID_ShellLink);//创建建立快捷方式的外壳扩展
tmpSLink := tmpObject as IShellLink; //取得接口
tmpPFile := tmpObject as IPersistFile; //用来储存*.lnk文件的接口
tmpSLink.SetPath(pChar(FileName)); //设定 filename 所在路径
tmpSLink.SetWorkingDirectory(pChar(ExtractFilePath(FileName))); //设定工作目录
//创建桌面快捷方式
if leixing=1 then
begin
SHGetSpecialFolderLocation(0,CSIDL_DESKTOPDIRECTORY,PIDL);//获得桌面的Itemidlist
Fillchar(startupdirectory,Max_Path+1,0);
SHGetPathFromIDList(PIDL,StartupDirectory); //获得路径
LinkFilename := StartupDirectory + bianliang;
WriteToUnstallFile(LinkFilename,2);
tmpPFile.Save(pWChar(LinkFilename),FALSE); //保存*.lnk文件
End
else
begin
//创建开始按钮中的 program 快捷方式
SHGetSpecialFolderLocation(0, CSIDL_PROGRAMS,PIDL); //获得开始按钮中的program的Itemidlist
Fillchar(startupdirectory,Max_Path+1,0);
SHGetPathFromIDList(PIDL,StartupDirectory); //获得路径
Path:=StartupDirectory+'\港澳资讯';
If not DirectoryExists(Path) then
begin
MkDir(Path);
WriteToUnstallFile(Path,1);
end;
Path:=Path+'\'+ChanPinName;
If not DirectoryExists(path) then
begin
MkDir(Path);
WriteToUnstallFile(Path,1);
end;
LinkFilename := path + bianliang;
WriteToUnstallFile(LinkFilename,2);
tmpPFile.Save(pWChar(LinkFilename),FALSE); //保存*.lnk文件
End;
end;
3.ExtractAssociatedIcon /ExtractIcon...自己看帮助吧 :p