From: s_kawamoto Date: Sun, 26 Jan 2014 06:18:51 +0000 (+0900) Subject: Add support displaying a progress bar on the taskbar (Windows 7 or later only). X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=d209e223a4be7f6c5be4025adf9cef03518066ec;p=ffftp%2Fffftp.git Add support displaying a progress bar on the taskbar (Windows 7 or later only). Change to require Windows SDK 7.0 or later to build. Fix project files. Modify documents. --- diff --git a/FFFTP.vc80ee.vcproj b/FFFTP.vc80ee.vcproj index 4e67f65..ce74271 100644 --- a/FFFTP.vc80ee.vcproj +++ b/FFFTP.vc80ee.vcproj @@ -74,7 +74,7 @@ /> Cmd, "STOR", 4) == 0)) { TransFiles++; + // タスクバー進捗表示 + TransferSizeLeft += Pkt->Size; + TransferSizeTotal += Pkt->Size; PostMessage(GetMainHwnd(), WM_CHANGE_COND, 0, 0); } } @@ -494,6 +501,9 @@ void AppendTransFileList(TRANSPACKET *Pkt) (strncmp(Pkt->Cmd, "STOR", 4) == 0)) { TransFiles++; + // タスクバー進捗表示 + TransferSizeLeft += Pkt->Size; + TransferSizeTotal += Pkt->Size; PostMessage(GetMainHwnd(), WM_CHANGE_COND, 0, 0); } Pkt = Pkt->Next; @@ -590,6 +600,9 @@ static void EraseTransFileList(void) // 同時接続対応 NextTransPacketBase = NotDel; TransFiles = 0; + // タスクバー進捗表示 + TransferSizeLeft = 0; + TransferSizeTotal = 0; PostMessage(GetMainHwnd(), WM_CHANGE_COND, 0, 0); ReleaseMutex(hListAccMutex); // 同時接続対応 @@ -1192,6 +1205,13 @@ static ULONG WINAPI TransferThread(void *Dummy) // TransFiles--; if(TransFiles > 0) TransFiles--; + // タスクバー進捗表示 + if(TransferSizeLeft > 0) + TransferSizeLeft -= Pos->Size; + if(TransferSizeLeft < 0) + TransferSizeLeft = 0; + if(TransFiles == 0) + TransferSizeTotal = 0; PostMessage(GetMainHwnd(), WM_CHANGE_COND, 0, 0); } // Pos = TransPacketBase; @@ -2406,6 +2426,8 @@ static void DispDownloadFinishMsg(TRANSPACKET *Pkt, int iRetCode) { if(strncmp(Pkt->Cmd, "RETR", 4) == 0 || strncmp(Pkt->Cmd, "STOR", 4) == 0) { + // タスクバー進捗表示 + TransferErrorDisplay++; if(TransferErrorNotify == YES && DispUpDownErrDialog(downerr_dlg, Pkt->hWndTrans, Pkt) == NO) ClearAll = YES; else @@ -2413,6 +2435,8 @@ static void DispDownloadFinishMsg(TRANSPACKET *Pkt, int iRetCode) Pkt->Mode = TransferErrorMode; AddTransFileList(Pkt); } + // タスクバー進捗表示 + TransferErrorDisplay--; } } } @@ -3716,6 +3740,8 @@ static void DispUploadFinishMsg(TRANSPACKET *Pkt, int iRetCode) { if(strncmp(Pkt->Cmd, "RETR", 4) == 0 || strncmp(Pkt->Cmd, "STOR", 4) == 0) { + // タスクバー進捗表示 + TransferErrorDisplay++; if(TransferErrorNotify == YES && DispUpDownErrDialog(uperr_dlg, Pkt->hWndTrans, Pkt) == NO) ClearAll = YES; else @@ -3723,6 +3749,8 @@ static void DispUploadFinishMsg(TRANSPACKET *Pkt, int iRetCode) Pkt->Mode = TransferErrorMode; AddTransFileList(Pkt); } + // タスクバー進捗表示 + TransferErrorDisplay--; } } } @@ -4417,3 +4445,20 @@ static char* GetErrMsg() ReleaseMutex(hErrMsgMutex); return r; } + +// タスクバー進捗表示 +LONGLONG AskTransferSizeLeft(void) +{ + return(TransferSizeLeft); +} + +LONGLONG AskTransferSizeTotal(void) +{ + return(TransferSizeTotal); +} + +int AskTransferErrorDisplay(void) +{ + return(TransferErrorDisplay); +} + diff --git a/howtobuild.htm b/howtobuild.htm index a2c76ba..959eb85 100644 --- a/howtobuild.htm +++ b/howtobuild.htm @@ -8,6 +8,18 @@ SourceForge.JP版FFFTPのビルドおよび開発の手順について
    +
  1. ビルドの準備
    + FFFTPをビルドするには以下のものをご用意ください。 +
      +
    1. 次のいずれかのバージョンのVisual C++ +
        +
      1. Visual C++ 2005 +
      2. Visual C++ 2005 Express Edition +
      3. Visual C++ 2008 +
      4. Visual C++ 2010以降(各自でプロジェクトファイルを変換してください) +
      +
    2. Windows SDK 7.0以降(Visual C++ 2010以降には標準で付属) +
  2. ビルドの手順
    FFFTPをビルドするには以下の手順に従ってください。
      diff --git a/main.c b/main.c index e89439d..db8f722 100644 --- a/main.c +++ b/main.c @@ -43,6 +43,8 @@ #include // IPv6対応 //#include +// タスクバー進捗表示 +#include #include "common.h" #include "resource.h" @@ -145,6 +147,8 @@ static char PortableFilePath[FMAX_PATH+1]; static int PortableVersion; // ローカル側自動更新 HANDLE ChangeNotification = INVALID_HANDLE_VALUE; +// タスクバー進捗表示 +static ITaskbarList3* pTaskbarList3; /*===== グローバルなワーク =====*/ @@ -373,6 +377,8 @@ int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLi // UPnP対応 CoInitialize(NULL); LoadUPnP(); + // タスクバー進捗表示 + LoadTaskbarList3(); // UTF-8対応 LoadUnicodeNormalizationDll(); @@ -422,6 +428,8 @@ int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLi #endif // SFTP対応 FreePuTTY(); + // タスクバー進捗表示 + FreeTaskbarList3(); // UPnP対応 FreeUPnP(); CoUninitialize(); @@ -977,12 +985,15 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA switch (message) { // ローカル側自動更新 + // タスクバー進捗表示 case WM_CREATE : SetTimer(hWnd, 1, 1000, NULL); + SetTimer(hWnd, 2, 100, NULL); break; // ローカル側自動更新 // 自動切断対策 + // タスクバー進捗表示 case WM_TIMER : switch(wParam) { @@ -1015,6 +1026,10 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA LastDataConnectionTime = time(NULL); } break; + case 2: + if(IsTaskbarList3Loaded() == YES) + UpdateTaskbarProgress(); + break; } break; @@ -1885,6 +1900,8 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA KillTimer(hWnd, 1); if(ChangeNotification != INVALID_HANDLE_VALUE) FindCloseChangeNotification(ChangeNotification); + // タスクバー進捗表示 + KillTimer(hWnd, 2); // WSACleanup(); // DestroyWindow(hWndFtp); PostQuitMessage(0); @@ -3403,3 +3420,45 @@ void RestartAndTerminate() exit(1); } +// タスクバー進捗表示 +int LoadTaskbarList3() +{ + int Sts; + Sts = FFFTP_FAIL; + if(CoCreateInstance(&CLSID_TaskbarList, NULL, CLSCTX_ALL, &IID_ITaskbarList3, (void**)&pTaskbarList3) == S_OK) + { + Sts = FFFTP_SUCCESS; + } + return Sts; +} + +void FreeTaskbarList3() +{ + if(pTaskbarList3 != NULL) + pTaskbarList3->lpVtbl->Release(pTaskbarList3); + pTaskbarList3 = NULL; +} + +int IsTaskbarList3Loaded() +{ + int Sts; + Sts = NO; + if(pTaskbarList3 != NULL) + Sts = YES; + return Sts; +} + +void UpdateTaskbarProgress() +{ + if(AskTransferSizeTotal() > 0) + { + if(AskTransferErrorDisplay() > 0) + pTaskbarList3->lpVtbl->SetProgressState(pTaskbarList3, GetMainHwnd(), TBPF_ERROR); + else + pTaskbarList3->lpVtbl->SetProgressState(pTaskbarList3, GetMainHwnd(), TBPF_NORMAL); + pTaskbarList3->lpVtbl->SetProgressValue(pTaskbarList3, GetMainHwnd(), (ULONGLONG)(AskTransferSizeTotal() - AskTransferSizeLeft()), (ULONGLONG)AskTransferSizeTotal()); + } + else + pTaskbarList3->lpVtbl->SetProgressState(pTaskbarList3, GetMainHwnd(), TBPF_NOPROGRESS); +} + diff --git a/socket.c b/socket.c index 663120a..80f3889 100644 --- a/socket.c +++ b/socket.c @@ -1383,9 +1383,9 @@ void FreeUPnP() int IsUPnPLoaded() { int Sts; - Sts = FFFTP_FAIL; + Sts = NO; if(pUPnPNAT != NULL && pUPnPMap != NULL) - Sts = FFFTP_SUCCESS; + Sts = YES; return Sts; }