我想取 进程路径 比如c:\bin\dd.exe 的图标 显示在 进程名 那里 请问怎么显示
以下是参考图片
还有下次在打开程序 图标还在。
以下是参考地址
http://bbs.2ccc.com/topic.asp?topicid=352779
以下是参考图片
还有下次在打开程序 图标还在。
以下是参考地址
http://bbs.2ccc.com/topic.asp?topicid=352779
解决方案 »
- 如何在intraweb中加如背景图????
- 迷失的游子,该何去何从?
- 那里有Microsoft DirectX SDK FOR DELPHI的下载
- 怎样让等于0的数据集中的数据,在DBGRID中不显示为0或者是0.00,而是显示为空白???
- 一幅图片
- 使用FindDialog来查找文档字符,但是总是出错,急求助!
- 请问我建立了一个TServerClientThread 线程,但是怎么在线程外面控制该线程呢?
- 怎样用程序实现设置默认打印机
- Windows又一个消息队列,我该如何访问它,比如获取按键信息
- installshield做出的快捷方式怎么这么奇怪,高分求救!!!
- 求解!
- delphi 如何关闭掉已经打开的word
下次启动程序的时候就依次读取每条 XML 信息,然后再用下面的例子获取关联图标,根本不用将图标保存起来为一个文件,一来麻烦,二来是没必要,除非你要自定义图标功能。{
提取系统关联图标例子uses
ShellAPI;记得设置 ListView 的 SmallImages 为 指定的 Imagelist, 每添加一条 xml 内容,
就指定它的 ImageIndex,
这样就是你要的效果了。
}
var
Icon: HIcon;
IconIndex: Word;
FileName: PChar;
begin
FileName := 'C:\';//试一试获取 C 分区的关联图标
Icon := ExtractAssociatedIcon(HInstance, FileName, IconIndex);
DrawIcon(Form1.Canvas.Handle, 10, 10, Icon);//测试,在窗体画出来看一下
Image1.Picture.Icon.Handle := Icon;//在Image1中显示出来
ImageList1.AddIcon(Image1.Picture.Icon);//添加进ImageList1供ListView使用。
end;
格式如下 文件名字 文件ID 文件路径 文件参数 还有你说的那个imagelist保存列表
{
你只需要用 delphi 编译后,然后运行 Demo.exe, 手动添加需要的程序,然后关闭,程序自动保存 XML,下一次启动 Demo.exe 时自动加载上次的项目。
sail2000
2010-05-11
于 广州
}
interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ImgList, ExtCtrls,
// --XML--
XMLDoc,
xmldom,
XMLIntf,
msxmldom;const
XMLFileName = 'Data.xml'; //XML 文件名type
TForm1 = class(TForm)
ListView1: TListView;
ImageList1: TImageList;
EdtFileName: TLabeledEdit;
EdtFileID: TLabeledEdit;
EdtFilePath: TLabeledEdit;
EdtFilePar: TLabeledEdit;
BtnAddItem: TButton;
BtnDel: TButton;
procedure BtnAddItemClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BtnDelClick(Sender: TObject);
private
{ Private declarations }
XML: TXMLDocument;
ListCount: Integer; procedure LoadItem;
procedure SaveItem;
function AddItem(FileName, FileID, FilePath, FilePars: string): Boolean;
public
{ Public declarations }
end;var
Form1: TForm1;implementationuses
ShellAPI;
{$R *.dfm}function TForm1.AddItem(FileName, FileID, FilePath, FilePars: string): Boolean;
var
Icon: HIcon;
IconIndex: Word;
Ico: TIcon;
i: Integer;
begin
Result := False;
if FileExists(FilePath) then
begin
with ListView1.Items.Add do
begin
if Trim(FileName) = '' then
FileName := ExtractFileName(FilePath);
Caption := FileName;
SubItems.Add(FileID);
SubItems.Add(FilePath);
SubItems.Add(FilePars);
end; Ico := TIcon.Create; Icon := ExtractAssociatedIcon(HInstance, PChar(FilePath), IconIndex);
Ico.Handle := Icon;
ImageList1.AddIcon(Ico); // 添加进ImageList1供ListView使用。
Ico.Free;
i := ListView1.Items.Count - 1;
ListView1.Items.Item[i].ImageIndex := i; // 指定对应索引 Result := True; end;end;procedure TForm1.LoadItem;
var
nodeList: IXMLNodeList;
node: IXMLNode;
i: Integer;
sFileName, sFileID, sFilePath, sFilePars: string;
begin
node := XML.DocumentElement;
nodeList := node.ChildNodes;
// ShowMessage(IntToStr(nodeList.Count)); //Debug Dialog
if nodeList.Count > 0 then
begin
ListCount := nodeList.Count;
for i := 0 to nodeList.Count - 1 do
begin
node := XML.DocumentElement;
node := node.ChildNodes.Nodes[i]; sFileName := node.Attributes['FileName']; { 获取 文件名字 属性 }
sFileID := node.Attributes['FileID']; { 获取 文件 ID 属性 }
sFilePath := node.Attributes['FilePath']; { 获取 文件路径 属性 }
sFilePars := node.Attributes['FilePars']; { 获取 参数 属性 } AddItem(sFileName, sFileID, sFilePath, sFilePars);
end;
end;
end;procedure TForm1.SaveItem;
var
pNode: IXMLNode; { 定义节点: 父节点 }
s: string;
i: Integer;
begin
XML.XML.Clear;
XML.Active := True; { 必须先激活 }
XML.Version := '1.0'; { 设置版本 }
XML.Encoding := 'UTF-8'; { 设置语言 }
XML.StandAlone := 'yes';
XML.Options := [doNodeAutoIndent, doAutoPrefix]; { 自动缩进 } pNode := XML.AddChild('Root'); { 添加 pNode 是根节点 } for i := 0 to ListView1.Items.Count - 1 do { 循环 ListView 的 Item }
begin
pNode := XML.ChildNodes.Nodes['Root']; { 复位 pNode 是根节点 }
pNode := pNode.AddChild('Item');
s := ListView1.Items.Item[i].Caption;
pNode.SetAttribute('FileName', s); { 文件名字 }
s := ListView1.Items.Item[i].SubItems.Strings[0];
pNode.SetAttribute('FileID', s); { 文件ID }
s := ListView1.Items.Item[i].SubItems.Strings[1];
pNode.SetAttribute('FilePath', s); { 文件路径 }
s := ListView1.Items.Item[i].SubItems.Strings[2];
pNode.SetAttribute('FilePars', s); { 文件参数 }
end; s := ExtractFilePath(ParamStr(0)) + XMLFileName;
XML.SaveToFile(s);
end;procedure TForm1.BtnAddItemClick(Sender: TObject);
begin
if not AddItem(EdtFileName.Text, EdtFileID.Text, EdtFilePath.Text,
EdtFilePar.Text) then
ShowMessage('信息不完整');
end;procedure TForm1.BtnDelClick(Sender: TObject);
var
i, j: Integer;
begin
i := ListView1.ItemIndex;
if i <> -1 then
begin
ListView1.DeleteSelected;
ImageList1.Delete(I); //删除对应图标
for j := i to ListView1.Items.Count - 1 do //重新指定图标索引
begin
ListView1.Items.Item[j].ImageIndex := ListView1.Items.Item[j].ImageIndex -1;
end;
end;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SaveItem;
XML.Free;
end;procedure TForm1.FormCreate(Sender: TObject);
var
s: string;
pNode: IXMLNode; { 定义节点: 父节点 }
begin
XML := TXMLDocument.Create(Self);
s := ExtractFilePath(ParamStr(0)) + XMLFileName;
if FileExists(s) then
begin
XML.Active := True;
XML.LoadFromFile(s);
LoadItem;
end
else
begin
XML.XML.Clear;
XML.Active := True; { 必须先激活 }
XML.Version := '1.0'; { 设置版本 }
XML.Encoding := 'UTF-8'; { 设置语言 }
XML.StandAlone := 'yes';
XML.Options := [doNodeAutoIndent, doAutoPrefix]; { 自动缩进 } pNode := XML.AddChild('Root'); { 添加 pNode 是根节点 }
XML.SaveToFile(s);
end;
end;end.
其中 XML 文件是这样结构,很简单;<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root>
<Item FileName="calc.exe" FileID="001" FilePath="C:\WINDOWS\system32\calc.exe" FilePars="-np"/>
<Item FileName="Notepad.exe" FileID="001" FilePath="C:\WINDOWS\system32\Notepad.exe" FilePars="-np"/>
<Item FileName="explorer.exe" FileID="001" FilePath="C:\WINDOWS\explorer.exe" FilePars="-np"/>
<Item FileName="regedit.exe" FileID="001" FilePath="C:\WINDOWS\regedit.exe" FilePars="-np"/>
</Root>
http://bbs.2ccc.com/topic.asp?topicid=352779