#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
+ 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
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
+ if(Option[0] == '-')\r
{\r
- ProtectLevel = PROCESS_PROTECTION_LOW;\r
- break;\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
if(ProtectLevel != PROCESS_PROTECTION_NONE)\r
}\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
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
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
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
{\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(AutoCheckForUptatesInterval > 0 && time(NULL) - LastAutoCheckForUpdates >= AutoCheckForUptatesInterval * 86400)\r
+ UpdateSoftware(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
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
FindCloseChangeNotification(ChangeNotification);\r
// タスクバー進捗表示\r
KillTimer(hWnd, 2);\r
+ // ソフトウェア自動更新\r
+ KillTimer(hWnd, 3);\r
// WSACleanup();\r
// DestroyWindow(hWndFtp);\r
PostQuitMessage(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], "-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, "\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
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