📄 setup_c.cpp
字号:
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 + -