設定指定型別檔案關聯圖示 登錄檔檔案關聯,圖示關聯
void RegeditFileToSystem(CString strApplication, CString sFileType,CString sIconFile, CString strDescription /*= _T("")*/) //sFileType關聯的.file檔案 { CString strRunKey; strRunKey.Format("%s_auto_open",sFileType.Right(sFileType.GetLength()-1)); HKEY hKey; if (ERROR_SUCCESS == ::RegOpenKey(HKEY_CLASSES_ROOT,_T(""), &hKey)) { HKEY hTempKey; if (ERROR_SUCCESS == ::RegCreateKey(hKey,sFileType,&hTempKey)) { if (ERROR_SUCCESS != ::RegSetValue(hTempKey,_T(""),REG_SZ,strRunKey,sizeof(DWORD))) { AfxMessageBox(_T("操作登錄檔錯誤")); ::RegCloseKey(hKey); return; } } } ::RegCloseKey(hKey);
HKEY hRunKey; if (RegOpenKey( HKEY_CLASSES_ROOT, strRunKey, &hRunKey ) != ERROR_SUCCESS ) { if (RegCreateKey( HKEY_CLASSES_ROOT, strRunKey, &hRunKey ) != ERROR_SUCCESS ) { ASSERT(FALSE); RegCloseKey( hRunKey ); return; } } if (strDescription.IsEmpty() == false) RegSetValue( hRunKey, _T(""), REG_SZ, strDescription, strDescription.GetLength()+1 ) ;
if (sIconFile.IsEmpty()) { ::RegDeleteKey(hRunKey,_T("DefaultIcon")); } else { HKEY hIconKey; if (ERROR_SUCCESS == ::RegCreateKey(hRunKey,_T("DefaultIcon"),&hIconKey)) { CString sIconValue; if (sIconFile.IsEmpty()) sIconValue.Format( _T("\"%s\",3"), strApplication ); else sIconValue = sIconFile; RegSetValue( hIconKey, _T(""), REG_SZ, sIconValue, sIconValue.GetLength()+1 ) ; } }
HKEY hShellKey; if (ERROR_SUCCESS == ::RegCreateKey(hRunKey,_T("shell"),&hShellKey)) { HKEY hOpenKey; if (ERROR_SUCCESS == ::RegCreateKey(hShellKey,_T("open"),&hOpenKey)) { HKEY hCommandKey; if (ERROR_SUCCESS == ::RegCreateKey(hOpenKey,_T("command"),&hCommandKey)) { CString strExePath; strExePath.Format( _T("\"%s\" \"%%1\""), strApplication ) ; if (ERROR_SUCCESS != ::RegSetValue(hCommandKey,_T(""),REG_SZ,strExePath,sizeof(DWORD))) { AfxMessageBox(_T("操作登錄檔錯誤")); ASSERT(FALSE); } } } }
RegCloseKey( hRunKey ); }
軟體關聯2種格式檔案 *.cusa *.cusb, 2種格式檔案都用exe開啟,2種檔案關聯圖示顯示分別設定2個檔案圖示
請在資源下載測試樣例