bool CPPageFormats::RegisterExt(CString ext, CString strLabel, bool fRegister) { CRegKey key; bool bSetValue; CString strProgID = _T("mplayerc") + ext; if(!fRegister) { if(fRegister != IsRegistered(ext)) SetFileAssociation (ext, strProgID, fRegister); key.Attach(HKEY_CLASSES_ROOT); key.RecurseDeleteKey(strProgID); return(true); } bSetValue = fRegister || (ERROR_SUCCESS != key.Open(HKEY_CLASSES_ROOT, strProgID + _T("\\shell\\open\\command"), KEY_READ)); // Create ProgID for this file type if(ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID)) return(false); if(ERROR_SUCCESS != key.SetStringValue(NULL, strLabel)) return(false); // Add to playlist option if(f_setContextFiles) { if(ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID + _T("\\shell\\enqueue"))) return(false); if(ERROR_SUCCESS != key.SetStringValue(NULL, ResStr(IDS_ADD_TO_PLAYLIST))) return(false); if(ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID + _T("\\shell\\enqueue\\command"))) return(false); if(bSetValue && (ERROR_SUCCESS != key.SetStringValue(NULL, GetEnqueueCommand()))) return(false); } else { key.Close(); key.Attach(HKEY_CLASSES_ROOT); key.RecurseDeleteKey(strProgID + _T("\\shell\\enqueue")); } // Play option if(ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID + _T("\\shell\\open"))) return(false); if(f_setContextFiles) { if(ERROR_SUCCESS != key.SetStringValue(NULL, ResStr(IDS_OPEN_WITH_MPC))) return(false); } else { if(ERROR_SUCCESS != key.SetStringValue(NULL, _T(""))) return(false); } if(ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID + _T("\\shell\\open\\command"))) return(false); if(bSetValue && (ERROR_SUCCESS != key.SetStringValue(NULL, GetOpenCommand()))) return(false); if(ERROR_SUCCESS != key.Create(HKEY_LOCAL_MACHINE, g_strRegisteredKey + _T("\\FileAssociations"))) return(false); if(ERROR_SUCCESS != key.SetStringValue(ext, strProgID)) return(false); if(f_setAssociatedWithIcon) { CString AppIcon = _T(""); TCHAR buff[_MAX_PATH]; CString mpciconlib = GetProgramDir() + _T("\\mpciconlib.dll"); if(FileExists(mpciconlib)) { int icon_index = GetIconIndex(ext); CString m_typeicon = mpciconlib; /* icon_index value -1 means no icon was found in the iconlib for the file extension */ if((icon_index >= 0) && ExtractIcon(AfxGetApp()->m_hInstance,(LPCWSTR)m_typeicon, icon_index)) { m_typeicon = "\""+mpciconlib+"\""; AppIcon.Format(_T("%s,%d"), m_typeicon, icon_index); } } /* no icon was found for the file extension, so use MPC's icon */ if((AppIcon.IsEmpty()) && (::GetModuleFileName(AfxGetInstanceHandle(), buff, MAX_PATH))) { AppIcon = buff; AppIcon = "\""+AppIcon+"\""; AppIcon += _T(",0"); } if(ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID + _T("\\DefaultIcon"))) return(false); if(bSetValue && (ERROR_SUCCESS != key.SetStringValue(NULL, AppIcon))) return(false); } else { key.Attach(HKEY_CLASSES_ROOT); key.RecurseDeleteKey(strProgID + _T("\\DefaultIcon")); } if(fRegister != IsRegistered(ext)) SetFileAssociation (ext, strProgID, fRegister); return(true); }
bool CFileAssoc::Register(CString ext, CString strLabel, bool bRegister, bool bRegisterContextMenuEntries, bool bAssociatedWithIcon) { CRegKey key; CString strProgID = PROGID + ext; if (!bRegister) { if (bRegister != IsRegistered(ext)) { SetFileAssociation(ext, strProgID, bRegister); } key.Attach(HKEY_CLASSES_ROOT); key.RecurseDeleteKey(strProgID); return true; } else { // Create ProgID for this file type if (ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID) || ERROR_SUCCESS != key.SetStringValue(NULL, strLabel)) { return false; } // Add to playlist option if (bRegisterContextMenuEntries) { if (ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID + _T("\\shell\\enqueue")) || ERROR_SUCCESS != key.SetStringValue(NULL, ResStr(IDS_ADD_TO_PLAYLIST)) || ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID + _T("\\shell\\enqueue\\command")) || ERROR_SUCCESS != key.SetStringValue(NULL, strEnqueueCommand)) { return false; } } else { key.Close(); key.Attach(HKEY_CLASSES_ROOT); key.RecurseDeleteKey(strProgID + _T("\\shell\\enqueue")); } // Play option if (ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID + _T("\\shell\\open"))) { return false; } if (bRegisterContextMenuEntries) { if (ERROR_SUCCESS != key.SetStringValue(NULL, ResStr(IDS_OPEN_WITH_MPC))) { return false; } } else { if (ERROR_SUCCESS != key.SetStringValue(NULL, _T(""))) { return false; } } if (ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID + _T("\\shell\\open\\command")) || ERROR_SUCCESS != key.SetStringValue(NULL, strOpenCommand)) { return false; } if (ERROR_SUCCESS != key.Create(HKEY_LOCAL_MACHINE, strRegAppFileAssocKey) || key.SetStringValue(ext, strProgID)) { return false; } if (bAssociatedWithIcon) { CString appIcon; if (m_hIconLib) { int iconIndex = GetIconIndex(ext); /* icon_index value -1 means no icon was found in the iconlib for the file extension */ if (iconIndex >= 0 && ExtractIcon(AfxGetApp()->m_hInstance, m_iconLibPath, iconIndex)) { appIcon.Format(_T("\"%s\",%d"), m_iconLibPath, iconIndex); } } /* no icon was found for the file extension, so use MPC's icon */ if (appIcon.IsEmpty()) { appIcon = "\"" + GetProgramPath(true) + "\",0"; } if (ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID + _T("\\DefaultIcon")) || ERROR_SUCCESS != key.SetStringValue(NULL, appIcon)) { return false; } } else { key.Attach(HKEY_CLASSES_ROOT); key.RecurseDeleteKey(strProgID + _T("\\DefaultIcon")); } if (bRegister != IsRegistered(ext)) { SetFileAssociation(ext, strProgID, bRegister); } return true; } }
bool CPPageFormats::RegisterExt(CString ext, bool fRegister, CString PerceivedType) { CRegKey key; bool bSetValue; CString strProgID = _T("SPlayer") + ext; CString strLabel = _T(""); if(ext == _T(".rar")){ return true; } if(fRegister){ //为保证成功注册清理垃圾 //AfxGetMyApp()->DelRegTree(HKEY_CLASSES_ROOT, ext); AfxGetMyApp()->DelRegTree(HKEY_CLASSES_ROOT, _T("KMPlayer") + ext); AfxGetMyApp()->DelRegTree(HKEY_CLASSES_ROOT, _T("QQPlayer") + ext); AfxGetMyApp()->DelRegTree(HKEY_CLASSES_ROOT, _T("stormplayer") + ext); AfxGetMyApp()->DelRegTree(HKEY_CLASSES_ROOT, _T("RealPlayer") + ext+L".6"); AfxGetMyApp()->DelRegTree(HKEY_CLASSES_ROOT, _T("RealPlayer") + ext+L".10"); AfxGetMyApp()->DelRegTree(HKEY_CLASSES_ROOT, _T("Xmp") + ext); } CString path, fn, cmd; if(!MakeRegParams(ext, path, fn, strLabel, cmd)) return(false); strLabel = GetFileTypeName(ext); if (ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, ext)) return(false); if (!PerceivedType.IsEmpty()) { key.SetStringValue (L"PerceivedType", PerceivedType); } BOOL bIsRAR = (ext.Right(3).MakeLower() == _T("rar")); if (bIsRAR) return true; if(!fRegister && !bIsRAR) { if(fRegister != IsRegistered(ext)) SetFileAssociation (ext, strProgID, fRegister); key.Attach(HKEY_CLASSES_ROOT); key.RecurseDeleteKey(strProgID); return(true); } bSetValue = fRegister || (ERROR_SUCCESS != key.Open(HKEY_CLASSES_ROOT, strProgID + _T("\\shell\\open\\command"), KEY_READ)); // Create ProgID for this file type if(ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID)) return(false); if(ERROR_SUCCESS != key.SetStringValue(NULL, strLabel)) return(false); // Add to playlist option if(f_setContextFiles || bIsRAR) { if(ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID + _T("\\shell\\enqueue"))) return(false); if(ERROR_SUCCESS != key.SetStringValue(NULL, ResStr(IDS_ADD_TO_PLAYLIST))) return(false); if(ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID + _T("\\shell\\enqueue\\command"))) return(false); if(bSetValue && (ERROR_SUCCESS != key.SetStringValue(NULL, GetEnqueueCommand()))) return(false); } else { key.Attach(HKEY_CLASSES_ROOT); key.RecurseDeleteKey(strProgID + _T("\\shell\\enqueue")); } // Play option if(ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID + _T("\\shell\\open"))) return(false); if(f_setContextFiles || bIsRAR) { if(ERROR_SUCCESS != key.SetStringValue(NULL, ResStr(IDS_OPEN_WITH_MPC))) return(false); } else { if(ERROR_SUCCESS != key.SetStringValue(NULL, _T(""))) return(false); } if(ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID + _T("\\shell\\open\\command"))) return(false); if(bSetValue && (ERROR_SUCCESS != key.SetStringValue(NULL, GetOpenCommand()))) return(false); // Play option if(ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID + _T("\\shell\\openewnd"))) return(false); if(f_setContextFiles || bIsRAR) { if(ERROR_SUCCESS != key.SetStringValue(NULL, ResStr(IDS_OPEN_WITH_MPC_IN_NEW_WND))) return(false); } else { if(ERROR_SUCCESS != key.SetStringValue(NULL, _T(""))) return(false); } if(ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID + _T("\\shell\\openewnd\\command"))) return(false); if(bSetValue && (ERROR_SUCCESS != key.SetStringValue(NULL, GetOpenCommand(true)))) return(false); if(ERROR_SUCCESS != key.Create(HKEY_LOCAL_MACHINE, g_strRegisteredKey + _T("\\FileAssociations"))) return(false); if(ERROR_SUCCESS != key.SetStringValue(ext, strProgID)) return(false); if(f_setAssociatedWithIcon && !bIsRAR) { CString AppIcon = GetFileIcon(ext); TCHAR buff[MAX_PATH]; if((AppIcon.IsEmpty()) && (::GetModuleFileName(AfxGetInstanceHandle(), buff, MAX_PATH))) { AppIcon = buff; AppIcon = "\""+AppIcon+"\""; AppIcon += _T(",0"); } if(ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID + _T("\\DefaultIcon"))) return(false); if(bSetValue && (ERROR_SUCCESS != key.SetStringValue(NULL, AppIcon))) return(false); } else { key.Attach(HKEY_CLASSES_ROOT); key.RecurseDeleteKey(strProgID + _T("\\DefaultIcon")); } if (fRegister && !bIsRAR) SetFileAssociation(ext, strProgID, fRegister); return(true); }
bool CFileAssoc::Register(CString ext, CString strLabel, bool bRegister, bool bRegisterContextMenuEntries, bool bAssociatedWithIcon) { CRegKey key; CString strProgID = PROGID + ext; if (!bRegister) { // On Windows 8, an app can't set itself as the default handler for a format if (!SysVersion::Is8OrLater() && bRegister != IsRegistered(ext)) { SetFileAssociation(ext, strProgID, bRegister); } key.Attach(HKEY_CLASSES_ROOT); key.RecurseDeleteKey(strProgID); if (ERROR_SUCCESS == key.Open(HKEY_LOCAL_MACHINE, m_strRegAppFileAssocKey)) { key.DeleteValue(ext); } return true; } else { // Create ProgID for this file type if (ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID) || ERROR_SUCCESS != key.SetStringValue(nullptr, strLabel)) { return false; } if (m_bNoRecentDocs) { key.SetStringValue(_T("NoRecentDocs"), _T("")); } else { key.DeleteValue(_T("NoRecentDocs")); } CString appIcon = "\"" + GetProgramPath(true) + "\",0"; // Add to playlist option if (bRegisterContextMenuEntries) { if (ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID + _T("\\shell\\enqueue")) || ERROR_SUCCESS != key.SetStringValue(nullptr, ResStr(IDS_ADD_TO_PLAYLIST)) || ERROR_SUCCESS != key.SetStringValue(_T("Icon"), appIcon) || ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID + _T("\\shell\\enqueue\\command")) || ERROR_SUCCESS != key.SetStringValue(nullptr, m_strEnqueueCommand)) { return false; } } else { key.Close(); key.Attach(HKEY_CLASSES_ROOT); key.RecurseDeleteKey(strProgID + _T("\\shell\\enqueue")); } // Play option if (ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID + _T("\\shell\\open"))) { return false; } if (bRegisterContextMenuEntries) { if (ERROR_SUCCESS != key.SetStringValue(nullptr, ResStr(IDS_OPEN_WITH_MPC)) || ERROR_SUCCESS != key.SetStringValue(_T("Icon"), appIcon)) { return false; } } else { if (ERROR_SUCCESS != key.SetStringValue(nullptr, _T("")) || ERROR_SUCCESS != key.SetStringValue(_T("Icon"), _T(""))) { return false; } } if (ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID + _T("\\shell\\open\\command")) || ERROR_SUCCESS != key.SetStringValue(nullptr, m_strOpenCommand)) { return false; } if (ERROR_SUCCESS != key.Create(HKEY_LOCAL_MACHINE, m_strRegAppFileAssocKey) || key.SetStringValue(ext, strProgID)) { return false; } if (bAssociatedWithIcon) { if (auto iconLib = GetIconLib()) { int iconIndex = iconLib->GetIconIndex(ext); /* icon_index value -1 means no icon was found in the iconlib for the file extension */ if (iconIndex >= 0 && ExtractIcon(AfxGetApp()->m_hInstance, m_iconLibPath, iconIndex)) { appIcon.Format(_T("\"%s\",%d"), m_iconLibPath, iconIndex); } } if (ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID + _T("\\DefaultIcon")) || ERROR_SUCCESS != key.SetStringValue(nullptr, appIcon)) { return false; } } else { key.Close(); key.Attach(HKEY_CLASSES_ROOT); key.RecurseDeleteKey(strProgID + _T("\\DefaultIcon")); } // On Windows 8, an app can't set itself as the default handler for a format if (!SysVersion::Is8OrLater() && bRegister != IsRegistered(ext)) { SetFileAssociation(ext, strProgID, bRegister); } return true; } }