程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 通過修改注冊表修改文件圖標

通過修改注冊表修改文件圖標

編輯:關於C語言

在這裡簡單介紹一下怎麼通過修改注冊表來更換指定類型的文件圖標。
在注冊表中有一個名為HKEY_LOCAL_MACHINE的主鍵,在這個主鍵下會看到有好多以小數點開頭的子鍵,這些就是系統當前已經注冊的文件類型,如果再往下看的話你還會看到比較熟悉的".exe",".mp3"等等。這裡以exe文件類型為例,來介紹怎麼修改圖標。

首先定位到".exe"這個子鍵,點擊它(不要展開),會在右側看到它有一個默認的REG_SZ類型的表項,默認數值數據為exefile。找到這個之後,然後再定位到exefile這個子鍵(還是在HKEY_LOCAL_MACHINE中),展開他會看見他下面還有一個子鍵,名字是DefaultIcon(如果沒有就自己創建一下),這個DefaultIcon也會有一個默認的REG_SZ類型的表項,這個表項的內容就是圖標位置了,exefile下的這個默認是"%1",只要把這個改成圖標所在的路徑(比如"c:\test.ico")就可以更換圖標了。重啟一下資源管理器就會發現圖標已經換成你指定了圖標了,換回來的話只要把這個改成"%1"就好了。


以上講的是手動修改注冊表來修改文件圖標,接下來我們用C語言編程實現


首先簡單介紹一下相關的幾個操作注冊表的API函數(具體參數及各自含義在這裡不做贅述,讀者可自行查閱資料)。
RegCreateKey函數,用來創建一個注冊表鍵,如果該鍵已存在,則打開該項。
RegQueryValueEx函數,查詢指定表項的內容。
RegSetValueEx函數,設置指定表項的值。
RegCloseKey函數,用來釋放指定注冊鍵的句柄。


有了這些API函數,我們就可以編程來修改文件圖標了。
第一步:用RegCreateKey(HKEY_CLASSES_ROOT, lpFileType, &hKey)打開.exe子鍵(lpFileType為指向文件類型的字符串指針,也即是要打開注冊鍵的名稱,hKey是用來存放打開注冊鍵的句柄)。
第二步:用RegQueryValueEx(hKey, NULL, NULL, &dwType, (LPBYTE)tchBuffer, &dwBufLenth)獲取該類型的打開信息(hKey即注冊鍵句柄,dwType是用於裝載取回數據類型的一個變量,tchBuffer是存放鍵值的緩沖區,dwBufLenth指定獲取的最大長度)。
第三步:用RegCloseKey(hKey)關閉注冊鍵句柄(這很重要,不能忽略!!!!!)。
第四步:用RegCreateKey(HKEY_CLASSES_ROOT, tchRegPath, &hKey)打開exefile下的DefaultIcon子鍵(tchRegPath是他的位置,可由第二步得到的tchBuffer加上DefaultIcon組合得到)。
第四步:用RegSetValueEx(hKey, NULL, NULL, REG_SZ, (LPBYTE)lpIconPath, nIconPathLen)設置鍵值(lpIconPath是指向圖標路徑字符串的指針,nIconPathLen是路徑長度)。
第五步:用RegCloseKey(hKey)關閉注冊鍵句柄(這很重要,不能忽略!!!!!)。

至此,修改成功。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved