/// Get registry values for ShellExtension void PropShell::GetContextRegValues() { CRegKeyEx reg; LONG retVal = 0; retVal = reg.Open(HKEY_CURRENT_USER, f_RegDir); if (retVal != ERROR_SUCCESS) { CString msg; msg.Format(_T("Failed to open registry key HKCU/%s:\n\t%d : %s"), f_RegDir, retVal, GetSysError(retVal).c_str()); LogErrorString(msg); return; } // Read bitmask for shell extension settings DWORD dwContextEnabled = reg.ReadDword(f_RegValueEnabled, 0); if (dwContextEnabled & CONTEXT_F_ENABLED) m_bContextAdded = TRUE; if (dwContextEnabled & CONTEXT_F_ADVANCED) m_bContextAdvanced = TRUE; if (dwContextEnabled & CONTEXT_F_SUBFOLDERS) m_bContextSubfolders = TRUE; }
/// Saves given path to registry for ShellExtension, and Context Menu settings void PropShell::SaveMergePath() { TCHAR temp[MAX_PATH] = {0}; LONG retVal = 0; GetModuleFileName(AfxGetInstanceHandle(), temp, MAX_PATH); CRegKeyEx reg; retVal = reg.Open(HKEY_CURRENT_USER, f_RegDir); if (retVal != ERROR_SUCCESS) { CString msg; msg.Format(_T("Failed to open registry key HKCU/%s:\n\t%d : %s"), f_RegDir, retVal, GetSysError(retVal).c_str()); LogErrorString(msg); return; } // Save path to WinMerge(U).exe retVal = reg.WriteString(f_RegValuePath, temp); if (retVal != ERROR_SUCCESS) { CString msg; msg.Format(_T("Failed to set registry value %s:\n\t%d : %s"), f_RegValuePath, retVal, GetSysError(retVal).c_str()); LogErrorString(msg); } // Determine bitmask for shell extension DWORD dwContextEnabled = reg.ReadDword(f_RegValueEnabled, 0); if (m_bContextAdded) dwContextEnabled |= CONTEXT_F_ENABLED; else dwContextEnabled &= ~CONTEXT_F_ENABLED; if (m_bContextAdvanced) dwContextEnabled |= CONTEXT_F_ADVANCED; else dwContextEnabled &= ~CONTEXT_F_ADVANCED; if (m_bContextSubfolders) dwContextEnabled |= CONTEXT_F_SUBFOLDERS; else dwContextEnabled &= ~CONTEXT_F_SUBFOLDERS; retVal = reg.WriteDword(f_RegValueEnabled, dwContextEnabled); if (retVal != ERROR_SUCCESS) { CString msg; msg.Format(_T("Failed to set registry value %s to %d:\n\t%d : %s"), f_RegValueEnabled, dwContextEnabled, retVal, GetSysError(retVal).c_str()); LogErrorString(msg); } }