LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static const UINT WM_TASKBARCREATED = ::RegisterWindowMessage(L"TaskbarCreated"); int nID; switch (message) { case WM_TASKBARNOTIFY: if (lParam == WM_LBUTTONUP) { ShowWindow(hConsole, !IsWindowVisible(hConsole)); SetForegroundWindow(hConsole); } else if (lParam == WM_RBUTTONUP) { SetForegroundWindow(hWnd); ShowPopupMenu(); } break; case WM_COMMAND: nID = LOWORD(wParam); if (nID == WM_TASKBARNOTIFY_MENUITEM_SHOW) { ShowWindow(hConsole, SW_SHOW); SetForegroundWindow(hConsole); } else if (nID == WM_TASKBARNOTIFY_MENUITEM_HIDE) { ShowWindow(hConsole, SW_HIDE); } if (nID == WM_TASKBARNOTIFY_MENUITEM_RELOAD) { ReloadCmdline(szSubTitleLast, szSubPathLast, szSubCommandLast); } else if (nID == WM_TASKBARNOTIFY_MENUITEM_ABOUT) { MessageBoxW(hWnd, szTooltip, szWindowClass, 0); } else if (nID == WM_TASKBARNOTIFY_MENUITEM_EXIT) { DeleteTrayIcon(); PostMessage(hConsole, WM_CLOSE, 0, 0); } else if (WM_TASKBARNOTIFY_MENUITEM_SUBMENULIST_BASE <= nID && nID <= WM_TASKBARNOTIFY_MENUITEM_SUBMENULIST_BASE+sizeof(lpSubMenuTitleList)/sizeof(lpSubMenuTitleList[0])) { WCHAR *szSubMenu = lpSubMenuTitleList[nID-WM_TASKBARNOTIFY_MENUITEM_SUBMENULIST_BASE]; WCHAR *szSubCmd = lpSubMenuCmdList[nID-WM_TASKBARNOTIFY_MENUITEM_SUBMENULIST_BASE]; WCHAR *szSubPath = lpSubMenuPathList[nID-WM_TASKBARNOTIFY_MENUITEM_SUBMENULIST_BASE]; ReloadCmdline(szSubMenu, szSubPath, szSubCmd); ShowTrayIcon(szSubMenu, NIM_MODIFY); } break; case WM_CLOSE: DeleteTrayIcon(); PostQuitMessage(0); break; case WM_DESTROY: PostQuitMessage(0); break; default: if (message == WM_TASKBARCREATED) { ShowTrayIcon(NULL, NIM_ADD); break; } return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static UINT WM_TASKBARCREATED = 0; if (WM_TASKBARCREATED == 0) WM_TASKBARCREATED = RegisterWindowMessage(L"TaskbarCreated"); UINT nID; switch (message) { case WM_TASKBARNOTIFY: if (lParam == WM_LBUTTONUP) { ShowWindow(hConsole, !IsWindowVisible(hConsole)); SetForegroundWindow(hConsole); } else if (lParam == WM_RBUTTONUP) { SetForegroundWindow(hWnd); ShowPopupMenu(); } break; case WM_COMMAND: nID = LOWORD(wParam); if (nID == WM_TASKBARNOTIFY_MENUITEM_SHOW) { ShowWindow(hConsole, SW_SHOW); SetForegroundWindow(hConsole); } else if (nID == WM_TASKBARNOTIFY_MENUITEM_HIDE) { ShowWindow(hConsole, SW_HIDE); } if (nID == WM_TASKBARNOTIFY_MENUITEM_RELOAD) { ReloadCmdline(); } else if (nID == WM_TASKBARNOTIFY_MENUITEM_ABOUT) { MessageBoxW(hWnd, szTooltip, szWindowClass, 0); } else if (nID == WM_TASKBARNOTIFY_MENUITEM_EXIT) { DeleteTrayIcon(); PostMessage(hConsole, WM_CLOSE, 0, 0); } else if (WM_TASKBARNOTIFY_MENUITEM_PROXYLIST_BASE <= nID && nID <= WM_TASKBARNOTIFY_MENUITEM_PROXYLIST_BASE+sizeof(lpProxyList)/sizeof(lpProxyList[0])) { WCHAR *szProxy = lpProxyList[nID-WM_TASKBARNOTIFY_MENUITEM_PROXYLIST_BASE]; SetWindowsProxy(szProxy, NULL); SetWindowsProxyForAllRasConnections(szProxy); ShowTrayIcon(szProxy, NIM_MODIFY); } break; case WM_CLOSE: DeleteTrayIcon(); PostQuitMessage(0); break; case WM_DESTROY: PostQuitMessage(0); break; default: if (message == WM_TASKBARCREATED) { ShowTrayIcon(NULL, NIM_ADD); break; } return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }