⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setup_c.cpp

📁 This software performs code conversion of Chinese characters, including GB2312/GBK and BIG5. It a
💻 CPP
📖 第 1 页 / 共 5 页
字号:
      int nResult = SearchPathW ( NULL, L"PIFMGR.DLL", NULL, MAX_PATH, szComspec, & szTmp ) ;
      if ( nResult <= 0 || nResult >= MAX_PATH ) szComspec = NULL ;
   }


   wchar_t szLinkFileName [ MAX_PATH ] ;
   wchar_t szFileName [ MAX_PATH ] ;

   // 幚峴僼傽僀儖
   swprintf ( szFileName, L"%s\\%s", szFolderName, ( InstallFileName [ 0 ] ).W ) ;
   swprintf ( szLinkFileName, L"%s\\%s", szShortcutFolder, GetStringW ( IDS_EXE_LINK ) ) ;
   if ( IsFileExistW ( szLinkFileName ) ) { DeleteFileW ( szLinkFileName ) ; Sleep ( 200 ) ; }
   CreateShortcutW ( szLinkFileName, szFileName, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, NULL ) ;

   // 僐儅儞僪儔僀儞
   swprintf ( szFileName, L"%s\\%s", szFolderName, ( InstallFileName [ 3 ] ).W ) ;
   swprintf ( szLinkFileName, L"%s\\%s", szShortcutFolder, GetStringW ( IDS_COM_LINK ) ) ;
   if ( IsFileExistW ( szLinkFileName ) ) { DeleteFileW ( szLinkFileName ) ; Sleep ( 200 ) ; }
   CreateShortcutW ( szLinkFileName, szFileName, NULL, NULL, NULL, szComspec, 0, 0, 0, NULL, NULL ) ;

   if ( ! IsDesktop ) {

      // 僿儖僾僼傽僀儖
      swprintf ( szFileName, L"%s\\%s", szFolderName, GetStringW ( IDS_HELPFILE_HTML_FILENAME ) ) ;
      swprintf ( szLinkFileName, L"%s\\%s", szShortcutFolder, GetStringW ( IDS_HELP_LINK ) ) ;
      if ( IsFileExistW ( szLinkFileName ) ) { DeleteFileW ( szLinkFileName ) ; Sleep ( 200 ) ; }
      CreateShortcutW ( szLinkFileName, szFileName, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, NULL ) ;

      // 傾儞僀儞僗僩乕儔
      swprintf ( szFileName, L"%s\\%s", szFolderName, L"setup.exe" ) ;
      swprintf ( szLinkFileName, L"%s\\%s", szShortcutFolder, GetStringW ( IDS_UNINSTALL_LINK ) ) ;
      if ( IsFileExistW ( szLinkFileName ) ) { DeleteFileW ( szLinkFileName ) ; Sleep ( 200 ) ; }
      CreateShortcutW ( szLinkFileName, szFileName, L"/r", NULL, NULL, NULL, 0, 0, 0, NULL, NULL ) ;
   }

   return 0 ;
}



// 傾僀僐儞僉儍僢僔儏僼傽僀儖傪嶍彍乮ANSI斉乯
int DeleteIconCacheA ( void ) {

   char szFileName [ MAX_PATH ] ;

   GetWindowsDirectoryA ( szFileName, MAX_PATH ) ;
   strcat ( szFileName, "\\ShellIconCache" ) ;
   if ( IsFileExistA ( szFileName ) ) DeleteFileA ( szFileName ) ;

   return 0 ;
}



// 傾僀僐儞僉儍僢僔儏僼傽僀儖傪嶍彍乮UNICODE斉乯
int DeleteIconCacheW ( void ) {

   wchar_t szFileName [ MAX_PATH ] ;

   GetWindowsDirectoryW ( szFileName, MAX_PATH ) ;
   wcscat ( szFileName, L"\\ShellIconCache" ) ;
   if ( IsFileExistW ( szFileName ) ) DeleteFileW ( szFileName ) ;

   if ( IsWinXPorLater () ) {

      wchar_t szUserProfilePath [ MAX_PATH ] ;
      wchar_t szLocalPath [ MAX_PATH ] ;

      if ( GetSpecialFolderPathW ( NULL, szUserProfilePath, CSIDL_PROFILE, 0 ) ) return 1 ;
      if ( GetSpecialFolderPathW ( NULL, szLocalPath, CSIDL_LOCAL_APPDATA, 0 ) ) return 1 ;
      if ( wcsheadcmp ( szLocalPath, szUserProfilePath ) ) return 1 ;

      wchar_t *szLocalPathSuffix = szLocalPath + wcslen ( szUserProfilePath ) ;

      ChangeFileNameW ( szUserProfilePath, L"*" ) ;

      HANDLE hFind ;
      WIN32_FIND_DATAW FindFileDataW ;

      if ( ( hFind = FindFirstFileW ( szUserProfilePath, & FindFileDataW ) ) != INVALID_HANDLE_VALUE ) {
         do {

            if ( ! wcscmp ( FindFileDataW.cFileName, L"." ) ) continue ;
            if ( ! wcscmp ( FindFileDataW.cFileName, L".." ) ) continue ;
            if ( ! ( FindFileDataW.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) ) continue ;

            wcscpy ( szFileName, szUserProfilePath ) ;
            ChangeFileNameW ( szFileName, FindFileDataW.cFileName ) ;
            wcscat ( szFileName, szLocalPathSuffix ) ;

            wcscat ( szFileName, L"\\IconCache.db" ) ;
            if ( IsFileExistW ( szFileName ) ) DeleteFileW ( szFileName ) ;

         } while ( FindNextFileW ( hFind, & FindFileDataW ) ) ;
      }
   }

   return 0 ;
}



////////////////////////////////////////////////////////
//              僆僾僔儑儞僼傽僀儖偺峏怴              //
////////////////////////////////////////////////////////



int SetNewConfig ( int nOldVersion ) ;



int UpdateConfigFile ( HWND hWnd, int nOldVersion ) {

   if ( IsNT () ) {

      wchar_t szUserProfilePath [ MAX_PATH ] ;
      wchar_t szAppdataPath [ MAX_PATH ] ;

      if ( GetSpecialFolderPathW ( NULL, szUserProfilePath, CSIDL_PROFILE, 0 ) && ! GetEnvironmentVariableW ( L"USERPROFILE", szUserProfilePath, MAX_PATH ) ) return 1 ;
      if ( GetSpecialFolderPathW ( NULL, szAppdataPath, CSIDL_APPDATA, 0 ) && ! GetEnvironmentVariableW ( L"APPDATA", szAppdataPath, MAX_PATH ) ) return 1 ;
      if ( wcsheadcmp ( szAppdataPath, szUserProfilePath ) ) return 1 ;

      wchar_t *szAppdataPathSuffix = szAppdataPath + wcslen ( szUserProfilePath ) ;

      ChangeFileNameW ( szUserProfilePath, L"*" ) ;

      HANDLE hFind ;
      WIN32_FIND_DATAW FindFileDataW ;

      if ( ( hFind = FindFirstFileW ( szUserProfilePath, & FindFileDataW ) ) != INVALID_HANDLE_VALUE ) {
         do {

            if ( ! wcscmp ( FindFileDataW.cFileName, L"." ) ) continue ;
            if ( ! wcscmp ( FindFileDataW.cFileName, L".." ) ) continue ;
            if ( ! ( FindFileDataW.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) ) continue ;

            wchar_t szFileName [ MAX_PATH ] ;

            wcscpy ( szFileName, szUserProfilePath ) ;
            ChangeFileNameW ( szFileName, FindFileDataW.cFileName ) ;
            wcscat ( szFileName, szAppdataPathSuffix ) ;

            wcscat ( szFileName, L"\\Harigaya" ) ;

            SetPathSeparatorW ( szFileName, ADD_SEPARATOR_ALWAYS ) ;
            wcscat ( szFileName, CFG_FILENAME_W ) ;

            szConfigFileNameW = szFileName ;

            if ( ReadOldOption () ) continue ;
            if ( ReadOption () ) continue ;
            Dlg_Wm_SetTextFormatW ( hWnd, IDC_STATIC_PROG, L"Updating %s", szFileName ) ;
            if ( SetNewConfig ( nOldVersion ) ) WriteOption () ;

         } while ( FindNextFileW ( hFind, & FindFileDataW ) ) ;
      }

   }
   else {

      if ( ReadOldOption () ) return 0 ;
      if ( ReadOption () ) return 0 ;
      if ( SetNewConfig ( nOldVersion ) ) WriteOption () ;

   }

   Dlg_Wm_SetTextA ( hWnd, IDC_STATIC_PROG, "" ) ;
   return 0 ;
}



// 曄峏偟偨傜 1 傪曉偡
int SetNewConfig ( int nOldVersion ) {

   int IsChanged = 0 ;

   if ( nOldVersion < 450 ) {
      if ( ! stricmp ( szGbFont, "MS Song" ) ) strcpy ( szGbFont, DEFAULT_GB_FONT ) ;
      if ( ! stricmp ( szGbGothicFont, "MS Hei" ) ) strcpy ( szGbGothicFont, DEFAULT_GB_GOTHIC_FONT ) ;
      IsChanged = 1 ;
   }
   if ( nOldVersion < 460 ) {
      if ( nOsCodePage == CP_CHINESE_SIMPLIFIED && ! stricmp ( szGbFont, DEFAULT_GB_FONT ) ) {
         strcpy ( szGbFont, DEFAULT_GB_FONT_L ) ;
         IsChanged = 1 ;
      }
      if ( nOsCodePage == CP_CHINESE_SIMPLIFIED && ! stricmp ( szGbGothicFont, DEFAULT_GB_GOTHIC_FONT ) ) {
         strcpy ( szGbGothicFont, DEFAULT_GB_GOTHIC_FONT_L ) ;
         IsChanged = 1 ;
      }
      if ( nOsCodePage == CP_CHINESE_TRADITIONAL && ! stricmp ( szBig5Font, DEFAULT_BIG5_FONT ) ) {
         strcpy ( szBig5Font, DEFAULT_BIG5_FONT_L ) ;
         IsChanged = 1 ;
      }
      if ( nOsCodePage == CP_CHINESE_TRADITIONAL && ! stricmp ( szBig5GothicFont, DEFAULT_BIG5_GOTHIC_FONT ) ) {
         strcpy ( szBig5GothicFont, DEFAULT_BIG5_GOTHIC_FONT_L ) ;
         IsChanged = 1 ;
      }
      if ( nSavedCode ) {
         int nSrcCode = nSavedCode / 10 ;
         int nDstCode = nSavedCode % 10 ;
         if ( nSrcCode >= CODE_ZJ ) {
            nSrcCode ++ ;
            nSavedCode = ( nSrcCode * 10 ) + nDstCode ;
            IsSaveCode = 1 ;
            IsChanged = 1 ;
         }
      }
   }

   if ( nOldVersion < 500 ) {

      if ( nSavedCode ) {
         int nSrcCode = nSavedCode / 10 ;
         int nDstCode = nSavedCode % 10 ;
         switch ( nSrcCode ) {
            case CODE_GB :    nSavedSrcType = TYPE_GB ; break ;
            case CODE_BIG5 :  nSavedSrcType = TYPE_BIG5 ; break ;
            case CODE_CW :    nSavedSrcType = TYPE_PSEUDO ; nSavedSrcCode = CP_JAPANESE_CW ; break ;
            case CODE_NH :    nSavedSrcType = TYPE_PSEUDO ; nSavedSrcCode = CP_JAPANESE_NH ; break ;
            case CODE_CWN :   nSavedSrcType = TYPE_PSEUDO ; nSavedSrcCode = CP_JAPANESE_CWN ; break ;
            case CODE_ZQ :    nSavedSrcType = TYPE_PSEUDO ; nSavedSrcCode = CP_JAPANESE_ZQ ; break ;
            case CODE_CX :    nSavedSrcType = TYPE_PSEUDO ; nSavedSrcCode = CP_JAPANESE_CX ; break ;
            case CODE_ZJ :    nSavedSrcType = TYPE_PSEUDO ; nSavedSrcCode = CP_JAPANESE_ZJ ; break ;
            case CODE_TM :    nSavedSrcType = TYPE_PSEUDO ; nSavedSrcCode = CP_JAPANESE_TM ; break ;
            case CODE_HZ :    nSavedSrcType = TYPE_HZ ; break ;
         }
         switch ( nDstCode ) {
            case CODE_GB :    nSavedDstType = TYPE_GB ; break ;
            case CODE_BIG5 :  nSavedDstType = TYPE_BIG5 ; break ;
            case CODE_CW :    nSavedDstType = TYPE_PSEUDO ; nSavedDstCode = CP_JAPANESE_CW ; break ;
            case CODE_NH :    nSavedDstType = TYPE_PSEUDO ; nSavedDstCode = CP_JAPANESE_NH ; break ;
            case CODE_CWN :   nSavedDstType = TYPE_PSEUDO ; nSavedDstCode = CP_JAPANESE_CWN ; break ;
            case CODE_ZQ :    nSavedDstType = TYPE_PSEUDO ; nSavedDstCode = CP_JAPANESE_ZQ ; break ;
            case CODE_CX :    nSavedDstType = TYPE_PSEUDO ; nSavedDstCode = CP_JAPANESE_CX ; break ;
            case CODE_ZJ :    nSavedDstType = TYPE_PSEUDO ; nSavedDstCode = CP_JAPANESE_ZJ ; break ;
            case CODE_TM :    nSavedDstType = TYPE_PSEUDO ; nSavedDstCode = CP_JAPANESE_TM ; break ;
            case CODE_HZ :    nSavedDstType = TYPE_HZ ; break ;
         }
         IsSaveCode = 1 ;
         IsChanged = 1 ;
      }
   }

   return IsChanged ;
}



// 屆偄娐嫬僼傽僀儖傪 APPDATA 偵堏摦
int MoveOldConfigFile ( HWND hWnd, int nOldVersion ) {

   if ( ! IsNT () ) return 0 ;

#if defined SETUP_R
   if ( nOldVersion > 610 ) return 0 ;
#endif
#if defined SETUP_C
   if ( nOldVersion > 490 ) return 0 ;
#endif

   wchar_t szFileName [ MAX_PATH ] ;

   wcscpy ( szFileName, szInstallFolderW ) ;
   SetPathSeparatorW ( szFileName, ADD_SEPARATOR_ALWAYS ) ;
   wcscat ( szFileName, CFG_FILENAME_W ) ;


   int IsDelete = 0 ;


   FILE *Fin = wfopen ( szFileName, L"r" ) ;
   if ( ! Fin ) return 0 ;

   char szLineBuffer [ OPTION_FILE_LINE_BUFFER ] ;

   while ( fgets ( szLineBuffer, OPTION_FILE_LINE_BUFFER, Fin ) ) {

      // 堦峴偑挿偡偓傞偲偒
      if ( ! strchr ( szLineBuffer, '\n' ) ) {
         while ( 1 ) {
            int C = fgetc ( Fin ) ;
            if ( C == '\n' || C == EOF ) break ;
         }
      }

      if ( ! strheadcmp ( szLineBuffer, "IncludePathW" ) || ! strheadcmp ( szLineBuffer, "IncludePathA" ) ) {
         IsDelete = 1 ;
         break ;
      }
   }

   fclose ( Fin ) ;


   if ( ! IsDelete ) {

      wchar_t szNewFileName [ MAX_PATH ] ;

      if ( GetSpecialFolderPathW ( NULL, szNewFileName, CSIDL_APPDATA, 0 ) ) return 1 ;

      wcscat ( szNewFileName, L"\\Harigaya" ) ;

      if ( ! IsFolderExistW ( szNewFileName ) && MakeDirectoryW ( szNewFileName, NULL ) ) return 1 ;

      SetPathSeparatorW ( szNewFileName, ADD_SEPARATOR_ALWAYS ) ;
      wcscat ( szNewFileName, CFG_FILENAME_W ) ;

      CopyFileW ( szFileName, szNewFileName, FALSE ) ;
   }

   DeleteFileW ( szFileName ) ;

   return 1 ;
}



////////////////////////////////////////////////////////
//                       MISC                         //
////////////////////////////////////////////////////////



// DLL 偺僶乕僕儑儞傪庢摼乮ANSI斉乯
int GetDllVersionA ( const char *szDllFileName ) {

   HINSTANCE hDll = LoadLibraryA ( szDllFileName ) ;

   GETDLLVERSION GetDllVersion = NULL ;
   if ( GETPROCADDRESS ( hDll, GETDLLVERSION, GetDllVersion ) ) return 0 ;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -