#include <htmlhelp.h>\r
#include "helpid.h"\r
\r
+// ソフトウェア自動更新\r
+#include "updater.h"\r
+\r
// UTF-8対応\r
#undef __MBSWRAPPER_H__\r
#include "mbswrapper.h"\r
HANDLE ChangeNotification = INVALID_HANDLE_VALUE;\r
// タスクバー進捗表示\r
static ITaskbarList3* pTaskbarList3;\r
+// 高DPI対応\r
+static int ToolWinHeight;\r
+// ソフトウェア自動更新\r
+static int ApplyUpdatesOnExit = NO;\r
\r
\r
/*===== グローバルなワーク =====*/\r
int RemoveOldLog = NO;\r
// バージョン確認\r
int ReadOnlySettings = NO;\r
+// ソフトウェア自動更新\r
+int AutoCheckForUpdates = YES;\r
+int AutoApplyUpdates = NO;\r
+int AutoCheckForUptatesInterval = 7;\r
+time_t LastAutoCheckForUpdates = 0;\r
\r
\r
\r
MSG Msg;\r
int Ret;\r
BOOL Sts;\r
-\r
// プロセス保護\r
+ char* pCommand;\r
+ DWORD ProtectLevel;\r
+ char Option[FMAX_PATH+1];\r
+ // ソフトウェア自動更新\r
+ int ImmediateExit;\r
+ char PrivateKeyFile[FMAX_PATH+1];\r
+ char Password[FMAX_PATH+1];\r
+ char ServerPath[FMAX_PATH+1];\r
+ char HashFile[FMAX_PATH+1];\r
+ char ListFile[FMAX_PATH+1];\r
+ char Description[FMAX_PATH+1];\r
+ char UpdateDir[FMAX_PATH+1];\r
+ char Path[FMAX_PATH+1];\r
+ char Command[FMAX_PATH+1];\r
+ char* p;\r
+\r
#ifdef ENABLE_PROCESS_PROTECTION\r
+ ProtectLevel = PROCESS_PROTECTION_NONE;\r
+ pCommand = lpszCmdLine;\r
+ while(pCommand = GetToken(pCommand, Option))\r
{\r
- DWORD ProtectLevel;\r
- char* pCommand;\r
- char Option[FMAX_PATH+1];\r
- ProtectLevel = PROCESS_PROTECTION_NONE;\r
- pCommand = lpszCmdLine;\r
- while(pCommand = GetToken(pCommand, Option))\r
+ if(Option[0] == '-')\r
{\r
- if(strcmp(Option, "--protect") == 0)\r
+ if(strcmp(&Option[1], "-protect") == 0)\r
{\r
ProtectLevel = PROCESS_PROTECTION_DEFAULT;\r
break;\r
}\r
- else if(strcmp(Option, "--protect-high") == 0)\r
+ else if(strcmp(&Option[1], "-protect-high") == 0)\r
{\r
ProtectLevel = PROCESS_PROTECTION_HIGH;\r
break;\r
}\r
- else if(strcmp(Option, "--protect-medium") == 0)\r
+ else if(strcmp(&Option[1], "-protect-medium") == 0)\r
{\r
ProtectLevel = PROCESS_PROTECTION_MEDIUM;\r
break;\r
}\r
- else if(strcmp(Option, "--protect-low") == 0)\r
+ else if(strcmp(&Option[1], "-protect-low") == 0)\r
{\r
ProtectLevel = PROCESS_PROTECTION_LOW;\r
break;\r
}\r
}\r
- if(ProtectLevel != PROCESS_PROTECTION_NONE)\r
+ }\r
+ if(ProtectLevel != PROCESS_PROTECTION_NONE)\r
+ {\r
+ SetProcessProtectionLevel(ProtectLevel);\r
+ if(!InitializeLoadLibraryHook())\r
{\r
- SetProcessProtectionLevel(ProtectLevel);\r
- if(!InitializeLoadLibraryHook())\r
- {\r
- MessageBox(NULL, MSGJPN321, "FFFTP", MB_OK | MB_ICONERROR);\r
- return 0;\r
- }\r
+ MessageBox(NULL, MSGJPN321, "FFFTP", MB_OK | MB_ICONERROR);\r
+ return 0;\r
+ }\r
#ifndef _DEBUG\r
- if(IsDebuggerPresent())\r
- {\r
- MessageBox(NULL, MSGJPN322, "FFFTP", MB_OK | MB_ICONERROR);\r
- return 0;\r
- }\r
+ if(IsDebuggerPresent())\r
+ {\r
+ MessageBox(NULL, MSGJPN322, "FFFTP", MB_OK | MB_ICONERROR);\r
+ return 0;\r
+ }\r
#endif\r
- if(!UnloadUntrustedModule())\r
- {\r
- MessageBox(NULL, MSGJPN323, "FFFTP", MB_OK | MB_ICONERROR);\r
- return 0;\r
- }\r
+ if(!UnloadUntrustedModule())\r
+ {\r
+ MessageBox(NULL, MSGJPN323, "FFFTP", MB_OK | MB_ICONERROR);\r
+ return 0;\r
+ }\r
#ifndef _DEBUG\r
- if(RestartProtectedProcess(" --restart"))\r
- return 0;\r
+ if(RestartProtectedProcess(" --restart"))\r
+ return 0;\r
#endif\r
- if(!EnableLoadLibraryHook(TRUE))\r
- {\r
- MessageBox(NULL, MSGJPN324, "FFFTP", MB_OK | MB_ICONERROR);\r
- return 0;\r
- }\r
+ if(!EnableLoadLibraryHook(TRUE))\r
+ {\r
+ MessageBox(NULL, MSGJPN324, "FFFTP", MB_OK | MB_ICONERROR);\r
+ return 0;\r
}\r
- else\r
- InitializeLoadLibraryHook();\r
}\r
+ else\r
+ InitializeLoadLibraryHook();\r
#endif\r
\r
// マルチコアCPUの特定環境下でファイル通信中にクラッシュするバグ対策\r
LoadOpenSSL();\r
#endif\r
\r
- // SFTP対応\r
- LoadPuTTY();\r
+ // ソフトウェア自動更新\r
+ ImmediateExit = NO;\r
+ pCommand = lpszCmdLine;\r
+ while(pCommand = GetToken(pCommand, Option))\r
+ {\r
+ if(Option[0] == '-')\r
+ {\r
+ if(strcmp(&Option[1], "-build-software-update") == 0)\r
+ {\r
+ if(pCommand = GetToken(pCommand, PrivateKeyFile))\r
+ {\r
+ if(pCommand = GetToken(pCommand, Password))\r
+ {\r
+ if(pCommand = GetToken(pCommand, ServerPath))\r
+ {\r
+ if(pCommand = GetToken(pCommand, HashFile))\r
+ {\r
+ if(pCommand = GetToken(pCommand, ListFile))\r
+ {\r
+ if(pCommand = GetToken(pCommand, Description))\r
+ BuildUpdates(PrivateKeyFile, Password, ServerPath, HashFile, ListFile, RELEASE_VERSION_NUM, VER_STR, Description);\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ ImmediateExit = YES;\r
+ break;\r
+ }\r
+ else if(strcmp(&Option[1], "-software-update") == 0)\r
+ {\r
+ if(pCommand = GetToken(pCommand, UpdateDir))\r
+ {\r
+ if(!RestartUpdateProcessAsAdministrator(lpszCmdLine, " --restart"))\r
+ {\r
+ Sleep(1000);\r
+ if(ApplyUpdates(UpdateDir, "updatebackup"))\r
+ MessageBox(NULL, MSGJPN358, "FFFTP", MB_OK);\r
+ else\r
+ MessageBox(NULL, MSGJPN359, "FFFTP", MB_OK | MB_ICONERROR);\r
+ }\r
+ }\r
+ ImmediateExit = YES;\r
+ break;\r
+ }\r
+ else if(strcmp(&Option[1], "-software-cleanup") == 0)\r
+ {\r
+ if(pCommand = GetToken(pCommand, UpdateDir))\r
+ CleanupUpdates(UpdateDir);\r
+ break;\r
+ }\r
+ }\r
+ }\r
\r
Ret = FALSE;\r
hWndFtp = NULL;\r
hInstFtp = hInstance;\r
- if(InitApp(lpszCmdLine, cmdShow) == FFFTP_SUCCESS)\r
+ // ソフトウェア自動更新\r
+// if(InitApp(lpszCmdLine, cmdShow) == FFFTP_SUCCESS)\r
+ if(ImmediateExit == NO && InitApp(lpszCmdLine, cmdShow) == FFFTP_SUCCESS)\r
{\r
for(;;)\r
{\r
#ifdef USE_OPENSSL\r
FreeOpenSSL();\r
#endif\r
- // SFTP対応\r
- FreePuTTY();\r
// タスクバー進捗表示\r
FreeTaskbarList3();\r
// UPnP対応\r
FreeUPnP();\r
CoUninitialize();\r
OleUninitialize();\r
+ // ソフトウェア自動更新\r
+ if(ApplyUpdatesOnExit == YES)\r
+ {\r
+ Sts = FALSE;\r
+ if(GetModuleFileName(NULL, UpdateDir, FMAX_PATH) > 0)\r
+ {\r
+ if(p = strrchr(UpdateDir, '\\'))\r
+ {\r
+ *p = '\0';\r
+ strcpy(Path, TmpPath);\r
+ SetYenTail(Path);\r
+ strcat(Path, "update");\r
+ sprintf(Command, "-%s \"%s\"", "-software-update", UpdateDir);\r
+ if(StartUpdateProcess(Path, Command))\r
+ Sts = TRUE;\r
+ }\r
+ }\r
+ if(!Sts)\r
+ MessageBox(NULL, MSGJPN359, "FFFTP", MB_OK | MB_ICONERROR);\r
+ }\r
return(Ret);\r
}\r
\r
int masterpass;\r
// ポータブル版判定\r
int ImportPortable;\r
+ // 高DPI対応\r
+ int i;\r
\r
sts = FFFTP_FAIL;\r
\r
_mkdir(TmpPath);\r
SetYenTail(TmpPath);\r
\r
+ // 高DPI対応\r
+ WinWidth = CalcPixelX(WinWidth);\r
+ WinHeight = CalcPixelY(WinHeight);\r
+ LocalWidth = CalcPixelX(LocalWidth);\r
+ TaskHeight = CalcPixelY(TaskHeight);\r
+ for(i = 0; i < sizeof(LocalTabWidth) / sizeof(int); i++)\r
+ LocalTabWidth[i] = CalcPixelX(LocalTabWidth[i]);\r
+ for(i = 0; i < sizeof(RemoteTabWidth) / sizeof(int); i++)\r
+ RemoteTabWidth[i] = CalcPixelX(RemoteTabWidth[i]);\r
+\r
GetModuleFileName(NULL, HelpPath, FMAX_PATH);\r
strcpy(GetFileName(HelpPath), "ffftp.chm");\r
\r
{\r
if(IsRegAvailable() == YES && IsIniAvailable() == NO)\r
{\r
- switch(MessageBox(GetMainHwnd(), MSGJPN351, "FFFTP", MB_YESNOCANCEL | MB_DEFBUTTON2))\r
+ switch(MessageBox(GetMainHwnd(), MSGJPN350, "FFFTP", MB_YESNOCANCEL | MB_DEFBUTTON2))\r
{\r
case IDCANCEL:\r
ReadOnlySettings = YES;\r
\r
if(masterpass != 0)\r
{\r
+ // ホスト共通設定機能\r
+ ResetDefaultHost();\r
+\r
LoadRegistry();\r
\r
// ポータブル版判定\r
MakeButtonsFocus();\r
DispTransferFiles();\r
\r
+ // ソフトウェア自動更新\r
+ if(AutoCheckForUpdates == YES && AutoCheckForUptatesInterval == 0)\r
+ UpdateSoftware(YES, YES, AutoApplyUpdates);\r
+\r
StartupProc(lpszCmdLine);\r
sts = FFFTP_SUCCESS;\r
\r
wClass.hIconSm = NULL;\r
RegisterClassEx(&wClass);\r
\r
+ // 高DPI対応\r
+// ToolWinHeight = TOOLWIN_HEIGHT;\r
+ ToolWinHeight = CalcPixelY(16) + 12;\r
+\r
if(SaveWinPos == NO)\r
{\r
WinPosX = CW_USEDEFAULT;\r
switch(AskCryptMode())\r
{\r
case CRYPT_NONE:\r
- sprintf(Tmp, "%s (%s) %s - FFFTP", TitleHostName, FilterStr, MSGJPN352);\r
+ sprintf(Tmp, "%s (%s) %s - FFFTP", TitleHostName, FilterStr, MSGJPN351);\r
break;\r
case CRYPT_FTPES:\r
- sprintf(Tmp, "%s (%s) %s - FFFTP", TitleHostName, FilterStr, MSGJPN353);\r
+ sprintf(Tmp, "%s (%s) %s - FFFTP", TitleHostName, FilterStr, MSGJPN352);\r
break;\r
case CRYPT_FTPIS:\r
- sprintf(Tmp, "%s (%s) %s - FFFTP", TitleHostName, FilterStr, MSGJPN354);\r
+ sprintf(Tmp, "%s (%s) %s - FFFTP", TitleHostName, FilterStr, MSGJPN353);\r
break;\r
case CRYPT_SFTP:\r
- sprintf(Tmp, "%s (%s) %s - FFFTP", TitleHostName, FilterStr, MSGJPN355);\r
+ sprintf(Tmp, "%s (%s) %s - FFFTP", TitleHostName, FilterStr, MSGJPN354);\r
break;\r
}\r
}\r
{\r
// ローカル側自動更新\r
// タスクバー進捗表示\r
+ // ソフトウェア自動更新\r
case WM_CREATE :\r
SetTimer(hWnd, 1, 1000, NULL);\r
SetTimer(hWnd, 2, 100, NULL);\r
+ SetTimer(hWnd, 3, 60000, NULL);\r
break;\r
\r
// ローカル側自動更新\r
// 自動切断対策\r
// タスクバー進捗表示\r
+ // ソフトウェア自動更新\r
case WM_TIMER :\r
switch(wParam)\r
{\r
if(IsTaskbarList3Loaded() == YES)\r
UpdateTaskbarProgress();\r
break;\r
+ case 3:\r
+ if(AskUserOpeDisabled() == NO && AskTransferNow() == NO)\r
+ {\r
+ if(AutoCheckForUpdates == YES && AutoCheckForUptatesInterval > 0 && time(NULL) - LastAutoCheckForUpdates >= AutoCheckForUptatesInterval * 86400)\r
+ UpdateSoftware(YES, YES, AutoApplyUpdates);\r
+ }\r
+ break;\r
}\r
break;\r
\r
SetMasterPassword(NULL);\r
while(ValidateMasterPassword() == YES && GetMasterPasswordStatus() == PASSWORD_UNMATCH)\r
{\r
- if(EnterMasterPasswordAndSet(masterpasswd_dlg, NULL) == 0)\r
+ if(EnterMasterPasswordAndSet(masterpasswd_dlg, hWnd) == 0)\r
break;\r
}\r
if(GetMasterPasswordStatus() == PASSWORD_OK && EnterMasterPasswordAndSet(newmasterpasswd_dlg, hWnd) != 0)\r
break;\r
#endif\r
\r
+ // 上位のディレクトリへ移動対応\r
+ case MENU_REMOTE_MOVE_UPDIR :\r
+ MoveRemoteFileProc(-1);\r
+ break;\r
+\r
+ // FileZilla XML形式エクスポート対応\r
+ case MENU_EXPORT_FILEZILLA_XML :\r
+ // 平文で出力するためマスターパスワードを再確認\r
+ if(GetMasterPasswordStatus() == PASSWORD_OK)\r
+ {\r
+ char Password[MAX_PASSWORD_LEN + 1];\r
+ GetMasterPassword(Password);\r
+ SetMasterPassword(NULL);\r
+ while(ValidateMasterPassword() == YES && GetMasterPasswordStatus() == PASSWORD_UNMATCH)\r
+ {\r
+ if(EnterMasterPasswordAndSet(masterpasswd_dlg, hWnd) == 0)\r
+ break;\r
+ }\r
+ if(GetMasterPasswordStatus() == PASSWORD_OK)\r
+ SaveSettingsToFileZillaXml();\r
+ else\r
+ {\r
+ SetMasterPassword(Password);\r
+ ValidateMasterPassword();\r
+ }\r
+ }\r
+ break;\r
+\r
+ // ソフトウェア自動更新\r
+ case MENU_UPDATES_CHECK :\r
+ UpdateSoftware(NO, NO, NO);\r
+ break;\r
+\r
default :\r
if((LOWORD(wParam) >= MENU_BMARK_TOP) &&\r
(LOWORD(wParam) < MENU_BMARK_TOP+100))\r
FindCloseChangeNotification(ChangeNotification);\r
// タスクバー進捗表示\r
KillTimer(hWnd, 2);\r
+ // ソフトウェア自動更新\r
+ KillTimer(hWnd, 3);\r
// WSACleanup();\r
// DestroyWindow(hWndFtp);\r
PostQuitMessage(0);\r
{\r
int Ret;\r
char Tmp[FMAX_PATH+1];\r
+ // ソフトウェア自動更新\r
+ int i;\r
\r
*AutoConnect = -1;\r
*CmdOption = 0;\r
}\r
// プロセス保護\r
#ifdef ENABLE_PROCESS_PROTECTION\r
- else if(strcmp(Tmp, "--restart") == 0)\r
+ else if(strcmp(&Tmp[1], "-restart") == 0)\r
{\r
}\r
- else if(strcmp(Tmp, "--protect") == 0)\r
+ else if(strcmp(&Tmp[1], "-protect") == 0)\r
{\r
}\r
- else if(strcmp(Tmp, "--protect-high") == 0)\r
+ else if(strcmp(&Tmp[1], "-protect-high") == 0)\r
{\r
}\r
- else if(strcmp(Tmp, "--protect-medium") == 0)\r
+ else if(strcmp(&Tmp[1], "-protect-medium") == 0)\r
{\r
}\r
- else if(strcmp(Tmp, "--protect-low") == 0)\r
+ else if(strcmp(&Tmp[1], "-protect-low") == 0)\r
{\r
}\r
#endif\r
*CmdOption |= OPT_SJIS_NAME;\r
else if((strcmp(&Tmp[1], "u8n") == 0) || (strcmp(&Tmp[1], "-utf8name") == 0))\r
*CmdOption |= OPT_UTF8N_NAME;\r
+ // ソフトウェア自動更新\r
+ else if(strcmp(&Tmp[1], "-build-software-update") == 0)\r
+ {\r
+ for(i = 0; i < 6; i++)\r
+ {\r
+ if((Str = GetToken(Str, Tmp)) == NULL)\r
+ {\r
+ Ret = -1;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ else if(strcmp(&Tmp[1], "-software-update") == 0)\r
+ {\r
+ if((Str = GetToken(Str, Tmp)) == NULL)\r
+ {\r
+ Ret = -1;\r
+ }\r
+ }\r
+ else if(strcmp(&Tmp[1], "-software-cleanup") == 0)\r
+ {\r
+ if((Str = GetToken(Str, Tmp)) == NULL)\r
+ {\r
+ Ret = -1;\r
+ }\r
+ }\r
else\r
{\r
SetTaskMsg(MSGJPN180, Tmp);\r
InQuote = 0;\r
while(*Str != NUL)\r
{\r
- if(*Str == 0x22)\r
+ if(*Str == '\"')\r
InQuote = !InQuote;\r
else\r
{\r
SendMessage(GetSbarWnd(), WM_SIZE, SIZE_RESTORED, MAKELPARAM(Rect.right, Rect.bottom));\r
\r
CalcWinSize();\r
- SetWindowPos(GetMainTbarWnd(), 0, 0, 0, Rect.right, TOOLWIN_HEIGHT, SWP_NOACTIVATE | SWP_NOZORDER);\r
- SetWindowPos(GetLocalTbarWnd(), 0, 0, TOOLWIN_HEIGHT, LocalWidth, TOOLWIN_HEIGHT, SWP_NOACTIVATE | SWP_NOZORDER);\r
- SetWindowPos(GetRemoteTbarWnd(), 0, LocalWidth + SepaWidth, TOOLWIN_HEIGHT, RemoteWidth, TOOLWIN_HEIGHT, SWP_NOACTIVATE | SWP_NOZORDER);\r
+ // 高DPI対応\r
+// SetWindowPos(GetMainTbarWnd(), 0, 0, 0, Rect.right, TOOLWIN_HEIGHT, SWP_NOACTIVATE | SWP_NOZORDER);\r
+// SetWindowPos(GetLocalTbarWnd(), 0, 0, TOOLWIN_HEIGHT, LocalWidth, TOOLWIN_HEIGHT, SWP_NOACTIVATE | SWP_NOZORDER);\r
+// SetWindowPos(GetRemoteTbarWnd(), 0, LocalWidth + SepaWidth, TOOLWIN_HEIGHT, RemoteWidth, TOOLWIN_HEIGHT, SWP_NOACTIVATE | SWP_NOZORDER);\r
+ SetWindowPos(GetMainTbarWnd(), 0, 0, 0, Rect.right, AskToolWinHeight(), SWP_NOACTIVATE | SWP_NOZORDER);\r
+ SetWindowPos(GetLocalTbarWnd(), 0, 0, AskToolWinHeight(), LocalWidth, AskToolWinHeight(), SWP_NOACTIVATE | SWP_NOZORDER);\r
+ SetWindowPos(GetRemoteTbarWnd(), 0, LocalWidth + SepaWidth, AskToolWinHeight(), RemoteWidth, AskToolWinHeight(), SWP_NOACTIVATE | SWP_NOZORDER);\r
SendMessage(GetLocalTbarWnd(), TB_GETITEMRECT, 3, (LPARAM)&Rect);\r
SetWindowPos(GetLocalHistHwnd(), 0, Rect.right, Rect.top, LocalWidth - Rect.right, 200, SWP_NOACTIVATE | SWP_NOZORDER);\r
SendMessage(GetRemoteTbarWnd(), TB_GETITEMRECT, 3, (LPARAM)&Rect);\r
SetWindowPos(GetRemoteHistHwnd(), 0, Rect.right, Rect.top, RemoteWidth - Rect.right, 200, SWP_NOACTIVATE | SWP_NOZORDER);\r
- SetWindowPos(GetLocalHwnd(), 0, 0, TOOLWIN_HEIGHT*2, LocalWidth, ListHeight, SWP_NOACTIVATE | SWP_NOZORDER);\r
- SetWindowPos(GetRemoteHwnd(), 0, LocalWidth + SepaWidth, TOOLWIN_HEIGHT*2, RemoteWidth, ListHeight, SWP_NOACTIVATE | SWP_NOZORDER);\r
- SetWindowPos(GetTaskWnd(), 0, 0, TOOLWIN_HEIGHT*2+ListHeight+SepaWidth, ClientWidth, TaskHeight, SWP_NOACTIVATE | SWP_NOZORDER);\r
+ // 高DPI対応\r
+// SetWindowPos(GetLocalHwnd(), 0, 0, TOOLWIN_HEIGHT*2, LocalWidth, ListHeight, SWP_NOACTIVATE | SWP_NOZORDER);\r
+// SetWindowPos(GetRemoteHwnd(), 0, LocalWidth + SepaWidth, TOOLWIN_HEIGHT*2, RemoteWidth, ListHeight, SWP_NOACTIVATE | SWP_NOZORDER);\r
+// SetWindowPos(GetTaskWnd(), 0, 0, TOOLWIN_HEIGHT*2+ListHeight+SepaWidth, ClientWidth, TaskHeight, SWP_NOACTIVATE | SWP_NOZORDER);\r
+ SetWindowPos(GetLocalHwnd(), 0, 0, AskToolWinHeight()*2, LocalWidth, ListHeight, SWP_NOACTIVATE | SWP_NOZORDER);\r
+ SetWindowPos(GetRemoteHwnd(), 0, LocalWidth + SepaWidth, AskToolWinHeight()*2, RemoteWidth, ListHeight, SWP_NOACTIVATE | SWP_NOZORDER);\r
+ SetWindowPos(GetTaskWnd(), 0, 0, AskToolWinHeight()*2+ListHeight+SepaWidth, ClientWidth, TaskHeight, SWP_NOACTIVATE | SWP_NOZORDER);\r
#endif\r
\r
return;\r
\r
GetClientRect(GetSbarWnd(), &Rect);\r
\r
- ListHeight = max1(0, ClientHeight - TOOLWIN_HEIGHT * 2 - TaskHeight - SepaWidth - Rect.bottom);\r
+ // 高DPI対応\r
+// ListHeight = max1(0, ClientHeight - TOOLWIN_HEIGHT * 2 - TaskHeight - SepaWidth - Rect.bottom);\r
+ ListHeight = max1(0, ClientHeight - AskToolWinHeight() * 2 - TaskHeight - SepaWidth - Rect.bottom);\r
\r
return;\r
}\r
\r
if((Resizing == RESIZE_OFF) && (Keys == 0))\r
{\r
+ // 高DPI対応\r
+// if((x >= LocalWidth) && (x <= LocalWidth + SepaWidth) &&\r
+// (y > TOOLWIN_HEIGHT) && (y < (TOOLWIN_HEIGHT * 2 + ListHeight)))\r
if((x >= LocalWidth) && (x <= LocalWidth + SepaWidth) &&\r
- (y > TOOLWIN_HEIGHT) && (y < (TOOLWIN_HEIGHT * 2 + ListHeight)))\r
+ (y > AskToolWinHeight()) && (y < (AskToolWinHeight() * 2 + ListHeight)))\r
{\r
/* 境界位置変更用カーソルに変更 */\r
SetCapture(hWndFtp);\r
Resizing = RESIZE_PREPARE;\r
ResizePos = RESIZE_HPOS;\r
}\r
- else if((y >= TOOLWIN_HEIGHT*2+ListHeight) && (y <= TOOLWIN_HEIGHT*2+ListHeight+SepaWidth))\r
+ // 高DPI対応\r
+// else if((y >= TOOLWIN_HEIGHT*2+ListHeight) && (y <= TOOLWIN_HEIGHT*2+ListHeight+SepaWidth))\r
+ else if((y >= AskToolWinHeight()*2+ListHeight) && (y <= AskToolWinHeight()*2+ListHeight+SepaWidth))\r
{\r
/* 境界位置変更用カーソルに変更 */\r
SetCapture(hWndFtp);\r
GetClientRect(GetSbarWnd(), &Rect1);\r
Rect.left += GetSystemMetrics(SM_CXFRAME);\r
Rect.right -= GetSystemMetrics(SM_CXFRAME);\r
- Rect.top += TOOLWIN_HEIGHT*2 + GetSystemMetrics(SM_CYMENU) + GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CYFRAME);\r
+ // 高DPI対応\r
+// Rect.top += TOOLWIN_HEIGHT*2 + GetSystemMetrics(SM_CYMENU) + GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CYFRAME);\r
+ Rect.top += AskToolWinHeight()*2 + GetSystemMetrics(SM_CYMENU) + GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CYFRAME);\r
Rect.bottom -= GetSystemMetrics(SM_CYFRAME) + Rect1.bottom;\r
ClipCursor(&Rect);\r
}\r
else\r
{\r
+ // 高DPI対応\r
+// if(((ResizePos == RESIZE_HPOS) &&\r
+// ((x < LocalWidth) || (x > LocalWidth + SepaWidth) ||\r
+// (y <= TOOLWIN_HEIGHT) || (y >= (TOOLWIN_HEIGHT * 2 + ListHeight)))) ||\r
+// ((ResizePos == RESIZE_VPOS) &&\r
+// ((y < TOOLWIN_HEIGHT*2+ListHeight) || (y > TOOLWIN_HEIGHT*2+ListHeight+SepaWidth))))\r
if(((ResizePos == RESIZE_HPOS) &&\r
((x < LocalWidth) || (x > LocalWidth + SepaWidth) ||\r
- (y <= TOOLWIN_HEIGHT) || (y >= (TOOLWIN_HEIGHT * 2 + ListHeight)))) ||\r
+ (y <= AskToolWinHeight()) || (y >= (AskToolWinHeight() * 2 + ListHeight)))) ||\r
((ResizePos == RESIZE_VPOS) &&\r
- ((y < TOOLWIN_HEIGHT*2+ListHeight) || (y > TOOLWIN_HEIGHT*2+ListHeight+SepaWidth))))\r
+ ((y < AskToolWinHeight()*2+ListHeight) || (y > AskToolWinHeight()*2+ListHeight+SepaWidth))))\r
{\r
/* 元のカーソルに戻す */\r
ReleaseCapture();\r
for(i = 0; i < 5; i++)\r
Hash[i] = _byteswap_ulong(Hash[i]);\r
// 同梱する"ssl.pem"に合わせてSHA1ハッシュ値を変更すること\r
- if(memcmp(&Hash, &SSLRootCAFileHash, 20) == 0 || memcmp(&Hash, "\xCD\xD3\xB3\xB8\x9B\x42\x85\x25\x73\xD8\xD4\xBC\xCB\x0B\xA2\x8A\x20\x38\xF4\x6C", 20) == 0\r
+ if(memcmp(&Hash, &SSLRootCAFileHash, 20) == 0 || memcmp(&Hash, "\xE8\xE7\x94\x39\x27\x66\xCC\xA1\x52\x88\x58\xA2\x29\xAC\x04\x6B\x0F\x5D\x58\x01", 20) == 0\r
|| DialogBox(GetFtpInst(), MAKEINTRESOURCE(updatesslroot_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)\r
{\r
memcpy(&SSLRootCAFileHash, &Hash, 20);\r
return Sts;\r
}\r
\r
-void RestartAndTerminate()\r
+void Terminate()\r
{\r
- Restart();\r
exit(1);\r
}\r
\r
pTaskbarList3->lpVtbl->SetProgressState(pTaskbarList3, GetMainHwnd(), TBPF_NOPROGRESS);\r
}\r
\r
+// 高DPI対応\r
+int AskToolWinHeight(void)\r
+{\r
+ return(ToolWinHeight);\r
+}\r
+\r
+// ソフトウェア自動更新\r
+typedef struct\r
+{\r
+ int NoError;\r
+ int NoConfirm;\r
+} UPDATESOFTWAREDATA;\r
+\r
+DWORD WINAPI UpdateSoftwareThreadProc(LPVOID lpParameter)\r
+{\r
+ UPDATESOFTWAREDATA* pData;\r
+ pData = (UPDATESOFTWAREDATA*)lpParameter;\r
+ UpdateSoftware(NO, pData->NoError, pData->NoConfirm);\r
+ free(pData);\r
+ return 0;\r
+}\r
+\r
+void UpdateSoftware(int Async, int NoError, int NoConfirm)\r
+{\r
+ UPDATESOFTWAREDATA* pData;\r
+ DWORD Version;\r
+ char VersionString[32];\r
+ char Description[1024];\r
+ char Tmp[2048];\r
+ if(Async == YES)\r
+ {\r
+ if(pData = malloc(sizeof(UPDATESOFTWAREDATA)))\r
+ {\r
+ pData->NoError = NoError;\r
+ pData->NoConfirm = NoConfirm;\r
+ CloseHandle(CreateThread(NULL, 0, UpdateSoftwareThreadProc, pData, 0, NULL));\r
+ }\r
+ }\r
+ else\r
+ {\r
+ // 念のためマスターパスワードの一致を確認\r
+ if(GetMasterPasswordStatus() == PASSWORD_OK)\r
+ {\r
+ Version = RELEASE_VERSION_NUM;\r
+ LastAutoCheckForUpdates = time(NULL);\r
+ if(CheckForUpdates(FALSE, NULL, &Version, VersionString, Description))\r
+ {\r
+ if(Version > RELEASE_VERSION_NUM)\r
+ {\r
+ sprintf(Tmp, MSGJPN361, VER_STR, VersionString, Description);\r
+ if(NoConfirm == YES || MessageBox(GetMainHwnd(), Tmp, "FFFTP", MB_YESNO) == IDYES)\r
+ {\r
+ strcpy(Tmp, TmpPath);\r
+ SetYenTail(Tmp);\r
+ strcat(Tmp, "update");\r
+ _mkdir(Tmp);\r
+ if(CheckForUpdates(TRUE, Tmp, &Version, VersionString, Description))\r
+ {\r
+ MessageBox(GetMainHwnd(), MSGJPN364, "FFFTP", MB_OK);\r
+ ApplyUpdatesOnExit = YES;\r
+ }\r
+ else if(NoError == NO)\r
+ MessageBox(GetMainHwnd(), MSGJPN362, "FFFTP", MB_OK | MB_ICONERROR);\r
+ }\r
+ }\r
+ else if(NoError == NO)\r
+ MessageBox(GetMainHwnd(), MSGJPN363, "FFFTP", MB_OK);\r
+ }\r
+ else if(NoError == NO)\r
+ MessageBox(GetMainHwnd(), MSGJPN362, "FFFTP", MB_OK | MB_ICONERROR);\r
+ }\r
+ }\r
+}\r
+\r