从EXE或DLL等中取ICO
来源:互联网 发布:向表输入数据 编辑:程序博客网 时间:2024/06/03 18:27
当你想要使用别的应用程序中的漂亮图标时,该怎么办呢?也许就会用到一些图标提取工具吧!那么,你知道它们是怎么实现的,想不想自己动手也做一个适合自己的图标提取工具呢?下面,就让我用我以前做过的一个工具<轻轻松松抓图标>来告诉你吧!它可以提取各种文件中的图标资源,并可将其保存为图标(ICO)、位图(BMP)两种格式。程序运行后界面如下: 图一 在上面的例程中,我整合出一个图标类CIcons和与之相配的一个位图类CDib,其中包括Icons.h、Icons.cpp、Dib.h和Dib.cpp四个文件。在你的工程中直接加入这四个文件后,调用其类涵数,既可做出你自己的图标工具来。
下面让我们来看看如何来具体用它们来实现:
1、 提取并显示出图标到左侧列表框中。
代码实现如下:
//读取各种资源内部图标并显示在左侧列表框中
//根据左侧图标列表,利用OnPaint()来更新右侧相应图标
//保存图标资源为ICO或BMP格式文件
下面让我们来看看如何来具体用它们来实现:
1、 提取并显示出图标到左侧列表框中。
代码实现如下:
//读取各种资源内部图标并显示在左侧列表框中
void CIconSnapDlg::OnOK() {CFileDialog fileDialog( TRUE,"*.ICO",NULL,NULL,"资源文件(*.ICO,*.BMP,*.EXE,*.DLL,*.ICL)|*.ICO;*.BMP;*.EXE;*.DLL;*.ICL||");if (fileDialog.DoModal() == IDOK) {szOpenFileName=fileDialog.GetPathName(); szOpenFileExtName= fileDialog.GetFileExt ();szOpenFileExtName.MakeLower ();m_List.ResetContent (); //选清空左侧图标列表框//读取并显示ICON文件 if(szOpenFileExtName =="ico") {lpIR=pIcons->ReadIconFromICOFile (szOpenFileName);HICON hIcon;hIcon=ExtractIcon(AfxGetInstanceHandle(),szOpenFileName,0); if(hIcon!=NULL)m_List.AddString (szOpenFileName);CStatic* pStatic = (CStatic*) GetDlgItem(IDC_ICONS); pStatic->SetIcon (hIcon);}else if(szOpenFileExtName == "bmp") //读取并显示BMP文件{ pIcons->IconImageFromBMPFile (szOpenFileName,&lpIR->IconImages[0],TRUE);HICON hIcon;hIcon=pIcons->MakeIconFromResource (&lpIR->IconImages [0]);if(hIcon!=NULL) m_List.AddString (szOpenFileName); CStatic* pStatic = (CStatic*) GetDlgItem(IDC_ICONS); pStatic->SetIcon (hIcon);} else //读取并显示EXE、DLL等资源文件{ HINSTANCE hLibrary; // Load the DLL/EXE - NOTE: must be a 32bit EXE/DLL for this to work if( (hLibrary = LoadLibraryEx( szOpenFileName, NULL, LOAD_LIBRARY_AS_DATAFILE )) == NULL ) { // Failed to load - abortMessageBox( szOpenFileName+ "文件载入错误,必须是WIN32的文件!", "错误", MB_OK );return; } // Store the info EDII.szFileName =szOpenFileName; EDII.hInstance = hLibrary; // Fill in the listbox with the icons available if( ! EnumResourceNames( EDII.hInstance, RT_GROUP_ICON, (ENUMRESNAMEPROC )MyEnumProcedure, (LPARAM)GetSafeHwnd()) ) {MessageBox( "列举图标资源名时出错!", "错误", MB_OK );return; }}m_List.SetCurSel (0);if( m_List.GetCount() == 0 ){MessageBox( "此文件中没有图标资源!", "错误", MB_OK );//无图标资源,置保存和复制按钮为无效状态m_Copy.EnableWindow (false);m_SaveAs.EnableWindow (false);return;} //有图标资源,置保存和复制按钮为有效状态m_Copy.EnableWindow (true);m_SaveAs.EnableWindow (true);//刷新调用OnPaint来显示图标InvalidateRect(NULL,TRUE);}}在OnPaint()涵数中加入下面代码用来具体显示提取出的图标或位图资源。
//根据左侧图标列表,利用OnPaint()来更新右侧相应图标
LPTSTR lpIconID;HICON hIcon;if((lpIconID=(LPTSTR)m_List.GetItemData(m_List.GetCurSel()))!=(LPTSTR)LB_ERR ){ if(szOpenFileExtName=="exe"||szOpenFileExtName=="dll"||szOpenFileExtName=="icl"){ hIcon=pIcons->GetIconFromInstance(EDII.hInstance,lpIconID); CStatic* pStatic = (CStatic*) GetDlgItem(IDC_ICONS); pStatic->SetIcon (hIcon);}}2、 如何将提取出的图标资源保存为Ico或Bmp格式。
//保存图标资源为ICO或BMP格式文件
void CIconSnapDlg::OnButtonSaveas() {LPTSTR lpIconID; CFileDialog fileDialog( FALSE,"*.ICO",NULL,NULL,"图标文件(*.ICO)|*.ICO|位图文件(*.BMP)|*.BMP||");if (fileDialog.DoModal() == IDOK) {szSaveFileName=fileDialog.GetPathName(); szSaveFileExtName= fileDialog.GetFileExt ();szSaveFileExtName.MakeLower ();if(szOpenFileExtName=="exe"||szOpenFileExtName=="dll"||szOpenFileExtName=="icl") if((lpIconID=(LPTSTR)m_List.GetItemData (m_List.GetCurSel()))!= (LPTSTR)LB_ERR) lpIR=pIcons->ReadIconFromEXEFile (szOpenFileName,lpIconID); if(szSaveFileExtName=="bmp"){ if(lpIR!=NULL && m_List.GetCount ()>0) {BeginWaitCursor();pIcons->IconImageToBMPFile (szSaveFileName,&lpIR->IconImages [0]);EndWaitCursor(); } else MessageBox( "没有可保存的图标资源!", "错误", MB_OK );}else if(szSaveFileExtName=="ico"){ if(lpIR!=NULL && m_List.GetCount ()>0) {BeginWaitCursor();pIcons->WriteIconToICOFile (lpIR,szSaveFileName);EndWaitCursor(); } else MessageBox( "没有可保存的图标资源!", "错误", MB_OK );}}}
- 从EXE或DLL等中取ICO
- WinAPI: ExtractIcon - 获取 EXE、DLL 或 ICO 文件中的图标
- (C++Builder)从DLL中导出变量为APP或EXE所用
- WPF生成dll,以及从dll中恢复exe
- 怎样把tlb编译进exe或dll中?
- delphi中从DLL,EXE,ICL中提取图标
- 二、从DLL中传递消息到EXE
- dumpbin lib.exe 从dll中导出lib文件
- 在window service中调用外部exe或.bat等
- 在window service中调用外部exe或.bat等
- DLL或exe破解步骤
- DLL或exe破解步骤
- 中了Viking,抓到CONFIG.EXE,NTDLL32.dll,webpnt.exe等
- 从EXE文件中提取音乐、图片等资源
- 再见avwgdmn.dll,LYLoadbr.exe,LYLoadar.exe,LYLoador.exe等
- Android拍照或从相册中取照片
- Jni从dll或so文件中获取信息
- auto.exe,LotusHlp.dll,xsufjt.dll,PTSShell.exe,LYLoader.exe,n1197201377k.exe等
- 这就是DELL??!!
- 你真的了解Ioc与AOP吗?(2)
- 你真的了解Ioc与AOP吗?(3)
- win 2k /nt 下如何彻底删除Oracle 9.*/8.*
- 你真的了解Ioc与AOP吗?(4)
- 从EXE或DLL等中取ICO
- 整合 Ajaxanywhere
- openlasz入门---openlaszlo环境的建立
- Transact SQL 常用语句以及函数
- ASP 如何读写一个文本文件
- 关于二维绘图时拾取某一直线的代码
- 程序员每天该做的事
- 凡人日记
- 操作INI文件