svnno****@sourc*****
svnno****@sourc*****
2014年 6月 21日 (土) 18:38:32 JST
Revision: 5611 http://sourceforge.jp/projects/ttssh2/scm/svn/commits/5611 Author: yutakapon Date: 2014-06-21 18:38:32 +0900 (Sat, 21 Jun 2014) Log Message: ----------- #33953: TeraTerm Menuがタスクトレイに表示されないことがある シェル登録処理のリトライを追加した。 リトライは1秒間隔で最大3回。無限リトライにすると、本当にシェルがストールしている場合に、 アプリケーションもストールするのを回避するため。 Ticket Links: ------------ http://sourceforge.jp/projects/ttssh2/tracker/detail/33953 Modified Paths: -------------- trunk/ttpmenu/ttpmenu.cpp -------------- next part -------------- Modified: trunk/ttpmenu/ttpmenu.cpp =================================================================== --- trunk/ttpmenu/ttpmenu.cpp 2014-06-17 15:37:55 UTC (rev 5610) +++ trunk/ttpmenu/ttpmenu.cpp 2014-06-21 09:38:32 UTC (rev 5611) @@ -990,6 +990,9 @@ BOOL SetTaskTray(HWND hWnd, DWORD dwMessage) { NOTIFYICONDATA nid; + int i; + BOOL ret; + DWORD ecode; memset(&nid, 0, sizeof(nid)); nid.cbSize = sizeof(nid); @@ -1000,8 +1003,34 @@ nid.hIcon = g_hIconSmall; lstrcpy(nid.szTip, "TeraTerm Menu"); - ::Shell_NotifyIcon(dwMessage, &nid); + /* Shell_NotifyIcon\x8A\x94\x82́A\x83V\x83F\x83\x8B\x82ւ̓o\x98^\x82\xAA4\x95b\x88ȓ\xE0\x82Ɋ\xAE\x97\xB9\x82\xB5\x82Ȃ\xA2\x82ƃG\x83\x89\x81[\x82ƌ\xA9\x82Ȃ\xB7\x82\xBD\x82߁A + * \x83\x8A\x83g\x83\x89\x83C\x8F\x88\x97\x9D\x82\xF0\x92lj\xC1\x82\xB7\x82\xE9\x81B + * + * Microsoft\x8C\x{18EB8F}\xEE\x95\xF1\x82ɂ\xE6\x82\xE9\x82ƁAWindowsXP\x81`7\x82܂ł\xAA\x93\x96\x8AY\x8Ed\x97l\x82̖͗l\x81BWindows8/8.1\x82ł́A + * \x83\x8A\x83g\x83\x89\x83C\x82͕s\x97v\x82Ǝv\x82\xED\x82\xEA\x82邪\x81A\x8B\xA4\x92ʏ\x88\x92u\x82Ƃ\xB7\x82\xE9\x81B + * cf. http://support.microsoft.com/kb/418138/ja + * (2014.6.21 yutaka) + */ + if (dwMessage == NIM_ADD) { + for (i = 0 ; i < 3 ; i++) { + ret = ::Shell_NotifyIcon(dwMessage, &nid); + ecode = GetLastError(); + if (ret == FALSE && ecode == ERROR_TIMEOUT) { + Sleep(1000); + ret = ::Shell_NotifyIcon(NIM_MODIFY, &nid); + if (ret == TRUE) + break; + } else { + break; + } + } + + } else { + ::Shell_NotifyIcon(dwMessage, &nid); + + } + return TRUE; }