如果想得到windows中我的電腦或者近端分享等系統表徵圖可以有如下解決辦法。
方案一
用表徵圖提取軟體從c:\winnt\system32\SHELL32.dll或者C:\WINNT\Explorer.exe中提取出來然後加入到自己的程式中(路徑隨作業系統和安裝目錄不同而變化)這種方法的缺點是不同的作業系統的系統表徵圖有一些變化,比如說2003和2000的系統表徵圖就有很大變化,如果你提取的是2000的表徵圖,應用程式如果在2003下運行可能看起來有一些彆扭。
方案二
同樣是利用c:\winnt\system32\SHELL32檔案來提取,但是這次是利用註冊表和windows的函數來完成。代碼如下:
HICON CTestDlg::GetShellIcon(int nIndex)
{
HICON hIcon=NULL;
HKEY hkeyShellIcons;
//開啟註冊表,讀相應的表徵圖項目
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell I cons", 0,KEY_READ,&hkeyShellIcons)==ERROR_SUCCESS)
{
char szBuffer[MAX_PATH];
DWORD dwSize=MAX_PATH;
char szIndex[4];
sprintf(szIndex,"%d",nIndex);
if(RegQueryValueEx(hkeyShellIcons,szIndex,NULL,NULL,(LPBYTE)szBuffer,&dwSize)==ERROR_SUCCESS)
{
CString strFile,strIndex;
AfxExtractSubString(strFile,szBuffer,0,',');
AfxExtractSubString(strIndex,szBuffer,1,',');
ExtractIconEx(strFile,atoi(strIndex),NULL,&hIcon,1);
}
RegCloseKey(hkeyShellIcons);
}
if(!hIcon)
ExtractIconEx("SHELL32.DLL",nIndex,NULL,&hIcon,1);
return hIcon;
}
這種方法克服了第一種方法使用不靈活的缺點但是代碼量比較大。(index目錄在最後列出)
方案三
利用shell函數SHGetSpecialFolderLocation和SHGetFileInfo。代碼如下:
LPITEMIDLIST lpItemIDList;
SHFILEINFO shinfo;
SHGetSpecialFolderLocation (this->m_hWnd, CSIDL_NETWORK, &lpItemIDList);
SHGetFileInfo( (LPCTSTR)lpItemIDList,
NULL,
&shinfo,
sizeof(shinfo),
SHGFI_SYSICONINDEX | SHGFI_DISPLAYNAME | SHGFI_ICON| SHGFI_SMALLICON|SHGFI_PIDL);
這是shinfo中的icon和hicon儲存了得到的icon的值。
這種方法既有靈活性,代碼量也比較少,推薦使用。在SHGetSpecialFolderLocation中的第二個參數是想得到的圖片的CSIDL值。
【附表1:nindex值說明】
nIndex 意義 說明
0 預設表徵圖
1 預設的 .doc 表徵圖*
2 可執行檔表徵圖
3 關閉的檔案夾表徵圖
4 開啟的檔案夾表徵圖
5 5.25' 磁碟機表徵圖
6 3.5' 磁碟機表徵圖
7 可移動的磁碟機表徵圖
8 硬碟表徵圖
9 網路磁碟機表徵圖
10 斷開的網路磁碟機表徵圖
11 CD-ROM磁碟機表徵圖
12 RAM磁碟機表徵圖
13 整個網狀圖標
14 網路連接表徵圖 u
15 網路工作站表徵圖
16 本機印表機表徵圖 *
17 網狀圖標 u
18 網路工作群組表徵圖 u
19 程式組表徵圖 s
20 文檔表徵圖 s
21 設定表徵圖 s
22 尋找表徵圖 s
23 協助表徵圖 s
24 運行表徵圖 s
25 睡眠表徵圖 s
26 Docking Station 表徵圖 u
27 關機表徵圖 s
28 共用表徵圖 t
29 捷徑的箭頭表徵圖 t
30 大箭頭表徵圖 u
31 空資源回收筒表徵圖 *
32 滿的資源回收筒表徵圖 *
33 撥號網路表徵圖 *
34 案頭表徵圖
35 控制台表徵圖 *
36 程式組表徵圖 s
37 印表機檔案夾表徵圖 *
38 字型檔夾表徵圖 *
39 Windows旗幟表徵圖 * 軟體開發網
40 Audio CD 表徵圖
.
.
.
.49
後面標有符號的說明有特殊用法:
* 這些表徵圖可以在註冊表的其他地方的設定。
t 這些表徵圖必須是空白背景。
s 這些表徵圖將用在開始菜單上。
u 這些表徵圖可能並沒有使用或不能通過註冊表修改