我们经常在网上看到有关提取图标的共享软件或免费软件。喜欢编程的朋友们都在梦想自己能够动手做一个!使用可视化编程利器C++Builder可使你制作这样的软件变得非常轻松。
建立工程文件 首先启动C++Builder,新建一工程,在窗体上放置两个控件:“抽取”按钮SpeedButton1、“退出”按钮SpeedButton2。设一个ListView控件用来浏览抽取的图表信息、一个Image控件用来显示当前的图标信息和一个OpenDialog控件用来打开被选文件,它们的名称均不必改动。为了美观,读者还可以根据需要增加其它控件,做适当的润色。 取得和显示图标 双击SpeedButton控件,在Click事件中写如下代码: void_fastcall TForm1::SpeedButton1Click(TObject Sender) { TListItem Lst; if(OpenDialog1->Execute()) //打开被提取图标的文件 { FileName=OpenDialog1->FileName; FileName=FileName.UpperCase(); TempFile=FileName.SubString(1,FileName.AnsiPos("."))+"ICO"; //产生和备选文件同名的Ico图标文件名 HICON hIcon; //定义抽取的图标句柄 int Total =(int) ExtractIcon( Form1->Handle, FileName.c_str(), -1); //抽取图标:-1表示抽取所有图标并且将获得的图标总数存入变量Total ListView1->Items->Clear(); ImageList1->Clear(); for(int i=0;i { Icon = new TIcon(); hIcon = ExtractIcon( Form1->Handle, FileName.c_str(),i); Icon->Handle=hIcon; ImageList1->AddIcon(Icon); Lst=ListView1->Items->Add(); Lst->Caption="第"+IntToStr(i)+"号图标"; Lst->ImageIndex=i; } if(Total>0) { Icon->SaveToFile(TempFile); //将最后一个图标存入文件 Image1->Picture->LoadFromFile(TempFile); //将存入文件的图标显示 } } } 以下为退出按钮设置 void_fastcall TForm1::SpeedButton2Click(TObject Sender) { Close(); } 在编辑文档的头文件中定义:AnsiString TempFile,FileName;Ticon Icon;运行程序时,你所选定的程序的全部图标就在ListView控件中显示出来,最后一个图标在Image控件中显示出来,此时如果在ListView中单击图标,相应的信息也将在Image控件中显示。 经过以上的操作,被选文件的图标信息就被显示出来了。下面,我们讨论如何存储被选定的图标。 存储图标 为了不影响整个界面的美观,我们在Form上建立一个快捷选单,并在“存储图标”的Click事件中书写如下代码: void_fastcall TForm1::N1Click(TObject Sender) { if (InputQuery("提示信息", "存储文件名:", PutFile)) //弹出输入对话框 { if (PutFile.Length()>0) { if(PutFile.AnsiPos(".")<=0) { PutFile=PutFile+".Ico" ; } if(ListView1->Selected!=NULL) { HICON hIcon; Icon = new TIcon(); hIcon=ExtractIcon(Form1->Handle,FileName.c_str(),ListView1->Selected->Index); Icon->Handle=hIcon; Icon->SaveToFile(PutFile); Image1->Picture->LoadFromFile(PutFile); delete Icon; } } } } Windows下的执行文件,大部分都是资源信息与应用代码单独存放的,从这些资源文件中抽取图标信息只是很小的一个实例。如果要获取更多的信息,就需要调用API函数SHGetFileInfo。有兴趣的朋友可以用本文类似的思路进行更深一步的探讨,我想,编写一个汉化软件并非难事。 |
用C++ Builder获取应用程序图标
用C++ Builder获取应用程序图标