void SavePanelPath(UInt32 panel, const UString &path) { NSynchronization::CCriticalSectionLock lock(g_CS); CKey key; key.Create(HKEY_CURRENT_USER, kCUBasePath); key.SetValue(GetPanelPathName(panel), path); }
static void SetRegUInt32(CKey &key, const TCHAR *name, UInt32 value) { if (value == (UInt32)-1) key.DeleteValue(name); else key.SetValue(name, value); }
static void SetRegString(CKey &key, const WCHAR *name, const UString &value) { if (value.IsEmpty()) key.DeleteValue(name); else key.SetValue(name, value); }
static void SaveOption(const TCHAR *value, bool enabled) { NSynchronization::CCriticalSectionLock lock(g_RegistryOperationsCriticalSection); CKey optionsKey; optionsKey.Create(HKEY_CURRENT_USER, GetKeyPath(kOptionsInfoKeyName)); optionsKey.SetValue(value, enabled); }
static void SaveValue(const TCHAR *value, UInt32 valueToWrite) { NSynchronization::CCriticalSectionLock lock(g_RegistryOperationsCriticalSection); CKey optionsKey; optionsKey.Create(HKEY_CURRENT_USER, GetKeyPath(kOptionsInfoKeyName)); optionsKey.SetValue(value, valueToWrite); }
static void AddContextMenuHandlerCommon(const CSysString &keyName) { DeleteContextMenuHandlerCommon(keyName); NSynchronization::CCriticalSectionLock lock(g_RegistryOperationsCriticalSection); CKey key; key.Create(HKEY_CLASSES_ROOT, GetFullContextMenuKeyName(keyName)); key.SetValue(NULL, kExtensionCLSID); }
static void AddDragDropMenuHandlerCommon(const CSysString &keyName) { DeleteDragDropMenuHandlerCommon(keyName); NSynchronization::CCriticalSectionLock lock(g_CS); CKey key; key.Create(HKEY_CLASSES_ROOT, GetFullDragDropMenuKeyName(keyName)); key.SetValue(NULL, kExtensionCLSID); }
LONG SetValue(HKEY parentKey, LPCTSTR keyName, LPCTSTR valueName, LPCTSTR value) { MYASSERT(value != NULL); CKey key; LONG res = key.Create(parentKey, keyName); if (res == ERROR_SUCCESS) res = key.SetValue(valueName, value); return res; }
LONG CKey::SetKeyValue(LPCTSTR keyName, LPCTSTR valueName, LPCTSTR value) throw() { MYASSERT(value != NULL); CKey key; LONG res = key.Create(_object, keyName); if (res == ERROR_SUCCESS) res = key.SetValue(valueName, value); return res; }
void SaveExtractionInfo(const NExtract::CInfo &info) { NSynchronization::CCriticalSectionLock lock(g_RegistryOperationsCriticalSection); CKey extractionKey; extractionKey.Create(HKEY_CURRENT_USER, GetKeyPath(kExtractionKeyName)); extractionKey.RecurseDeleteKey(kExtractionPathHistoryKeyName); { CKey pathHistoryKey; pathHistoryKey.Create(extractionKey, kExtractionPathHistoryKeyName); for(int i = 0; i < info.Paths.Size(); i++) { wchar_t numberString[16]; ConvertUInt64ToString(i, numberString); pathHistoryKey.SetValue(numberString, info.Paths[i]); } } extractionKey.SetValue(kExtractionExtractModeValueName, UInt32(info.PathMode)); extractionKey.SetValue(kExtractionOverwriteModeValueName, UInt32(info.OverwriteMode)); extractionKey.SetValue(kExtractionShowPasswordValueName, info.ShowPassword); }
void CWindowInfo::Save() const { NSynchronization::CCriticalSectionLock lock(g_CS); CKey key; key.Create(HKEY_CURRENT_USER, kCUBasePath); { Byte buf[kWindowPositionHeaderSize]; Set32(buf, rect.left); Set32(buf + 4, rect.top); Set32(buf + 8, rect.right); Set32(buf + 12, rect.bottom); SetBool(buf + 16, maximized); key.SetValue(kPositionValueName, buf, kWindowPositionHeaderSize); } { Byte buf[kPanelsInfoHeaderSize]; Set32(buf, numPanels); Set32(buf + 4, currentPanel); Set32(buf + 8, splitterPos); key.SetValue(kPanelsInfoValueName, buf, kPanelsInfoHeaderSize); } }
void AddShellExtensionInfo(const CSysString &extension, const UString &programTitle, const UString &programOpenCommand, const UString &iconPath, int iconIndex, const void *shellNewData, int shellNewDataSize) { DeleteShellExtensionKey(extension); DeleteShellExtensionProgramKey(extension); NSynchronization::CCriticalSectionLock lock(g_CriticalSection); CSysString programKeyName = GetExtProgramKeyName(extension); { CKey extKey; extKey.Create(HKEY_CLASSES_ROOT, GetExtensionKeyName(extension)); extKey.SetValue(NULL, programKeyName); if (shellNewData != NULL) { CKey shellNewKey; shellNewKey.Create(extKey, kShellNewKeyName); shellNewKey.SetValue(kShellNewDataValueName, shellNewData, shellNewDataSize); } } CKey programKey; programKey.Create(HKEY_CLASSES_ROOT, programKeyName); programKey.SetValue(NULL, programTitle); { CKey iconKey; iconKey.Create(programKey, kDefaultIconKeyName); UString iconPathFull = iconPath; if (iconIndex >= 0) { iconPathFull += L","; wchar_t s[32]; ConvertUInt64ToString((UInt64)iconIndex, s); iconPathFull += s; } iconKey.SetValue(NULL, iconPathFull); } CKey shellKey; shellKey.Create(programKey, kShellKeyName); shellKey.SetValue(NULL, TEXT("")); CKey openKey; openKey.Create(shellKey, kOpenKeyName); openKey.SetValue(NULL, TEXT("")); CKey commandKey; commandKey.Create(openKey, kCommandKeyName); commandKey.SetValue(NULL, programOpenCommand); }
void WriteInternalAssociations(const CObjectVector<CExtInfo> &items) { NSynchronization::CCriticalSectionLock lock(g_CriticalSection); CKey mainKey; mainKey.Create(HKEY_CURRENT_USER, kCUKeyPath); mainKey.RecurseDeleteKey(kAssociations); CKey associationsKey; associationsKey.Create(mainKey, kAssociations); for(int i = 0; i < items.Size(); i++) { const CExtInfo &extInfo = items[i]; CKey key; key.Create(associationsKey, GetSystemString(extInfo.Ext)); key.SetValue(kExtPlugins, JoinStrings(extInfo.Plugins)); // key.SetValue(kExtEnabled, extInfo.Enabled); } }
void CListViewInfo::Save(const UString &id) const { const UInt32 dataSize = kListViewHeaderSize + kColumnInfoSize * Columns.Size(); CByteArr buf(dataSize); Set32(buf, kListViewVersion); Set32(buf + 4, SortID); SetBool(buf + 8, Ascending); FOR_VECTOR (i, Columns) { const CColumnInfo &column = Columns[i]; Byte *p = buf + kListViewHeaderSize + i * kColumnInfoSize; Set32(p, column.PropID); SetBool(p + 4, column.IsVisible); Set32(p + 8, column.Width); } { NSynchronization::CCriticalSectionLock lock(g_CS); CKey key; key.Create(HKEY_CURRENT_USER, kCulumnsKeyName); key.SetValue(GetSystemString(id), (const Byte *)buf, dataSize); } }
LONG SetContextMenuHandler(bool setMode, const UString &path, UInt32 wow) { // NSynchronization::CCriticalSectionLock lock(g_CS); INIT_REG_WOW LONG res; { CSysString s = TEXT("CLSID\\"); s += k_Clsid; if (setMode) { { CKey key; res = MyCreateKey(key, HKEY_CLASSES_ROOT, s, wow); if (res == ERROR_SUCCESS) { key.SetValue(NULL, k_ShellExtName); CKey keyInproc; res = MyCreateKey(keyInproc, key, k_Inproc, wow); if (res == ERROR_SUCCESS) { res = keyInproc.SetValue(NULL, path); keyInproc.SetValue(TEXT("ThreadingModel"), TEXT("Apartment")); } } } { CKey key; if (MyCreateKey(key, HKEY_LOCAL_MACHINE, k_Approved, wow) == ERROR_SUCCESS) key.SetValue(k_Clsid, k_ShellExtName); } } else { CSysString s2 = s; s2.AddAscii("\\InprocServer32"); MyRegistry_DeleteKey_HKCR(s2, wow); res = MyRegistry_DeleteKey_HKCR(s, wow); } } // shellex items probably are shared beween 32-bit and 64-bit apps. So we don't delete items for delete operation. if (setMode) for (unsigned i = 0; i < 2; i++) { for (unsigned k = 0; k < ARRAY_SIZE(k_shellex_Prefixes); k++) { CSysString s = k_shellex_Prefixes[k]; s += (i == 0 ? k_KeyPostfix_ContextMenu : k_KeyPostfix_DragDrop); if (k_shellex_Statuses[i][k]) { CKey key; MyCreateKey(key, HKEY_CLASSES_ROOT, s, wow); key.SetValue(NULL, k_Clsid); } else MyRegistry_DeleteKey_HKCR(s, wow); } } return res; }
void SaveRegEditor(const UString &editorPath) { CKey key; key.Create(HKEY_CURRENT_USER, kCU_FMPath); key.SetValue(kEditor, editorPath); }
LONG AddShellExtensionInfo(HKEY hkey, const CSysString &ext, const UString &programTitle, const UString &programOpenCommand, const UString &iconPath, int iconIndex // , const void *shellNewData, int shellNewDataSize ) { LONG res = 0; DeleteShellExtensionInfo(hkey, ext); // NSynchronization::CCriticalSectionLock lock(g_CriticalSection); CSysString programKeyName; { CSysString ext2 = ext; if (iconIndex < 0) ext2 = TEXT("*"); programKeyName = GetExtProgramKeyName(ext2); } { CKey extKey; res = extKey.Create(hkey, GetExtKeyPath(hkey, ext)); extKey.SetValue(NULL, programKeyName); /* if (shellNewData != NULL) { CKey shellNewKey; shellNewKey.Create(extKey, kShellNewKeyName); shellNewKey.SetValue(kShellNewDataValueName, shellNewData, shellNewDataSize); } */ } CKey programKey; programKey.Create(hkey, GetFullKeyPath(hkey, programKeyName)); programKey.SetValue(NULL, programTitle); { CKey iconKey; UString iconPathFull = iconPath; if (iconIndex < 0) iconIndex = 0; // if (iconIndex >= 0) { iconPathFull += L','; wchar_t s[16]; ConvertUInt32ToString((UInt32)iconIndex, s); iconPathFull += s; } iconKey.Create(programKey, kDefaultIconKeyName); iconKey.SetValue(NULL, iconPathFull); } CKey shellKey; shellKey.Create(programKey, kShellKeyName); shellKey.SetValue(NULL, TEXT("")); CKey openKey; openKey.Create(shellKey, kOpenKeyName); openKey.SetValue(NULL, TEXT("")); CKey commandKey; commandKey.Create(openKey, kCommandKeyName); commandKey.SetValue(NULL, programOpenCommand); return res; }
void SaveRegLang(const UString &langFile) { CKey key; key.Create(HKEY_CURRENT_USER, kCUBasePath); key.SetValue(kLangValueName, langFile); }
static void Key_Set_BoolPair(CKey &key, LPCTSTR name, const CBoolPair &b) { if (b.Def) key.SetValue(name, b.Val); }
void SaveUi32Val(const TCHAR *name, UInt32 value) { CKey key; key.Create(HKEY_CURRENT_USER, kCUBasePath); key.SetValue(name, value); }
static void SaveOption(const TCHAR *value, bool enabled) { CKey key; key.Create(HKEY_CURRENT_USER, kCU_FMPath); key.SetValue(value, enabled); }