#include <stdlib.h>\r
#include <string.h>\r
#include <mbstring.h>\r
+// 自動切断対策\r
+#include <time.h>\r
#include <malloc.h>\r
#include <windowsx.h>\r
#include <commctrl.h>\r
#include <stdarg.h>\r
// IPv6対応\r
//#include <winsock.h>\r
+// タスクバー進捗表示\r
+#include <shobjidl.h>\r
\r
#include "common.h"\r
#include "resource.h"\r
#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
\r
int CancelFlg;\r
\r
-static int SuppressRefresh = 0;\r
+// 外部アプリケーションへドロップ後にローカル側のファイル一覧に作業フォルダが表示されるバグ対策\r
+//static int SuppressRefresh = 0;\r
+int SuppressRefresh = 0;\r
\r
static DWORD dwCookie;\r
\r
static char SSLRootCAFilePath[FMAX_PATH+1];\r
// マルチコアCPUの特定環境下でファイル通信中にクラッシュするバグ対策\r
static DWORD MainThreadId;\r
+// ポータブル版判定\r
+static char PortableFilePath[FMAX_PATH+1];\r
+static int PortableVersion;\r
+// ローカル側自動更新\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 WinHeight = 513;\r
int LocalWidth = 389;\r
int TaskHeight = 100;\r
-int LocalTabWidth[4] = { 160, 110, 60, 37 };\r
-int RemoteTabWidth[6] = { 160, 110, 60, 37, 60, 60 };\r
+int LocalTabWidth[4] = { 150, 120, 60, 37 };\r
+int RemoteTabWidth[6] = { 150, 120, 60, 37, 60, 60 };\r
char UserMailAdrs[USER_MAIL_LEN+1] = { "who@example.com" };\r
char ViewerName[VIEWERS][FMAX_PATH+1] = { { "notepad" }, { "" }, { "" } };\r
HFONT ListFont = NULL;\r
int ConnectOnStart = YES;\r
int DebugConsole = NO;\r
int SaveWinPos = NO;\r
-char AsciiExt[ASCII_EXT_LEN+1] = { "*.txt\0*.html\0*.htm\0*.cgi\0*.pl\0" };\r
+// アスキーモード判別の改良\r
+//char AsciiExt[ASCII_EXT_LEN+1] = { "*.txt\0*.html\0*.htm\0*.cgi\0*.pl\0" };\r
+char AsciiExt[ASCII_EXT_LEN+1] = { "*.txt\0*.html\0*.htm\0*.cgi\0*.pl\0*.js\0*.vbs\0*.css\0*.rss\0*.rdf\0*.xml\0*.xhtml\0*.xht\0*.shtml\0*.shtm\0*.sh\0*.py\0*.rb\0*.properties\0*.sql\0*.asp\0*.aspx\0*.php\0*.htaccess\0" };\r
int RecvMode = TRANS_DLG;\r
int SendMode = TRANS_DLG;\r
int MoveMode = MOVE_DLG;\r
int FwallType = 1;\r
int FwallDefault = NO;\r
int FwallSecurity = SECURITY_AUTO;\r
-int FwallResolv = NO;\r
+int FwallResolve = NO;\r
int FwallLower = NO;\r
int FwallDelimiter = '@';\r
-int PasvDefault = NO;\r
+// ルータ対策\r
+//int PasvDefault = NO;\r
+int PasvDefault = YES;\r
char MirrorNoTrn[MIRROR_LEN+1] = { "*.bak\0" };\r
char MirrorNoDel[MIRROR_LEN+1] = { "" };\r
int MirrorFnameCnv = NO;\r
// 暗号化通信対応\r
BYTE CertificateCacheHash[MAX_CERT_CACHE_HASH][20];\r
BYTE SSLRootCAFileHash[20];\r
+// ファイルアイコン表示対応\r
+int DispFileIcon = NO;\r
+// タイムスタンプのバグ修正\r
+int DispTimeSeconds = NO;\r
+// ファイルの属性を数字で表示\r
+int DispPermissionsNumber = NO;\r
+// ディレクトリ自動作成\r
+int MakeAllDir = YES;\r
+// UTF-8対応\r
+int LocalKanjiCode = KANJI_SJIS;\r
+// 自動切断対策\r
+int NoopEnable = NO;\r
+// UPnP対応\r
+int UPnPEnabled = YES;\r
+time_t LastDataConnectionTime = 0;\r
+// 全設定暗号化対応\r
+int EncryptAllSettings = NO;\r
+// ローカル側自動更新\r
+int AutoRefreshFileList = YES;\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
\r
MSG Msg;\r
int Ret;\r
BOOL Sts;\r
+ // ソフトウェア自動更新\r
+ char UpdateDir[FMAX_PATH+1];\r
+ char Path[FMAX_PATH+1];\r
+ char Command[FMAX_PATH+1];\r
+ char* p;\r
\r
// プロセス保護\r
#ifdef ENABLE_PROCESS_PROTECTION\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
{\r
- if(strcmp(Option, "--protect") == 0)\r
- {\r
- ProtectLevel = PROCESS_PROTECTION_DEFAULT;\r
- break;\r
- }\r
- else if(strcmp(Option, "--protect-high") == 0)\r
- {\r
- ProtectLevel = PROCESS_PROTECTION_HIGH;\r
- break;\r
- }\r
- else if(strcmp(Option, "--protect-medium") == 0)\r
- {\r
- ProtectLevel = PROCESS_PROTECTION_MEDIUM;\r
- break;\r
- }\r
- else if(strcmp(Option, "--protect-low") == 0)\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
{\r
- ProtectLevel = PROCESS_PROTECTION_LOW;\r
- break;\r
+ if(Option[0] == '-')\r
+ {\r
+ if(strcmp(&Option[1], "-protect") == 0)\r
+ {\r
+ ProtectLevel = PROCESS_PROTECTION_DEFAULT;\r
+ break;\r
+ }\r
+ else if(strcmp(&Option[1], "-protect-high") == 0)\r
+ {\r
+ ProtectLevel = PROCESS_PROTECTION_HIGH;\r
+ break;\r
+ }\r
+ else if(strcmp(&Option[1], "-protect-medium") == 0)\r
+ {\r
+ ProtectLevel = PROCESS_PROTECTION_MEDIUM;\r
+ break;\r
+ }\r
+ else if(strcmp(&Option[1], "-protect-low") == 0)\r
+ {\r
+ ProtectLevel = PROCESS_PROTECTION_LOW;\r
+ break;\r
+ }\r
+ }\r
}\r
- }\r
- if(ProtectLevel != PROCESS_PROTECTION_NONE)\r
- {\r
- SetProcessProtectionLevel(ProtectLevel);\r
- if(!InitializeLoadLibraryHook())\r
+ if(ProtectLevel != PROCESS_PROTECTION_NONE)\r
{\r
- MessageBox(NULL, MSGJPN321, "FFFTP", MB_OK | MB_ICONERROR);\r
- return 0;\r
- }\r
+ SetProcessProtectionLevel(ProtectLevel);\r
+ if(!InitializeLoadLibraryHook())\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
+ if(!EnableLoadLibraryHook(TRUE))\r
+ {\r
+ MessageBox(NULL, MSGJPN324, "FFFTP", MB_OK | MB_ICONERROR);\r
+ return 0;\r
+ }\r
}\r
+ else\r
+ InitializeLoadLibraryHook();\r
}\r
- else\r
- InitializeLoadLibraryHook();\r
#endif\r
\r
+ // ソフトウェア自動更新\r
+ if(GetTokenAfterOption(lpszCmdLine, UpdateDir, "-software-update", "-software-update"))\r
+ {\r
+ if(!RestartUpdateProcessAsAdministrator(lpszCmdLine, " --restart"))\r
+ {\r
+ Sleep(1000);\r
+ if(ApplyUpdates(UpdateDir, "updatebackup"))\r
+ MessageBox(NULL, MSGJPN359, "FFFTP", MB_OK);\r
+ else\r
+ MessageBox(NULL, MSGJPN360, "FFFTP", MB_OK | MB_ICONERROR);\r
+ }\r
+ return 0;\r
+ }\r
+ else if(GetTokenAfterOption(lpszCmdLine, UpdateDir, "-software-cleanup", "-software-cleanup"))\r
+ {\r
+ CleanupUpdates(UpdateDir);\r
+ }\r
+\r
// マルチコアCPUの特定環境下でファイル通信中にクラッシュするバグ対策\r
#ifdef DISABLE_MULTI_CPUS\r
SetProcessAffinityMask(GetCurrentProcess(), 1);\r
\r
InitCommonControls();\r
\r
+ // UPnP対応\r
+ CoInitialize(NULL);\r
+ LoadUPnP();\r
+ // タスクバー進捗表示\r
+ LoadTaskbarList3();\r
+\r
+ // UTF-8対応\r
+ LoadUnicodeNormalizationDll();\r
+\r
// FTPS対応\r
#ifdef USE_OPENSSL\r
LoadOpenSSL();\r
#endif\r
\r
+ // SFTP対応\r
+ LoadPuTTY();\r
+\r
Ret = FALSE;\r
hWndFtp = NULL;\r
hInstFtp = hInstance;\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, MSGJPN360, "FFFTP", MB_OK | MB_ICONERROR);\r
+ }\r
return(Ret);\r
}\r
\r
char PwdBuf[FMAX_PATH+1];\r
int useDefautPassword = 0; /* 警告文表示用 */\r
int masterpass;\r
+ // ポータブル版判定\r
+ int ImportPortable;\r
+ // 高DPI対応\r
+ int i;\r
\r
sts = FFFTP_FAIL;\r
\r
{\r
Accel = LoadAccelerators(hInstFtp, MAKEINTRESOURCE(ffftp_accel));\r
\r
- GetTempPath(FMAX_PATH, TmpPath);\r
+ // 環境依存の不具合対策\r
+// GetTempPath(FMAX_PATH, TmpPath);\r
+ GetAppTempPath(TmpPath);\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
ForceIni = YES;\r
RegType = REGTYPE_INI;\r
}\r
+ // ポータブル版判定\r
+ GetModuleFileName(NULL, PortableFilePath, FMAX_PATH);\r
+ strcpy(GetFileName(PortableFilePath), "portable");\r
+ CheckPortableVersion();\r
+ ImportPortable = NO;\r
+ if(PortableVersion == YES)\r
+ {\r
+ ForceIni = YES;\r
+ RegType = REGTYPE_INI;\r
+ if(IsRegAvailable() == YES && IsIniAvailable() == NO)\r
+ {\r
+ if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(ini_from_reg_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)\r
+ ImportPortable = YES;\r
+ }\r
+ }\r
+ // バージョン確認\r
+ if(ReadSettingsVersion() > VER_NUM)\r
+ {\r
+ if(IsRegAvailable() == YES && IsIniAvailable() == NO)\r
+ {\r
+ switch(MessageBox(GetMainHwnd(), MSGJPN351, "FFFTP", MB_YESNOCANCEL | MB_DEFBUTTON2))\r
+ {\r
+ case IDCANCEL:\r
+ ReadOnlySettings = YES;\r
+ break;\r
+ case IDYES:\r
+ break;\r
+ case IDNO:\r
+ ImportPortable = YES;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ // ポータブル版判定\r
+ if(ImportPortable == YES)\r
+ {\r
+ ForceIni = NO;\r
+ RegType = REGTYPE_REG;\r
+ }\r
\r
// AllocConsole();\r
\r
/* 2010.02.01 genta マスターパスワードを入力させる\r
-z オプションがあるときは最初だけスキップ\r
-z オプションがないときは,デフォルトパスワードをまず試す\r
- LoadRegistory()する\r
+ LoadRegistry()する\r
パスワードが不一致なら再入力するか尋ねる.\r
(破損していた場合はさせない)\r
*/\r
\r
if(masterpass != 0)\r
{\r
- LoadRegistory();\r
+ LoadRegistry();\r
+\r
+ // ポータブル版判定\r
+ if(ImportPortable == YES)\r
+ {\r
+ ForceIni = YES;\r
+ RegType = REGTYPE_INI;\r
+ }\r
\r
// 暗号化通信対応\r
SetSSLTimeoutCallback(TimeOut * 1000, SSLTimeoutCallback);\r
DispTransferType();\r
SetHostKanaCnvImm(YES);\r
SetHostKanjiCodeImm(KANJI_NOCNV);\r
- // 本当はローカルのデフォルトをUTF-8にしたいが旧バージョンとの互換性のためShift_JISに設定\r
-// SetLocalKanjiCodeImm(KANJI_UTF8N);\r
- SetLocalKanjiCodeImm(KANJI_SJIS);\r
+ // UTF-8対応\r
+ SetLocalKanjiCodeImm(LocalKanjiCode);\r
DispListType();\r
DispDotFileMode();\r
DispSyncMoveMode();\r
DispWindowTitle();\r
// SourceForge.JPによるフォーク\r
// SetTaskMsg("FFFTP Ver." VER_STR " Copyright(C) 1997-2010 Sota & cooperators.");\r
- SetTaskMsg("FFFTP Ver." VER_STR " Copyright(C) 1997-2010 Sota & cooperators.\r\nCopyright (C) 2011 FFFTP Project (Hiromichi Matsushima, Suguru Kawamoto, IWAMOTO Kouichi, vitamin0x, unarist, Asami, fortran90, tomo1192).");\r
+ SetTaskMsg("FFFTP Ver." VER_STR " Copyright(C) 1997-2010 Sota & cooperators.\r\nCopyright (C) 2011-2014 FFFTP Project (Hiromichi Matsushima, Suguru Kawamoto, IWAMOTO Kouichi, vitamin0x, unarist, Asami, fortran90, tomo1192, Yuji Tanaka, Moriguchi Hirokazu, Fu-sen).");\r
\r
if(ForceIni)\r
SetTaskMsg("%s%s", MSGJPN283, IniPath);\r
MakeButtonsFocus();\r
DispTransferFiles();\r
\r
+ // ソフトウェア自動更新\r
+ if(AutoCheckForUptatesInterval == 0)\r
+ UpdateSoftware(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
char Tmp[HOST_ADRS_LEN+FILTER_EXT_LEN+20];\r
\r
if(AskConnecting() == YES)\r
- sprintf(Tmp, "%s (%s) - FFFTP", TitleHostName, FilterStr);\r
+ // 暗号化通信対応\r
+// sprintf(Tmp, "%s (%s) - FFFTP", TitleHostName, FilterStr);\r
+ {\r
+ switch(AskCryptMode())\r
+ {\r
+ case CRYPT_NONE:\r
+ sprintf(Tmp, "%s (%s) %s - FFFTP", TitleHostName, FilterStr, MSGJPN352);\r
+ break;\r
+ case CRYPT_FTPES:\r
+ sprintf(Tmp, "%s (%s) %s - FFFTP", TitleHostName, FilterStr, MSGJPN353);\r
+ break;\r
+ case CRYPT_FTPIS:\r
+ sprintf(Tmp, "%s (%s) %s - FFFTP", TitleHostName, FilterStr, MSGJPN354);\r
+ break;\r
+ case CRYPT_SFTP:\r
+ sprintf(Tmp, "%s (%s) %s - FFFTP", TitleHostName, FilterStr, MSGJPN355);\r
+ break;\r
+ }\r
+ }\r
else\r
sprintf(Tmp, "FFFTP (%s)", FilterStr);\r
\r
\r
switch (message)\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
- if(wParam == 1)\r
- NoopProc();\r
+ switch(wParam)\r
+ {\r
+ case 1:\r
+ if(WaitForSingleObject(ChangeNotification, 0) == WAIT_OBJECT_0)\r
+ {\r
+ if(AskUserOpeDisabled() == NO)\r
+ {\r
+ FindNextChangeNotification(ChangeNotification);\r
+ if(AutoRefreshFileList == YES)\r
+ {\r
+ FILELIST* Base;\r
+ char Name[FMAX_PATH+1];\r
+ int Pos;\r
+ Base = NULL;\r
+ MakeSelectedFileList(WIN_LOCAL, NO, NO, &Base, &CancelFlg);\r
+ GetHotSelected(WIN_LOCAL, Name);\r
+ Pos = SendMessage(GetLocalHwnd(), LVM_GETTOPINDEX, 0, 0);\r
+ GetLocalDirForWnd();\r
+ SelectFileInList(GetLocalHwnd(), SELECT_LIST, Base);\r
+ SetHotSelected(WIN_LOCAL, Name);\r
+ SendMessage(GetLocalHwnd(), LVM_ENSUREVISIBLE, (WPARAM)(SendMessage(GetLocalHwnd(), LVM_GETITEMCOUNT, 0, 0) - 1), (LPARAM)TRUE);\r
+ SendMessage(GetLocalHwnd(), LVM_ENSUREVISIBLE, (WPARAM)Pos, (LPARAM)TRUE);\r
+ }\r
+ }\r
+ }\r
+ if(NoopEnable == YES && AskNoopInterval() > 0 && time(NULL) - LastDataConnectionTime >= AskNoopInterval())\r
+ {\r
+ NoopProc(NO);\r
+ LastDataConnectionTime = time(NULL);\r
+ }\r
+ break;\r
+ case 2:\r
+ if(IsTaskbarList3Loaded() == YES)\r
+ UpdateTaskbarProgress();\r
+ break;\r
+ case 3:\r
+ if(AskUserOpeDisabled() == NO && AskTransferNow() == NO)\r
+ {\r
+ if(AutoCheckForUptatesInterval > 0 && time(NULL) - LastAutoCheckForUpdates >= AutoCheckForUptatesInterval * 86400)\r
+ UpdateSoftware(YES, AutoApplyUpdates);\r
+ }\r
+ break;\r
+ }\r
break;\r
\r
case WM_COMMAND :\r
{\r
case MENU_CONNECT :\r
// 自動切断対策\r
- KillTimer(hWnd, 1);\r
+ NoopEnable = NO;\r
ConnectProc(DLG_TYPE_CON, -1);\r
// 自動切断対策\r
- if(AskNoopInterval() > 0)\r
- SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
+ NoopEnable = YES;\r
break;\r
\r
case MENU_CONNECT_NUM :\r
// 自動切断対策\r
- KillTimer(hWnd, 1);\r
+ NoopEnable = NO;\r
ConnectProc(DLG_TYPE_CON, (int)lParam);\r
// 自動切断対策\r
- if(AskNoopInterval() > 0)\r
- SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
+ NoopEnable = YES;\r
if(AskConnecting() == YES)\r
{\r
if(HIWORD(wParam) & OPT_MIRROR)\r
\r
case MENU_SET_CONNECT :\r
// 自動切断対策\r
- KillTimer(hWnd, 1);\r
+ NoopEnable = NO;\r
ConnectProc(DLG_TYPE_SET, -1);\r
// 自動切断対策\r
- if(AskNoopInterval() > 0)\r
- SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
+ NoopEnable = YES;\r
break;\r
\r
case MENU_QUICK :\r
// 自動切断対策\r
- KillTimer(hWnd, 1);\r
+ NoopEnable = NO;\r
QuickConnectProc();\r
// 自動切断対策\r
- if(AskNoopInterval() > 0)\r
- SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
+ NoopEnable = YES;\r
break;\r
\r
case MENU_DISCONNECT :\r
case MENU_HIST_19 :\r
case MENU_HIST_20 :\r
// 自動切断対策\r
- KillTimer(hWnd, 1);\r
+ NoopEnable = NO;\r
HistoryConnectProc(LOWORD(wParam));\r
// 自動切断対策\r
- if(AskNoopInterval() > 0)\r
- SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
+ NoopEnable = YES;\r
break;\r
\r
case MENU_UPDIR :\r
\r
case MENU_DCLICK :\r
if(hWndCurFocus == GetLocalHwnd())\r
+ // ローカルフォルダを開く\r
+// DoubleClickProc(WIN_LOCAL, YES, -1);\r
+ DoubleClickProc(WIN_LOCAL, NO, -1);\r
+ else\r
+ {\r
+ SuppressRefresh = 1;\r
+ // ローカルフォルダを開く\r
+// DoubleClickProc(WIN_REMOTE, YES, -1);\r
+ DoubleClickProc(WIN_REMOTE, NO, -1);\r
+ SuppressRefresh = 0;\r
+ }\r
+ break;\r
+\r
+ // ローカルフォルダを開く\r
+ case MENU_OPEN :\r
+ if(hWndCurFocus == GetLocalHwnd())\r
DoubleClickProc(WIN_LOCAL, YES, -1);\r
else\r
{\r
break;\r
\r
case MENU_REMOTE_UPDIR :\r
+ // デッドロック対策\r
+ if(AskUserOpeDisabled() == YES)\r
+ break;\r
SuppressRefresh = 1;\r
SetCurrentDirAsDirHist();\r
ChangeDir(WIN_REMOTE, "..");\r
break;\r
\r
case MENU_LOCAL_UPDIR :\r
+ // デッドロック対策\r
+ if(AskUserOpeDisabled() == YES)\r
+ break;\r
SetCurrentDirAsDirHist();\r
ChangeDir(WIN_LOCAL, "..");\r
break;\r
\r
case MENU_DOWNLOAD :\r
SetCurrentDirAsDirHist();\r
- DownLoadProc(NO, NO, NO);\r
+ DownloadProc(NO, NO, NO);\r
break;\r
\r
case MENU_DOWNLOAD_AS :\r
SetCurrentDirAsDirHist();\r
- DownLoadProc(YES, NO, NO);\r
+ DownloadProc(YES, NO, NO);\r
break;\r
\r
case MENU_DOWNLOAD_AS_FILE :\r
SetCurrentDirAsDirHist();\r
- DownLoadProc(NO, YES, NO);\r
+ DownloadProc(NO, YES, NO);\r
break;\r
\r
case MENU_DOWNLOAD_ALL :\r
SetCurrentDirAsDirHist();\r
- DownLoadProc(NO, NO, YES);\r
+ DownloadProc(NO, NO, YES);\r
break;\r
\r
case MENU_DOWNLOAD_NAME :\r
SetCurrentDirAsDirHist();\r
- InputDownLoadProc();\r
+ InputDownloadProc();\r
break;\r
\r
case MENU_UPLOAD :\r
SetCurrentDirAsDirHist();\r
- UpLoadListProc(NO, NO);\r
+ UploadListProc(NO, NO);\r
break;\r
\r
case MENU_UPLOAD_AS :\r
SetCurrentDirAsDirHist();\r
- UpLoadListProc(YES, NO);\r
+ UploadListProc(YES, NO);\r
break;\r
\r
case MENU_UPLOAD_ALL :\r
SetCurrentDirAsDirHist();\r
- UpLoadListProc(NO, YES);\r
+ UploadListProc(NO, YES);\r
break;\r
\r
case MENU_MIRROR_UPLOAD :\r
break;\r
\r
case MENU_REFRESH :\r
+ // デッドロック対策\r
+ if(AskUserOpeDisabled() == YES)\r
+ break;\r
// 同時接続対応\r
CancelFlg = NO;\r
SuppressRefresh = 1;\r
break;\r
\r
case REFRESH_LOCAL :\r
+ // デッドロック対策\r
+ if(AskUserOpeDisabled() == YES)\r
+ break;\r
GetLocalDirForWnd();\r
break;\r
\r
case REFRESH_REMOTE :\r
+ // デッドロック対策\r
+ if(AskUserOpeDisabled() == YES)\r
+ break;\r
// 同時接続対応\r
CancelFlg = NO;\r
SuppressRefresh = 1;\r
break;\r
\r
case MENU_SELECT_ALL :\r
- SelectFileInList(hWndCurFocus, SELECT_ALL);\r
+ // ローカル側自動更新\r
+// SelectFileInList(hWndCurFocus, SELECT_ALL);\r
+ SelectFileInList(hWndCurFocus, SELECT_ALL, NULL);\r
break;\r
\r
case MENU_SELECT :\r
- SelectFileInList(hWndCurFocus, SELECT_REGEXP);\r
+ // ローカル側自動更新\r
+// SelectFileInList(hWndCurFocus, SELECT_REGEXP);\r
+ SelectFileInList(hWndCurFocus, SELECT_REGEXP, NULL);\r
break;\r
\r
case MENU_FIND :\r
break;\r
\r
case MENU_DOTFILE :\r
+ // デッドロック対策\r
+ if(AskUserOpeDisabled() == YES)\r
+ break;\r
// 同時接続対応\r
CancelFlg = NO;\r
DotFile ^= 1;\r
\r
case MENU_REGSAVE :\r
GetListTabWidth();\r
- SaveRegistory();\r
+ SaveRegistry();\r
SaveSettingsToFile();\r
break;\r
\r
case MENU_REGINIT :\r
if(DialogBox(hInstFtp, MAKEINTRESOURCE(reginit_dlg), hWnd, ExeEscDialogProc) == YES)\r
{\r
- ClearRegistory();\r
+ ClearRegistry();\r
+ // ポータブル版判定\r
+ ClearIni();\r
SaveExit = NO;\r
PostMessage(hWnd, WM_CLOSE, 0, 0L);\r
}\r
if( DialogBox(hInstFtp, MAKEINTRESOURCE(forcepasschange_dlg), hWnd, ExeEscDialogProc) != YES){\r
break;\r
}\r
+ // セキュリティ強化\r
+ if(EnterMasterPasswordAndSet(newmasterpasswd_dlg, hWnd) != 0)\r
+ SetTaskMsg(MSGJPN303);\r
}\r
- if( EnterMasterPasswordAndSet( newmasterpasswd_dlg, hWnd ) != 0 ){\r
- SetTaskMsg( MSGJPN303 );\r
+ // セキュリティ強化\r
+// if( EnterMasterPasswordAndSet( newmasterpasswd_dlg, hWnd ) != 0 ){\r
+// SetTaskMsg( MSGJPN303 );\r
+// }\r
+ else 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 && EnterMasterPasswordAndSet(newmasterpasswd_dlg, hWnd) != 0)\r
+ {\r
+ SetTaskMsg(MSGJPN303);\r
+ SaveRegistry();\r
+ }\r
+ else\r
+ {\r
+ SetMasterPassword(Password);\r
+ ValidateMasterPassword();\r
+ }\r
}\r
break;\r
\r
OtpCalcTool();\r
break;\r
\r
+ // FTPS対応\r
+ case MENU_FW_FTP_FILTER :\r
+ TurnStatefulFTPFilter();\r
+ break;\r
+\r
case MENU_URL_COPY :\r
CopyURLtoClipBoard();\r
break;\r
LocalRbuttonMenu(1);\r
break;\r
\r
+#if defined(HAVE_TANDEM)\r
+ case MENU_SWITCH_OSS :\r
+ SwitchOSSProc();\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);\r
+ break;\r
+\r
default :\r
if((LOWORD(wParam) >= MENU_BMARK_TOP) &&\r
(LOWORD(wParam) < MENU_BMARK_TOP+100))\r
case MENU_DOWNLOAD :\r
lpttt->lpszText = MSGJPN157;\r
break;\r
+#if defined(HAVE_TANDEM)\r
+ case MENU_DOWNLOAD_AS :\r
+ lpttt->lpszText = MSGJPN065;\r
+ break;\r
\r
+ case MENU_UPLOAD_AS :\r
+ lpttt->lpszText = MSGJPN064;\r
+ break;\r
+#endif\r
case MENU_UPLOAD :\r
lpttt->lpszText = MSGJPN158;\r
break;\r
break;\r
\r
case WM_REFRESH_LOCAL_FLG :\r
- PostMessage(hWnd, WM_COMMAND, MAKEWPARAM(REFRESH_LOCAL, 0), 0);\r
+ // 外部アプリケーションへドロップ後にローカル側のファイル一覧に作業フォルダが表示されるバグ対策\r
+// PostMessage(hWnd, WM_COMMAND, MAKEWPARAM(REFRESH_LOCAL, 0), 0);\r
+ if(SuppressRefresh == 0)\r
+ PostMessage(hWnd, WM_COMMAND, MAKEWPARAM(REFRESH_LOCAL, 0), 0);\r
break;\r
\r
case WM_REFRESH_REMOTE_FLG :\r
break;\r
\r
case WM_DESTROY :\r
+ // ローカル側自動更新\r
+ KillTimer(hWnd, 1);\r
+ if(ChangeNotification != INVALID_HANDLE_VALUE)\r
+ FindCloseChangeNotification(ChangeNotification);\r
+ // タスクバー進捗表示\r
+ KillTimer(hWnd, 2);\r
+ // ソフトウェア自動更新\r
+ KillTimer(hWnd, 3);\r
// WSACleanup();\r
// DestroyWindow(hWndFtp);\r
PostQuitMessage(0);\r
if(CmdOption & OPT_SAVEON)\r
SuppressSave = NO;\r
\r
+ // UTF-8対応\r
+ if(CmdOption & OPT_SJIS)\r
+ Kanji = KANJI_SJIS;\r
+ if(CmdOption & OPT_UTF8N)\r
+ Kanji = KANJI_UTF8N;\r
+ if(CmdOption & OPT_UTF8BOM)\r
+ Kanji = KANJI_UTF8BOM;\r
+ if(CmdOption & OPT_SJIS_NAME)\r
+ FnameKanji = KANJI_SJIS;\r
+ if(CmdOption & OPT_UTF8N_NAME)\r
+ FnameKanji = KANJI_UTF8N;\r
+\r
if(Sts == 0)\r
{\r
if(ConnectOnStart == YES)\r
*CmdOption |= OPT_MIRROR;\r
else if((strcmp(&Tmp[1], "d") == 0) || (strcmp(&Tmp[1], "-mirrordown") == 0))\r
*CmdOption |= OPT_MIRRORDOWN;\r
- else if((strcmp(&Tmp[1], "e") == 0) || (strcmp(&Tmp[1], "-euc") == 0))\r
+ // 廃止予定\r
+// else if((strcmp(&Tmp[1], "e") == 0) || (strcmp(&Tmp[1], "-euc") == 0))\r
+// *CmdOption |= OPT_EUC;\r
+// else if((strcmp(&Tmp[1], "j") == 0) || (strcmp(&Tmp[1], "-jis") == 0))\r
+// *CmdOption |= OPT_JIS;\r
+ else if((strcmp(&Tmp[1], "eu") == 0) || (strcmp(&Tmp[1], "e") == 0) || (strcmp(&Tmp[1], "-euc") == 0))\r
*CmdOption |= OPT_EUC;\r
- else if((strcmp(&Tmp[1], "j") == 0) || (strcmp(&Tmp[1], "-jis") == 0))\r
+ else if((strcmp(&Tmp[1], "ji") == 0) || (strcmp(&Tmp[1], "j") == 0) || (strcmp(&Tmp[1], "-jis") == 0))\r
*CmdOption |= OPT_JIS;\r
else if((strcmp(&Tmp[1], "a") == 0) || (strcmp(&Tmp[1], "-ascii") == 0))\r
*CmdOption |= OPT_ASCII;\r
*CmdOption |= OPT_QUIT;\r
else if((strcmp(&Tmp[1], "k") == 0) || (strcmp(&Tmp[1], "-kana") == 0))\r
*CmdOption |= OPT_KANA;\r
- else if((strcmp(&Tmp[1], "u") == 0) || (strcmp(&Tmp[1], "-eucname") == 0))\r
+ // 廃止予定\r
+// else if((strcmp(&Tmp[1], "u") == 0) || (strcmp(&Tmp[1], "-eucname") == 0))\r
+// *CmdOption |= OPT_EUC_NAME;\r
+// else if((strcmp(&Tmp[1], "i") == 0) || (strcmp(&Tmp[1], "-jisname") == 0))\r
+// *CmdOption |= OPT_JIS_NAME;\r
+ else if((strcmp(&Tmp[1], "eun") == 0) || (strcmp(&Tmp[1], "u") == 0) || (strcmp(&Tmp[1], "-eucname") == 0))\r
*CmdOption |= OPT_EUC_NAME;\r
- else if((strcmp(&Tmp[1], "i") == 0) || (strcmp(&Tmp[1], "-jisname") == 0))\r
+ else if((strcmp(&Tmp[1], "jin") == 0) || (strcmp(&Tmp[1], "i") == 0) || (strcmp(&Tmp[1], "-jisname") == 0))\r
*CmdOption |= OPT_JIS_NAME;\r
else if((strcmp(&Tmp[1], "n") == 0) || (strcmp(&Tmp[1], "-ini") == 0))\r
{\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
+ // UTF-8対応\r
+ else if((strcmp(&Tmp[1], "sj") == 0) || (strcmp(&Tmp[1], "-sjis") == 0))\r
+ *CmdOption |= OPT_SJIS;\r
+ else if((strcmp(&Tmp[1], "u8") == 0) || (strcmp(&Tmp[1], "-utf8") == 0))\r
+ *CmdOption |= OPT_UTF8N;\r
+ else if((strcmp(&Tmp[1], "8b") == 0) || (strcmp(&Tmp[1], "-utf8bom") == 0))\r
+ *CmdOption |= OPT_UTF8BOM;\r
+ else if((strcmp(&Tmp[1], "sjn") == 0) || (strcmp(&Tmp[1], "-sjisname") == 0))\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], "-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
\r
static void ExitProc(HWND hWnd)\r
{\r
+ // 環境依存の不具合対策\r
+ char Tmp[FMAX_PATH+1];\r
+\r
CancelFlg = YES;\r
\r
CloseTransferThread();\r
if(SaveExit == YES)\r
{\r
GetListTabWidth();\r
- SaveRegistory();\r
+ SaveRegistry();\r
+ // ポータブル版判定\r
+ if(RegType == REGTYPE_REG)\r
+ ClearIni();\r
\r
if((CacheEntry > 0) && (CacheSave == YES))\r
SaveCache();\r
else\r
DeleteCache();\r
\r
+ // 環境依存の不具合対策\r
+ GetAppTempPath(Tmp);\r
+ SetYenTail(Tmp);\r
+ strcat(Tmp, "file");\r
+ _rmdir(Tmp);\r
+ GetAppTempPath(Tmp);\r
+ _rmdir(Tmp);\r
+\r
if(RasClose == YES)\r
{\r
DisconnectRas(RasCloseNotify);\r
\r
if(Win == WIN_LOCAL)\r
{\r
- if((App != -1) || (Type == NODE_FILE))\r
+ // ローカルフォルダを開く\r
+// if((App != -1) || (Type == NODE_FILE))\r
+ if((App != -1) || (Type == NODE_FILE) || (Mode == YES))\r
{\r
if((DclickOpen == YES) || (Mode == YES))\r
{\r
\r
strcpy(Remote, TmpPath);\r
SetYenTail(Remote);\r
+ // 環境依存の不具合対策\r
+ strcat(Remote, "file");\r
+ _mkdir(Remote);\r
+ SetYenTail(Remote);\r
if (UseDiffViewer == YES) {\r
strcat(Remote, "remote.");\r
}\r
/* 不正なパスを検出 */\r
if(CheckPathViolation(&MainTransPkt) == NO)\r
{\r
-// if((Sts = DoDownLoad(AskCmdCtrlSkt(), &MainTransPkt, NO)) == 429)\r
+// if((Sts = DoDownload(AskCmdCtrlSkt(), &MainTransPkt, NO)) == 429)\r
// {\r
// ReConnectCmdSkt();\r
// 同時接続対応\r
CancelFlg = NO;\r
- Sts = DoDownLoad(AskCmdCtrlSkt(), &MainTransPkt, NO, &CancelFlg);\r
+ Sts = DoDownload(AskCmdCtrlSkt(), &MainTransPkt, NO, &CancelFlg);\r
// }\r
}\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
DoPrintf("ShellExecute - %s", Fname);\r
ShellExecute(NULL, "open", Fname, NULL, CurDir, SW_SHOW);\r
}\r
+ // ローカルフォルダを開く\r
+ else if((App == -1) && (GetFileAttributes(Fname) & FILE_ATTRIBUTE_DIRECTORY))\r
+ {\r
+ MakeDistinguishableFileName(ComLine, Fname);\r
+ DoPrintf("ShellExecute - %s", Fname);\r
+ ShellExecute(NULL, "open", ComLine, NULL, Fname, SW_SHOW);\r
+ }\r
else\r
{\r
App = max1(0, App);\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, "\xF0\x1B\x48\x26\x67\x44\x3A\xFF\x0A\x16\xD3\xBB\x8A\x33\xEB\x70\x6D\x75\xA6\x0D", 20) == 0\r
+ if(memcmp(&Hash, &SSLRootCAFileHash, 20) == 0 || memcmp(&Hash, "\xC8\xF6\x0B\x07\x10\x42\x55\xE7\x57\x7F\xE9\x52\xE0\x3F\xA8\xE4\x08\x2B\xB0\xE2", 20) == 0\r
|| DialogBox(GetFtpInst(), MAKEINTRESOURCE(updatesslroot_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)\r
{\r
memcpy(&SSLRootCAFileHash, &Hash, 20);\r
if(GetCurrentThreadId() != MainThreadId)\r
return FALSE;\r
return TRUE;\r
-}
\ No newline at end of file
+}\r
+\r
+// ポータブル版判定\r
+void CheckPortableVersion()\r
+{\r
+ HANDLE hFile;\r
+ if((hFile = CreateFile(PortableFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE)\r
+ {\r
+ PortableVersion = YES;\r
+ CloseHandle(hFile);\r
+ }\r
+ else\r
+ PortableVersion = NO;\r
+}\r
+\r
+int AskPortableVersion(void)\r
+{\r
+ return(PortableVersion);\r
+}\r
+\r
+// 全設定暗号化対応\r
+int Restart()\r
+{\r
+ int Sts;\r
+ char* CommandLine;\r
+ STARTUPINFO si;\r
+ PROCESS_INFORMATION pi;\r
+ Sts = FFFTP_FAIL;\r
+ if(CommandLine = (char*)malloc(sizeof(char) * (strlen(GetCommandLine()) + 1)))\r
+ {\r
+ strcpy(CommandLine, GetCommandLine());\r
+ GetStartupInfo(&si);\r
+ if(CreateProcess(NULL, CommandLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))\r
+ {\r
+ CloseHandle(pi.hThread);\r
+ CloseHandle(pi.hProcess);\r
+ Sts = FFFTP_SUCCESS;\r
+ }\r
+ free(CommandLine);\r
+ }\r
+ return Sts;\r
+}\r
+\r
+void RestartAndTerminate()\r
+{\r
+ Restart();\r
+ exit(1);\r
+}\r
+\r
+// タスクバー進捗表示\r
+int LoadTaskbarList3()\r
+{\r
+ int Sts;\r
+ Sts = FFFTP_FAIL;\r
+ if(CoCreateInstance(&CLSID_TaskbarList, NULL, CLSCTX_ALL, &IID_ITaskbarList3, (void**)&pTaskbarList3) == S_OK)\r
+ {\r
+ Sts = FFFTP_SUCCESS;\r
+ }\r
+ return Sts;\r
+}\r
+\r
+void FreeTaskbarList3()\r
+{\r
+ if(pTaskbarList3 != NULL)\r
+ pTaskbarList3->lpVtbl->Release(pTaskbarList3);\r
+ pTaskbarList3 = NULL;\r
+}\r
+\r
+int IsTaskbarList3Loaded()\r
+{\r
+ int Sts;\r
+ Sts = NO;\r
+ if(pTaskbarList3 != NULL)\r
+ Sts = YES;\r
+ return Sts;\r
+}\r
+\r
+void UpdateTaskbarProgress()\r
+{\r
+ if(AskTransferSizeTotal() > 0)\r
+ {\r
+ if(AskTransferErrorDisplay() > 0)\r
+ pTaskbarList3->lpVtbl->SetProgressState(pTaskbarList3, GetMainHwnd(), TBPF_ERROR);\r
+ else\r
+ pTaskbarList3->lpVtbl->SetProgressState(pTaskbarList3, GetMainHwnd(), TBPF_NORMAL);\r
+ pTaskbarList3->lpVtbl->SetProgressValue(pTaskbarList3, GetMainHwnd(), (ULONGLONG)(AskTransferSizeTotal() - AskTransferSizeLeft()), (ULONGLONG)AskTransferSizeTotal());\r
+ }\r
+ else\r
+ pTaskbarList3->lpVtbl->SetProgressState(pTaskbarList3, GetMainHwnd(), TBPF_NOPROGRESS);\r
+}\r
+\r
+// 高DPI対応\r
+int AskToolWinHeight(void)\r
+{\r
+ return(ToolWinHeight);\r
+}\r
+\r
+// ソフトウェア自動更新\r
+void UpdateSoftware(int NoError, int NoConfirm)\r
+{\r
+ DWORD Version;\r
+ char VersionString[32];\r
+ char Tmp[FMAX_PATH+1];\r
+ // 念のためマスターパスワードの一致を確認\r
+ if(GetMasterPasswordStatus() == PASSWORD_OK)\r
+ {\r
+ Version = RELEASE_VERSION_NUM;\r
+ LastAutoCheckForUpdates = time(NULL);\r
+ if(CheckForUpdates(FALSE, NULL, &Version, VersionString))\r
+ {\r
+ if(Version > RELEASE_VERSION_NUM)\r
+ {\r
+ sprintf(Tmp, MSGJPN362, VER_STR, VersionString);\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))\r
+ {\r
+ MessageBox(GetMainHwnd(), MSGJPN365, "FFFTP", MB_OK);\r
+ ApplyUpdatesOnExit = YES;\r
+ }\r
+ else if(NoError == NO)\r
+ MessageBox(GetMainHwnd(), MSGJPN363, "FFFTP", MB_OK | MB_ICONERROR);\r
+ }\r
+ }\r
+ else if(NoError == NO)\r
+ MessageBox(GetMainHwnd(), MSGJPN364, "FFFTP", MB_OK);\r
+ }\r
+ else if(NoError == NO)\r
+ MessageBox(GetMainHwnd(), MSGJPN363, "FFFTP", MB_OK | MB_ICONERROR);\r
+ }\r
+}\r
+\r