📄 setup_c.cpp
字号:
if ( IsNT () ) SetPathSeparatorW ( szInstallFolderW, REMOVE_SEPARATOR_ALWAYS ) ;
else SetPathSeparatorA ( szInstallFolderA, REMOVE_SEPARATOR_ALWAYS ) ;
if ( IsNT () ) Dlg_Wm_SetTextW ( hWnd, IDCANCEL, GetStringW ( IDS_CANCEL ) ) ;
else Dlg_Wm_SetTextA ( hWnd, IDCANCEL, GetStringA ( IDS_CANCEL ) ) ;
// 僼僅儖僟傪嶌惉
int IsFailedMakeDir = 0 ;
if ( IsNT () ) IsFailedMakeDir += ( ! IsFolderExistW ( szInstallFolderW ) ) && MakeDirectoryW ( szInstallFolderW, 0 ) ;
else IsFailedMakeDir += ( ! IsFolderExistA ( szInstallFolderA ) ) && MakeDirectoryA ( szInstallFolderA, 0 ) ;
// 昞帵尵岅梡偺僼僅儖僟傪嶌惉
if ( IsNT () ) {
wchar_t szTmp [ MAX_PATH ] ;
wcscpy ( szTmp, szInstallFolderW ) ;
wcscat ( szTmp, LangDllFolder.W ) ;
IsFailedMakeDir += ( ! IsFolderExistW ( szTmp ) ) && MakeDirectoryW ( szTmp, 0 ) ;
}
else {
char szTmp [ MAX_PATH ] ;
strcpy ( szTmp, szInstallFolderA ) ;
strcat ( szTmp, LangDllFolder.A ) ;
IsFailedMakeDir += ( ! IsFolderExistA ( szTmp ) ) && MakeDirectoryA ( szTmp, 0 ) ;
}
if ( IsFailedMakeDir ) {
nStep = -1 ;
if ( IsNT () ) Dlg_Wm_SetTextW ( hWnd, IDC_STATIC_MESSAGE, GetStringW ( IDS_STEP_FAIL_MKDIR ) ) ;
else Dlg_Wm_SetTextA ( hWnd, IDC_STATIC_MESSAGE, GetStringA ( IDS_STEP_FAIL_MKDIR ) ) ;
Dlg_EnableWindow ( hWnd, IDCANCEL, FALSE ) ;
Dlg_Button_SetStyle ( hWnd, IDOK, BS_DEFPUSHBUTTON, TRUE ) ;
Dlg_SetFocus ( hWnd, IDOK ) ;
MessageBeep ( MB_OK ) ;
return TRUE ;
}
nStep = -1 ;
if ( IsNT () ) Dlg_Wm_SetTextW ( hWnd, IDC_STATIC_MESSAGE, GetStringW ( IDS_STEP_COPYING ) ) ;
else Dlg_Wm_SetTextA ( hWnd, IDC_STATIC_MESSAGE, GetStringA ( IDS_STEP_COPYING ) ) ;
// 媽僶乕僕儑儞偑偁傞偐偳偆偐傪妋擣
if ( IsNT () ) {
swprintf ( FileName.W, L"%s\\%s", szInstallFolderW, ( InstallFileName [ 2 ] ).W ) ;
if ( IsFileExistW ( FileName.W ) ) nOldVersion = GetDllVersionW ( FileName.W ) ;
}
else {
sprintf ( FileName.A, "%s\\%s", szInstallFolderA, ( InstallFileName [ 2 ] ).A ) ;
if ( IsFileExistA ( FileName.A ) ) nOldVersion = GetDllVersionA ( FileName.A ) ;
}
if ( ! nOldVersion ) nOldVersion = 300 ;
// 僼傽僀儖傪僀儞僗僩乕儖
if ( IsNT () ) {
for ( int nCount = 0 ; ( InstallFileName [ nCount ] ).W ; nCount ++ ) {
if ( InstallFileW ( hWnd, ( InstallFileName [ nCount ] ).W, szInstallFolderW ) ) return TRUE ;
}
}
else {
for ( int nCount = 0 ; ( InstallFileName [ nCount ] ).A ; nCount ++ ) {
if ( InstallFileA ( hWnd, ( InstallFileName [ nCount ] ).A, szInstallFolderA ) ) return TRUE ;
}
}
// 屆偄僼傽僀儖傪嶍彍
if ( IsNT () ) Dlg_Wm_SetTextW ( hWnd, IDC_STATIC_PROG, L"" ) ;
else Dlg_Wm_SetTextA ( hWnd, IDC_STATIC_PROG, "" ) ;
if ( IsNT () ) Dlg_Wm_SetTextW ( hWnd, IDC_STATIC_MESSAGE, GetStringW ( IDS_STEP_DELETE_OLD ) ) ;
else Dlg_Wm_SetTextA ( hWnd, IDC_STATIC_MESSAGE, GetStringA ( IDS_STEP_DELETE_OLD ) ) ;
if ( IsNT () ) {
for ( int nCount = 0 ; ( OldFileName [ nCount ] ).W ; nCount ++ ) {
if ( DeleteOldFileW ( hWnd, ( OldFileName [ nCount ] ).W, szInstallFolderW ) ) return TRUE ;
}
}
else {
for ( int nCount = 0 ; ( OldFileName [ nCount ] ).A ; nCount ++ ) {
if ( DeleteOldFileA ( hWnd, ( OldFileName [ nCount ] ).A, szInstallFolderA ) ) return TRUE ;
}
}
// 慡偰偺僔儑乕僩僇僢僩傪嶍彍
if ( IsNT () ) DeleteShortcutW () ;
else DeleteShortcutA () ;
// 僶僢僠僼傽僀儖傪嶌惉
if ( IsNT () ) Dlg_Wm_SetTextW ( hWnd, IDC_STATIC_PROG, L"" ) ;
else Dlg_Wm_SetTextA ( hWnd, IDC_STATIC_PROG, "" ) ;
if ( IsNT () ) Dlg_Wm_SetTextW ( hWnd, IDC_STATIC_MESSAGE, GetStringW ( IDS_STEP_CREATING ) ) ;
else Dlg_Wm_SetTextA ( hWnd, IDC_STATIC_MESSAGE, GetStringA ( IDS_STEP_CREATING ) ) ;
if ( IsNT () ) MakeBatchFileW ( szInstallFolderW, 0 ) ;
else MakeBatchFileA ( szInstallFolderA, 0 ) ;
if ( IsNT () ) MakeBatchFileW ( szInstallFolderW, 1 ) ;
else MakeBatchFileA ( szInstallFolderA, 1 ) ;
// 僼傽僀儖偺僐僺乕傪廔椆
if ( IsNT () ) Dlg_Wm_SetTextW ( hWnd, IDC_STATIC_PROG, L"" ) ;
else Dlg_Wm_SetTextA ( hWnd, IDC_STATIC_PROG, "" ) ;
// 屆偄僶乕僕儑儞偺僆僾僔儑儞傪堏摦
MoveOldConfigFile ( hWnd, nOldVersion ) ;
// 屆偄僶乕僕儑儞偺僆僾僔儑儞傪廋惓
UpdateConfigFile ( hWnd, nOldVersion ) ;
// 傾僀僐儞僉儍僢僔儏僼傽僀儖傪嶍彍
if ( IsNT () ) DeleteIconCacheW () ;
else DeleteIconCacheA () ;
// 僗僞乕僩儊僯儏乕偵僔儑乕僩僇僢僩傪嶌惉
if ( IsNT () ) Dlg_Wm_SetTextW ( hWnd, IDC_STATIC_MESSAGE, GetStringW ( IDS_STEP_STARTMENU ) ) ;
else Dlg_Wm_SetTextA ( hWnd, IDC_STATIC_MESSAGE, GetStringA ( IDS_STEP_STARTMENU ) ) ;
if ( IsNT () ) GetSpecialFolderPathW ( NULL, FileName.W, CSIDL_COMMON_PROGRAMS, 0 ) ;
else GetSpecialFolderPathA ( NULL, FileName.A, CSIDL_PROGRAMS, 0 ) ;
if ( IsNT () ) swprintf ( wcsend ( FileName.W ), L"\\%s", GetStringW ( IDS_STARTMENU_FOLDER ) ) ;
else sprintf ( strend ( FileName.A ), "\\%s", GetStringA ( IDS_STARTMENU_FOLDER ) ) ;
if ( IsNT () ) MakeDirectoryW ( FileName.W, 0 ) ;
else MakeDirectoryA ( FileName.A, 0 ) ;
if ( IsNT () ) MakeShortcutW ( FileName.W, szInstallFolderW, 0 ) ;
else MakeShortcutA ( FileName.A, szInstallFolderA, 0 ) ;
// 僨僗僋僩僢僾偵僔儑乕僩僇僢僩傪嶌惉偡傞偐妋擣
if ( IsNT () ) Dlg_Wm_SetTextW ( hWnd, IDC_STATIC_PROG, L"" ) ;
else Dlg_Wm_SetTextA ( hWnd, IDC_STATIC_PROG, "" ) ;
if ( IsNT () ) Dlg_Wm_SetTextW ( hWnd, IDOK, GetStringW ( IDS_YES ) ) ;
else Dlg_Wm_SetTextA ( hWnd, IDOK, GetStringA ( IDS_YES ) ) ;
if ( IsNT () ) Dlg_Wm_SetTextW ( hWnd, IDCANCEL, GetStringW ( IDS_NO ) ) ;
else Dlg_Wm_SetTextA ( hWnd, IDCANCEL, GetStringA ( IDS_NO ) ) ;
if ( IsNT () ) Dlg_Wm_SetTextW ( hWnd, IDC_STATIC_MESSAGE, GetStringW ( IDS_STEP_ASK_DESKTOP ) ) ;
else Dlg_Wm_SetTextA ( hWnd, IDC_STATIC_MESSAGE, GetStringA ( IDS_STEP_ASK_DESKTOP ) ) ;
MessageBeep ( MB_OK ) ;
nStep = 2 ;
return TRUE ;
}
break ;
}
// 僗僥僢僾俀
if ( nStep == 2 ) {
if ( LOWORD ( wParam ) == IDOK || LOWORD ( wParam ) == IDCANCEL ) {
// 僨僗僋僩僢僾偵僔儑乕僩僇僢僩傪嶌惉
if ( LOWORD ( wParam ) == IDOK ) {
if ( IsNT () ) Dlg_Wm_SetTextW ( hWnd, IDC_STATIC_MESSAGE, GetStringW ( IDS_STEP_DESKTOP ) ) ;
else Dlg_Wm_SetTextA ( hWnd, IDC_STATIC_MESSAGE, GetStringA ( IDS_STEP_DESKTOP ) ) ;
if ( IsNT () ) GetSpecialFolderPathW ( NULL, FileName.W, CSIDL_COMMON_DESKTOPDIRECTORY, 0 ) ;
else GetSpecialFolderPathA ( NULL, FileName.A, CSIDL_DESKTOPDIRECTORY, 0 ) ;
if ( IsNT () ) MakeShortcutW ( FileName.W, szInstallFolderW, 1 ) ;
else MakeShortcutA ( FileName.A, szInstallFolderA, 1 ) ;
if ( IsNT () ) Dlg_Wm_SetTextW ( hWnd, IDC_STATIC_PROG, L"" ) ;
else Dlg_Wm_SetTextA ( hWnd, IDC_STATIC_PROG, "" ) ;
}
// 儗僕僗僩儕偵彂偒崬傒
if ( IsNT () ) {
// 僷僗忣曬
SetRegStringW ( HKEY_LOCAL_MACHINE, REG_SUBKEY_W, L"Path", szInstallFolderW ) ;
// 傾儞僀儞僗僩乕儖忣曬
LoadStringExW ( IDS_SOFTWARENAME, FileName.W, MAX_PATH ) ;
SetRegStringW ( HKEY_LOCAL_MACHINE, REG_SUBKEY_UNINSTALL_W, L"DisplayName", FileName.W ) ;
swprintf ( FileName.W, L"\"%s\\%s\" /r", szInstallFolderW, L"setup.exe" ) ;
SetRegStringW ( HKEY_LOCAL_MACHINE, REG_SUBKEY_UNINSTALL_W, L"UninstallString", FileName.W ) ;
wcscpy ( FileName.W, HOMEPAGE_ADDRESS_W ) ;
SetRegStringW ( HKEY_LOCAL_MACHINE, REG_SUBKEY_UNINSTALL_W, L"HelpLink", FileName.W ) ;
wcscpy ( FileName.W, L"Harigaya Soichi" ) ;
SetRegStringW ( HKEY_LOCAL_MACHINE, REG_SUBKEY_UNINSTALL_W, L"Publisher", FileName.W ) ;
swprintf ( FileName.W, L"%s\\%s", szInstallFolderW, ( InstallFileName [ 0 ] ).W ) ;
SetRegStringW ( HKEY_LOCAL_MACHINE, REG_SUBKEY_UNINSTALL_W, L"DisplayIcon", FileName.W ) ;
}
else {
// 僷僗忣曬
SetRegStringA ( HKEY_LOCAL_MACHINE, REG_SUBKEY_A, "Path", szInstallFolderA ) ;
// 傾儞僀儞僗僩乕儖忣曬
LoadStringExA ( IDS_SOFTWARENAME, FileName.A, MAX_PATH ) ;
SetRegStringA ( HKEY_LOCAL_MACHINE, REG_SUBKEY_UNINSTALL_A, "DisplayName", FileName.A ) ;
sprintf ( FileName.A, "\"%s\\%s\" /r", szInstallFolderA, "setup.exe" ) ;
SetRegStringA ( HKEY_LOCAL_MACHINE, REG_SUBKEY_UNINSTALL_A, "UninstallString", FileName.A ) ;
strcpy ( FileName.A, HOMEPAGE_ADDRESS_A ) ;
SetRegStringA ( HKEY_LOCAL_MACHINE, REG_SUBKEY_UNINSTALL_A, "HelpLink", FileName.A ) ;
strcpy ( FileName.A, "Harigaya Soichi" ) ;
SetRegStringA ( HKEY_LOCAL_MACHINE, REG_SUBKEY_UNINSTALL_A, "Publisher", FileName.A ) ;
sprintf ( FileName.A, "%s\\%s", szInstallFolderA, ( InstallFileName [ 0 ] ).A ) ;
SetRegStringA ( HKEY_LOCAL_MACHINE, REG_SUBKEY_UNINSTALL_A, "DisplayIcon", FileName.A ) ;
}
Sleep ( 500 ) ;
// 廔椆儊僢僙乕僕
if ( IsNT () ) Dlg_Wm_SetTextW ( hWnd, IDC_STATIC_MESSAGE, GetStringW ( IDS_STEP_SUCCESS ) ) ;
else Dlg_Wm_SetTextA ( hWnd, IDC_STATIC_MESSAGE, GetStringA ( IDS_STEP_SUCCESS ) ) ;
if ( IsNT () ) Dlg_Wm_SetTextW ( hWnd, IDC_STATIC_PROG, L"" ) ;
else Dlg_Wm_SetTextA ( hWnd, IDC_STATIC_PROG, "" ) ;
if ( IsNT () ) Dlg_Wm_SetTextW ( hWnd, IDOK, GetStringW ( IDS_OK ) ) ;
else Dlg_Wm_SetTextA ( hWnd, IDOK, GetStringA ( IDS_OK ) ) ;
if ( IsNT () ) Dlg_Wm_SetTextW ( hWnd, IDCANCEL, GetStringW ( IDS_CANCEL ) ) ;
else Dlg_Wm_SetTextA ( hWnd, IDCANCEL, GetStringA ( IDS_CANCEL ) ) ;
Dlg_EnableWindow ( hWnd, IDCANCEL, FALSE ) ;
Dlg_Button_SetStyle ( hWnd, IDOK, BS_DEFPUSHBUTTON, TRUE ) ;
Dlg_SetFocus ( hWnd, IDOK ) ;
MessageBeep ( MB_OK ) ;
nStep = -1 ;
return TRUE ;
}
break ;
}
// 廔椆
if ( nStep == -1 ) {
if ( LOWORD ( wParam ) == IDOK || LOWORD ( wParam ) == IDCANCEL ) {
EndDialog ( hWnd, 0 ) ;
return TRUE ;
}
break ;
}
break ;
default :
break ;
}
return FALSE ;
}
// 昞帵僐儞僩儘乕儖
// OK 側傜 0 偱丄CANCEL 側傜 1 偱廔椆
INT_PTR CALLBACK EditDialogProc ( HWND hWnd, unsigned int dwMessage, WPARAM wParam, LPARAM lParam ) {
switch ( dwMessage ) {
case WM_INITDIALOG :
if ( IsNT () ) Dlg_Wm_SetTextW ( hWnd, IDC_EDIT, szInstallFolderW ) ;
else Dlg_Wm_SetTextA ( hWnd, IDC_EDIT, szInstallFolderA ) ;
return TRUE ;
case WM_COMMAND :
if ( LOWORD ( wParam ) == IDCANCEL ) {
EndDialog ( hWnd, 1 ) ;
return TRUE ;
}
if ( LOWORD ( wParam ) == IDOK ) {
if ( IsNT () ) {
wchar_t szBuffer [ MAX_PATH ] ;
Dlg_Wm_GetTextW ( hWnd, IDC_EDIT, szBuffer, MAX_PATH ) ;
if ( wcslen ( szBuffer ) > MAX_PATH_FOLDER_PARENT ) {
MessageBoxW ( NULL, GetStringW ( IDS_PATH_TOO_LONG ), szCommandNameW, MB_OK ) ;
return TRUE ;
}
wcscpy ( szInstallFolderW, szBuffer ) ;
}
else {
char szBuffer [ MAX_PATH ] ;
Dlg_Wm_GetTextA ( hWnd, IDC_EDIT, szBuffer, MAX_PATH ) ;
if ( strlen ( szBuffer ) > MAX_PATH_FOLDER_PARENT ) {
MessageBoxA ( NULL, GetStringA ( IDS_PATH_TOO_LONG ), szCommandNameA, MB_OK ) ;
return TRUE ;
}
strcpy ( szInstallFolderA, szBuffer ) ;
}
EndDialog ( hWnd, 0 ) ;
return TRUE ;
}
if ( LOWORD ( wParam ) == IDC_BUTTON_REF ) {
if ( IsNT () ) {
wchar_t szBuffer [ MAX_PATH ] ;
Dlg_Wm_GetTextW ( hWnd, IDC_EDIT, szBuffer, MAX_PATH ) ;
SetPathSeparatorW ( szBuffer, ADD_SEPARATOR_ONLY_ROOT ) ;
while ( GetFileAttributesW ( szBuffer ) == (unsigned long) -1 ) {
ChangeFileNameW ( szBuffer, NULL ) ;
SetPathSeparatorW ( szBuffer, ADD_SEPARATOR_ONLY_ROOT ) ;
if ( ! GetFileNameW ( szBuffer ) ) break ;
}
if ( ! BrowseForFolderW ( hWnd, szBuffer, szBuffer, szCommandNameW, GetStringW ( IDS_BROWSE_FOLDER ), 0 ) ) {
SetPathSeparatorW ( szBuffer, REMOVE_SEPARATOR_ALWAYS ) ;
if ( ! wcsstri ( szBuffer, FOLDER_NAME_W ) ) {
if ( ! wcsstri ( szBuffer, L"HARIGAYA" ) ) wcscat ( szBuffer, L"\\Harigaya\\" ) ;
else wcscat ( szBuffer, L"\\" ) ;
wcscat ( szBuffer, FOLDER_NAME_W ) ;
}
Dlg_Wm_SetTextW ( hWnd, IDC_EDIT, szBuffer ) ;
return TRUE ;
}
}
else {
char szBuffer [ MAX_PATH ] ;
Dlg_Wm_GetTextA ( hWnd, IDC_EDIT, szBuffer, MAX_PATH ) ;
SetPathSeparatorA ( szBuffer, ADD_SEPARATOR_ONLY_ROOT ) ;
while ( GetFileAttributesA ( szBuffer ) == (unsigned long) -1 ) {
ChangeFileNameA ( szBuffer, NULL ) ;
SetPathSeparatorA ( szBuffer, ADD_SEPARATOR_ONLY_ROOT ) ;
if ( ! GetFileNameA ( szBuffer ) ) break ;
}
if ( ! BrowseForFolderA ( hWnd, szBuffer, szBuffer, szCommandNameA, GetStringA ( IDS_BROWSE_FOLDER ), 0 ) ) {
SetPathSeparatorA ( szBuffer, REMOVE_SEPARATOR_ALWAYS ) ;
if ( ! strstri ( szBuffer, FOLDER_NAME_A ) ) {
if ( ! strstri ( szBuffer, "HARIGAYA" ) ) strcat ( szBuffer, "\\Harigaya\\" ) ;
else strcat ( szBuffer, "\\" ) ;
strcat ( szBuffer, FOLDER_NAME_A ) ;
}
Dlg_Wm_SetTextA ( hWnd, IDC_EDIT, szBuffer ) ;
return TRUE ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -