static bool WriteUninstallerRegistryInfo(HKEY hkey) { bool ok = true; ScopedMem<WCHAR> installedExePath(GetInstalledExePath()); ScopedMem<WCHAR> installDate(GetInstallDate()); ScopedMem<WCHAR> installDir(path::GetDir(installedExePath)); ScopedMem<WCHAR> uninstallCmdLine(str::Format(L"\"%s\"", ScopedMem<WCHAR>(GetUninstallerPath()))); ok &= WriteRegStr(hkey, REG_PATH_UNINST, DISPLAY_ICON, installedExePath); ok &= WriteRegStr(hkey, REG_PATH_UNINST, DISPLAY_NAME, APP_NAME_STR); ok &= WriteRegStr(hkey, REG_PATH_UNINST, DISPLAY_VERSION, CURR_VERSION_STR); // Windows XP doesn't allow to view the version number at a glance, // so include it in the DisplayName if (!IsVistaOrGreater()) ok &= WriteRegStr(hkey, REG_PATH_UNINST, DISPLAY_NAME, APP_NAME_STR L" " CURR_VERSION_STR); DWORD size = GetDirSize(gGlobalData.installDir) / 1024; ok &= WriteRegDWORD(hkey, REG_PATH_UNINST, ESTIMATED_SIZE, size); ok &= WriteRegStr(hkey, REG_PATH_UNINST, INSTALL_DATE, installDate); ok &= WriteRegStr(hkey, REG_PATH_UNINST, INSTALL_LOCATION, installDir); ok &= WriteRegDWORD(hkey, REG_PATH_UNINST, NO_MODIFY, 1); ok &= WriteRegDWORD(hkey, REG_PATH_UNINST, NO_REPAIR, 1); ok &= WriteRegStr(hkey, REG_PATH_UNINST, PUBLISHER, TEXT(PUBLISHER_STR)); ok &= WriteRegStr(hkey, REG_PATH_UNINST, UNINSTALL_STRING, uninstallCmdLine); ok &= WriteRegStr(hkey, REG_PATH_UNINST, URL_INFO_ABOUT, L"http://www.sumatrapdfreader.org/"); ok &= WriteRegStr(hkey, REG_PATH_UNINST, URL_UPDATE_INFO, L"http://www.sumatrapdfreader.org/news.html"); return ok; }
static bool WriteUninstallerRegistryInfo(HKEY hkey) { bool success = true; ScopedMem<WCHAR> uninstallerPath(GetUninstallerPath()); ScopedMem<WCHAR> installedExePath(GetInstalledExePath()); ScopedMem<WCHAR> installDate(GetInstallDate()); ScopedMem<WCHAR> installDir(path::GetDir(installedExePath)); success &= WriteRegStr(hkey, REG_PATH_UNINST, DISPLAY_ICON, installedExePath); success &= WriteRegStr(hkey, REG_PATH_UNINST, DISPLAY_NAME, TAPP); success &= WriteRegStr(hkey, REG_PATH_UNINST, DISPLAY_VERSION, CURR_VERSION_STR); // Windows XP doesn't allow to view the version number at a glance, // so include it in the DisplayName if (!IsVistaOrGreater()) success &= WriteRegStr(hkey, REG_PATH_UNINST, DISPLAY_NAME, TAPP L" " CURR_VERSION_STR); DWORD size = GetDirSize(gGlobalData.installDir) / 1024; success &= WriteRegDWORD(hkey, REG_PATH_UNINST, ESTIMATED_SIZE, size); success &= WriteRegStr(hkey, REG_PATH_UNINST, INSTALL_DATE, installDate); success &= WriteRegStr(hkey, REG_PATH_UNINST, INSTALL_LOCATION, installDir); success &= WriteRegDWORD(hkey, REG_PATH_UNINST, NO_MODIFY, 1); success &= WriteRegDWORD(hkey, REG_PATH_UNINST, NO_REPAIR, 1); success &= WriteRegStr(hkey, REG_PATH_UNINST, PUBLISHER, TEXT(PUBLISHER_STR)); success &= WriteRegStr(hkey, REG_PATH_UNINST, UNINSTALL_STRING, uninstallerPath); success &= WriteRegStr(hkey, REG_PATH_UNINST, URL_INFO_ABOUT, L"http://blog.kowalczyk.info/software/sumatrapdf/"); success &= WriteRegStr(hkey, REG_PATH_UNINST, URL_UPDATE_INFO, L"http://blog.kowalczyk.info/software/sumatrapdf/news.html"); return success; }
/* #FN# Called when the user clicks the OK button */ void /* #AS# Nothing */ CFileAssociationsDlg:: OnOK() { CButton *pButton = NULL; for( int i = 0; i < m_nFileExtInfoNo; i++ ) { _ClickButton( m_pFileExtInfo[ i ].nCtrlID, m_ulFileAssociations, m_pFileExtInfo[ i ].dwRegFlag ); } /* Write dialog status only if necessary */ if( m_ulFileAssociations != g_Misc.ulFileAssociations ) { g_Misc.ulFileAssociations = m_ulFileAssociations; WriteRegDWORD( NULL, REG_FILE_ASSOCIATIONS, g_Misc.ulFileAssociations ); WriteRegFileExt( g_Misc.ulFileAssociations, m_szHomeDir, g_szCmdLine ); } if( m_ulMiscState != g_Misc.ulState ) { g_Misc.ulState = m_ulMiscState; WriteRegDWORD( NULL, REG_MISC_STATE, g_Misc.ulState ); } CCommonDlg::OnOK(); } /* #OF# CFileAssociationsDlg::OnOK */
/* #FN# Sets a 'dont show' flag if it's requested */ void /* #AS# Nothing */ CWarningDlg:: SaveDontShowFlag() { if( _GetChkBttn( IDC_WARNING_NOSHOW ) ) { WriteRegDWORD( NULL, REG_DONT_SHOW, (g_Misc.ulDontShow |= m_nWarningFlag) ); } } /* #OF# CWarningDlg::SaveDontShowFlag */
/* #FN# Called when the user clicks the OK button */ void /* #AS# Nothing */ CJoystickDlg:: OnOK() { BOOL bChanged = FALSE; if( m_ulInputState != g_Input.ulState ) { g_Input.ulState = m_ulInputState; WriteRegDWORD( NULL, REG_INPUT_STATE, g_Input.ulState ); } if( m_nAutoMode != g_Input.Joy.nAutoMode ) { g_Input.Joy.nAutoMode = m_nAutoMode; WriteRegDWORD( NULL, REG_AUTOFIRE_MODE, g_Input.Joy.nAutoMode ); /* Update main window's indicator */ UpdateIndicator( ID_INDICATOR_JOY ); } if( m_ulAutoSticks != g_Input.Joy.ulAutoSticks ) { g_Input.Joy.ulAutoSticks = m_ulAutoSticks; WriteRegDWORD( NULL, REG_AUTOFIRE_STICKS, g_Input.Joy.ulAutoSticks ); } if( m_nBlockOpposite != INPUT_joy_block_opposite_directions ) { INPUT_joy_block_opposite_directions = m_nBlockOpposite; WriteRegDWORD( NULL, REG_BLOCK_OPPOSITE, INPUT_joy_block_opposite_directions ); } if( m_nMultiJoy != INPUT_joy_multijoy ) { INPUT_joy_multijoy = m_nMultiJoy; WriteRegDWORD( NULL, REG_MULTI_JOY, INPUT_joy_multijoy ); } for( int i = 0; i < MAX_ATARI_JOYPORTS; i++ ) { if( m_anDevSelected[ i ] != g_Input.anDevSelected[ i ] ) bChanged = TRUE; } if( bChanged ) { g_Input.Joy.ulSelected = (ULONG)((UBYTE)m_anDevSelected[ 3 ]) << 24; g_Input.Joy.ulSelected |= (ULONG)((UBYTE)m_anDevSelected[ 2 ]) << 16; g_Input.Joy.ulSelected |= (ULONG)((UBYTE)m_anDevSelected[ 1 ]) << 8; g_Input.Joy.ulSelected |= (ULONG)((UBYTE)m_anDevSelected[ 0 ]); WriteRegDWORD( NULL, REG_JOYSTICKS, g_Input.Joy.ulSelected ); } Input_Initialise( bChanged ); CCommonDlg::OnOK(); } /* #OF# CJoystickDlg::OnOK */
/* #FN# Called when the user clicks the OK button */ void /* #AS# Nothing */ CKeyboardDlg:: OnOK() { /* There is a problem with messages routing when the dialog is closed with Enter/Alt-O key. KILLFOCUS message arrives to late and we have to invoke KillFocus handlers in OnOK method by ourselves. That's why we use this member. */ m_bExitPass = TRUE; /* Unfortunately, edit controls do not lose the focus before handling this when the user uses accelerators */ ReceiveFocused(); if( m_nArrowsMode != g_Input.Key.nArrowsMode ) { g_Input.Key.nArrowsMode = m_nArrowsMode; WriteRegDWORD( NULL, REG_ARROWS_MODE, g_Input.Key.nArrowsMode ); Input_SetArrowKeys( g_Input.Key.nArrowsMode ); } /* Always reload the selected template */ if( !PrepareTemplate( m_szTemplateFile, m_szTemplateDesc ) ) { if( _IsFlagSet( m_ulInputState, IS_KEY_USE_TEMPLATE ) ) { _ClrFlag( m_ulInputState, IS_KEY_USE_TEMPLATE ); DisplayMessage( GetSafeHwnd(), IDS_ERROR_NO_KEYTEMP, 0, MB_ICONEXCLAMATION | MB_OK, m_szTemplateFile ); } } else /* Fill the template table */ CopyMemory( g_Input.Key.anKBTable, s_anKBTable, KEYBOARD_TABLE_SIZE * sizeof(int) ); if( _stricmp( g_szTemplateDesc, m_szTemplateDesc ) != 0 ) strcpy( g_szTemplateDesc, m_szTemplateDesc ); /* Windows NT doesn't like empty strings in Registry */ if( *m_szTemplateFile == '\0' ) strcpy( m_szTemplateFile, DEFAULT_A8K ); if( _stricmp( g_szTemplateFile, m_szTemplateFile ) != 0 ) { strcpy( g_szTemplateFile, m_szTemplateFile ); WriteRegString( NULL, REG_FILE_TEMPLATE, g_szTemplateFile ); } /* Check the miscellanous states */ if( m_ulInputState != g_Input.ulState ) { if( g_Input.ulState & IS_CAPTURE_CTRLESC ^ m_ulInputState & IS_CAPTURE_CTRLESC ) { Input_EnableEscCapture( _IsFlagSet( m_ulInputState, IS_CAPTURE_CTRLESC ) ); } g_Input.ulState = m_ulInputState; WriteRegDWORD( NULL, REG_INPUT_STATE, g_Input.ulState); } CCommonDlg::OnOK(); } /* #OF# CKeyboardDlg::OnOK */