【函数】获取进程中的图标

欢迎加入全网最大Delphi 技术交流群 682628230

//作者:渣渣皮在网上的代码基础上完善的 2025.02.21

感谢未知的作者

Function GetProcessIDIcon(ProcessID: String; w: Word = 0): HICON;//根据进程ID获取图标
Var
hProcess: THandle;
FileName: Array[0..MAX_PATH] Of Char;
Begin
Result:=0;
hProcess:=OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, False, StrToInt(ProcessID));
If hProcess<>0 Then
Try
//GetModuleFileNameEx需要引用Winapi.PsAPI单元 //根据进程的ID获取进程的完整路径
If GetModuleFileNameEx(hProcess, 0, FileName, MAX_PATH)>0 Then
Begin
//方法1的ExtractIcon需要引用Winapi.ShellAPI单元
Result:=ExtractIcon(0, FileName, w); //w为图标的索引值,从0开始

//方法2的ExtractAssociatedIcon需要引用Winapi.ShellAPI单元
//Result:=ExtractAssociatedIcon(HInstance, FileName, w);//w为图标的索引值,从0开始
End;
Finally
CloseHandle(hProcess);
End;
End;

Procedure TForm1.Button1Click(Sender: TObject);
Var
Icon: TIcon;
IconIndex: Integer;
Begin
//在窗体上分别建立一个ImageList、Image、Edit
Icon:=TIcon.Create; //创建目标TIcon
Icon.Handle:=GetProcessIDIcon(Edit1.Text);
ImageList1.Clear; //清空所有图标
IconIndex:=ImageList1.AddIcon(Icon); //添加图标到ImageList中,返回索引值
ImageList1.GetIcon(IconIndex, Icon); // 获取索引值的图标
Image1.Picture.Assign(Icon); // 赋值给Image控件
End;
© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享