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; }
void TrayIcon::HideWindowToTray(LPCTSTR asInfoTip /* = NULL */) { if (gpConEmu->InQuakeAnimation()) { _ASSERTE(FALSE && "Calling TrayIcon::HideWindowToTray from QuakeAnimation"); return; } mb_InHidingToTray = true; ShowTrayIcon(asInfoTip); if (IsWindowVisible(ghWnd)) { gpConEmu->ShowWindow(SW_HIDE); } HMENU hMenu = gpConEmu->mp_Menu->GetSysMenu(/*ghWnd, false*/); SetMenuItemText(hMenu, ID_TOTRAY, TRAY_ITEM_RESTORE_NAME); mb_InHidingToTray = false; //for (int i = 0; i < countof(mn_SysItemId); i++) //{ // MENUITEMINFO mi = {sizeof(mi)}; // mi.fMask = MIIM_STATE; // GetMenuItemInfo(hMenu, mn_SysItemId[i], FALSE, &mi); // mn_SysItemState[i] = (mi.fState & (MFS_DISABLED|MFS_GRAYED|MFS_ENABLED)); // EnableMenuItem(hMenu, mn_SysItemId[i], MF_BYCOMMAND | MF_GRAYED); //} }
BOOL CTrayIcon::ShowBalloon(LPCTSTR szText, LPCTSTR szTitle, DWORD dwIcon, UINT uTimeout) { // Verify input parameters. if (uTimeout <= 0) return FALSE; // The balloon tooltip text can be up to 255 chars long. ASSERT(AfxIsValidString(szText)); ASSERT(lstrlen(szText) < 256); // The balloon title text can be up to 63 chars long. if (szTitle) { ASSERT(AfxIsValidString( szTitle)); ASSERT(lstrlen(szTitle) < 64); } // dwBalloonIcon must be valid. ASSERT(NIIF_NONE == dwIcon || NIIF_INFO == dwIcon || NIIF_WARNING == dwIcon || NIIF_ERROR == dwIcon); // The timeout must be between 10 and 30 seconds. uTimeout = min(max(uTimeout, 10), 30); NOTIFYICONDATA_TI nid; nid.cbSize = sizeof(nid); nid.hWnd = GetSafeHwnd(); nid.uID = GetDlgCtrlID(); nid.uFlags = NIF_INFO; //fabio_2005 #if _MSC_VER >= 1300 _tcsncpy_s(nid.szInfo, szText, 256); if (szTitle) _tcsncpy_s(nid.szInfoTitle, szTitle, 64); #else _tcsncpy(nid.szInfo, szText, 256); if (szTitle) _tcsncpy(nid.szInfoTitle, szTitle, 64); #endif else nid.szInfoTitle[0] = _T('\0'); nid.dwInfoFlags = dwIcon; nid.uTimeout = uTimeout * 1000; // convert time to ms // if the icon is not showing then show it temporarily if (!m_bVisible) { m_bTemporaryIcon = TRUE; ShowTrayIcon(TRUE); } return Shell_NotifyIcon(NIM_MODIFY, (PNOTIFYICONDATA)&nid); }
LRESULT CMainWindow::HandleCustomMessages(HWND /*hwnd*/, UINT uMsg, WPARAM /*wParam*/, LPARAM /*lParam*/) { if (uMsg == WM_TASKBARCREATED) { ShowTrayIcon(); } return 0L; }
void CAppWnd::OnClose() { // Remove the tray icon. if (m_oTrayIcon.IsVisible()) ShowTrayIcon(false); // Fetch windows final placement. App.m_rcLastPos = Placement(); }
void CRelaxReminderDlg::InitShowTrayIcon() { // 初始化通知栏图标变量 m_bTrayIconVisible = FALSE; m_uIconID = IDR_MAINFRAME; if (m_bShowTrayIconAtStartup) { ShowTrayIcon(); } }
void CRelaxReminderDlg::OnMenuTrayIcon() { // TODO: Add your command handler code here if (m_bTrayIconVisible) { DeleteTrayIcon(); } else { ShowTrayIcon(); } }
void ReloadTsTrayIcons() { if (g_dwFlags & TSF_SHOWTRAYICON) { if (!ReloadTrayIcon(g_hwndMain, IDI_TASKSWITCHXP)) ShowTrayIcon(TRUE); } for (int i = (int)g_cWti - 1; i >= 0; i--) { if (!ReloadTrayIcon(g_hwndMain, g_pWti[i].uID)) { if (IsWindow(g_pWti[i].hwnd)) { WCHAR szCaption[MAX_CAPTION]; InternalGetWindowText(g_pWti[i].hwnd, szCaption, MAX_CAPTION); AddTrayIcon(g_hwndMain, g_pWti[i].uID, g_pWti[i].hIconSm, szCaption); } } } }
// this Create takes an ID for the tip text BOOL CTrayIcon::Create(DWORD dwStyle, CWnd* pParentWnd, UINT uID, UINT uIDIcon, UINT uIDTip) { if (!CWnd::Create(NULL, _T("TrayIcon notification window"), WS_CHILD, CRect(0,0,0,0), pParentWnd, uID)) return FALSE; m_hIcon = AfxGetApp()->LoadIcon(uIDIcon); m_sTip.LoadString(uIDTip); m_nm.hdr.hwndFrom = GetSafeHwnd(); m_nm.hdr.idFrom = GetDlgCtrlID(); if (dwStyle & WS_VISIBLE) ShowTrayIcon(); return TRUE; }
bool CMainWindow::RegisterAndCreateWindow() { WNDCLASSEX wcx; // Fill in the window class structure with default parameters wcx.cbSize = sizeof(WNDCLASSEX); wcx.style = CS_HREDRAW | CS_VREDRAW; wcx.lpfnWndProc = CWindow::stWinMsgHandler; wcx.cbClsExtra = 0; wcx.cbWndExtra = 0; wcx.hInstance = hResource; wcx.hCursor = NULL; ResString clsname(hResource, IDS_APP_TITLE); wcx.lpszClassName = clsname; wcx.hIcon = LoadIcon(hResource, MAKEINTRESOURCE(IDI_AACLR)); wcx.hbrBackground = NULL; wcx.lpszMenuName = NULL; wcx.hIconSm = LoadIcon(wcx.hInstance, MAKEINTRESOURCE(IDI_AACLR)); if (RegisterWindow(&wcx)) { if (CreateEx(NULL, WS_POPUP, NULL)) { // On Vista, the message TasbarCreated may be blocked by the message filter. // We try to change the filter here to get this message through. If even that // fails, then we can't do much about it and the task bar icon won't show up again. HMODULE hLib = LoadLibrary(_T("user32.dll")); if (hLib) { m_pChangeWindowMessageFilter = (CMainWindow::PFNCHANGEWINDOWMESSAGEFILTEREX)GetProcAddress(hLib, "ChangeWindowMessageFilterEx"); if (m_pChangeWindowMessageFilter) { (*m_pChangeWindowMessageFilter)(m_hwnd, WM_TASKBARCREATED, MSGFLT_ALLOW, NULL); (*m_pChangeWindowMessageFilter)(m_hwnd, WM_SETTINGCHANGE, MSGFLT_ALLOW, NULL); } } ShowTrayIcon(); return true; } } return false; }
int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR lpCmdLine, int nCmdShow) { MSG msg; hInst = hInstance; SetEenvironment(); MyRegisterClass(hInstance); if (!InitInstance (hInstance, SW_HIDE)) { return FALSE; } CreateConsole(); ExecCmdline(L"默认", szPath, szCommand); ShowTrayIcon(szBalloon); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; }
int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR lpCmdLine, int nCmdShow) { MSG msg; MyRegisterClass(hInstance); if (!InitInstance (hInstance, SW_HIDE)) { return FALSE; } CreateConsole(); CDCurrentDirectory(); SetEenvironment(); ExecCmdline(); ShowTrayIcon(); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; }
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; hInst = hInstance; CDCurrentDirectory(); SetEenvironment(); ParseProxyList(); MyRegisterClass(hInstance); if (!InitInstance (hInstance, SW_HIDE)) { return FALSE; } CreateConsole(); ExecCmdline(); ShowTrayIcon(GetWindowsProxy(), NIM_ADD); TryDeleteUpdateFiles(); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; }
void CAppWnd::OnCreate(const CRect& rcClient) { // // Create and attach the components. // m_Accel.LoadRsc(IDR_APPACCEL); Accel(&m_Accel); m_Menu.LoadRsc(IDR_APPMENU); Menu(&m_Menu); m_StatusBar.Create(*this, IDC_STATUS_BAR, rcClient); StatusBar(&m_StatusBar); m_AppDlg.RunModeless(*this); // Show the tray icon? if (App.m_bTrayIcon) ShowTrayIcon(true); // Call base class. CDlgFrame::OnCreate(rcClient); }
void c_Loop(char* version, boolean useDoubleclick, boolean checkUpdates, boolean launchPoEBool){ VERSION = version; UseDoubleclick = useDoubleclick; CheckForUpdates = checkUpdates; LaunchPoE = launchPoEBool; PoEHandle = NULL; if(LaunchPoE && FindProcessId("PathOfExile.exe") == 0 && !UpdateLoading){ launchPoE(); } //Initialize Variables //ExitCalled = FALSE; hInstance = GetModuleHandle(NULL); CtrlPressed = FALSE; //Install Hooks InstallHooks(); //c_LoadFilters(); //CreateCustomMenu(); //Created automatically when needed ShowTrayIcon(); MSG msg = {0}; if(PoEHandle != NULL){ SetTimer(NULL, 1, 1000, NULL); } while (GetMessage(&msg, NULL, 0, 0) != 0) { TranslateMessage(&msg); DispatchMessage(&msg); if (PoEHandle != NULL){ DWORD dwExitCode; GetExitCodeProcess(PoEHandle,&dwExitCode); if(dwExitCode != STILL_ACTIVE) { Exit(); } } } Exit(); }
LRESULT CTrayIcon::OnTrayIconNotify(WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(wParam); // prevent reentrancy static BOOL bInNotify = FALSE; if (bInNotify || !GetParent()->IsWindowEnabled()) return 0L; CAutoFlag af(bInNotify, TRUE); BOOL bNotify = TRUE; GetCursorPos(&m_nm.ptAction); switch (lParam) { case WM_MOUSEMOVE: case WM_LBUTTONDOWN: bNotify = FALSE; break; case WM_LBUTTONUP: if (m_nPrevMsg == WM_LBUTTONDOWN) // start a timer to test for double click { UINT nDelay = GetDoubleClickTime(); SetTimer(TIMER_SINGLECLK, nDelay, NULL); } bNotify = FALSE; // we'll handle it in OnTimer break; case WM_LBUTTONDBLCLK: // if we got here then the timer has not yet been tripped so it's a double click if (m_nPrevMsg == WM_LBUTTONUP) { KillTimer(TIMER_SINGLECLK); m_nm.hdr.code = NM_DBLCLK; } break; case WM_RBUTTONDOWN: bNotify = FALSE; break; case WM_RBUTTONUP: if (m_nPrevMsg == WM_RBUTTONDOWN) m_nm.hdr.code = NM_RCLICK; else bNotify = FALSE; break; case WM_RBUTTONDBLCLK: m_nm.hdr.code = NM_RDBLCLK; break; case WM_MBUTTONDOWN: case WM_MBUTTONUP: case WM_MBUTTONDBLCLK: bNotify = FALSE; break; case NIN_BALLOONUSERCLICK: case NIN_BALLOONTIMEOUT: if (m_bTemporaryIcon) { m_bTemporaryIcon = FALSE; ShowTrayIcon(FALSE); } bNotify = FALSE; break; default: bNotify = FALSE; break; } if (lParam != WM_MOUSEMOVE) m_nPrevMsg = lParam; if (!bNotify) return TRUE; LRESULT lr = GetParent()->SendMessage(WM_NOTIFY, GetDlgCtrlID(), (LPARAM)&m_nm); return lr; }
void ShowTrayMenu() { POINT pt; GetCursorPos(&pt); WCHAR szBuff[MAX_LANGLEN]; HMENU hmenu = CreatePopupMenu(); for (int i = 0; i <= (IDM_EXIT - IDM_STTRAYNEXT); i++) { LangLoadString(IDS_STTRAYNEXT + i, szBuff, SIZEOF_ARRAY(szBuff)); AppendMenu(hmenu, MF_STRING, IDM_STTRAYNEXT + i, szBuff); } InsertMenu(hmenu, IDM_CONFIG, MF_SEPARATOR | MF_BYCOMMAND, 0, NULL); InsertMenu(hmenu, IDM_EXIT, MF_SEPARATOR | MF_BYCOMMAND, 0, NULL); HMENU hmenuPopup = CreatePopupMenu(); for (int i = 0; i <= (IDM_ABOUT - IDM_DOCUMENTATION); i++) { LangLoadString(IDS_DOCUMENTATION + i, szBuff, SIZEOF_ARRAY(szBuff)); AppendMenu(hmenuPopup, MF_STRING, IDM_DOCUMENTATION + i, szBuff); } LangLoadString(IDS_HELP, szBuff, SIZEOF_ARRAY(szBuff)); InsertMenu(hmenu, IDM_CONFIG, MF_STRING | MF_BYCOMMAND | MF_POPUP, (UINT_PTR)hmenuPopup, szBuff); InsertMenu(hmenu, 4, MF_SEPARATOR | MF_BYPOSITION, 0, NULL); hmenuPopup = CreatePopupMenu(); for (int i = 0; i <= (IDM_NEWEXCLUSION - IDM_HIDE); i++) { LangLoadString(IDS_HIDE + i, szBuff, SIZEOF_ARRAY(szBuff)); AppendMenu(hmenuPopup, MF_STRING, IDM_HIDE + i, szBuff); } InsertMenu(hmenuPopup, IDM_NEWEXCLUSION, MF_SEPARATOR | MF_BYCOMMAND, 0, NULL); InsertMenu(hmenuPopup, IDM_REPLACEALTTAB, MF_SEPARATOR | MF_BYCOMMAND, 0, NULL); CheckMenuItem(hmenuPopup, IDM_REPLACEALTTAB, !(g_dwFlags & TSF_NOREPLACEALTTAB) ? (MF_BYCOMMAND | MF_CHECKED) : (MF_BYCOMMAND | MF_UNCHECKED)); CheckMenuItem(hmenuPopup, IDM_INSTSWITCHER, (g_dwFlags & TSF_INSTSWITCHER) ? (MF_BYCOMMAND | MF_CHECKED) : (MF_BYCOMMAND | MF_UNCHECKED)); CheckMenuItem(hmenuPopup, IDM_STICKYALTTAB, (g_dwFlags & TSF_STICKYALTTAB) ? (MF_BYCOMMAND | MF_CHECKED) : (MF_BYCOMMAND | MF_UNCHECKED)); CheckMenuItem(hmenuPopup, IDM_HOOKALTTAB, (g_dwFlags & TSF_HOOKALTTAB) ? (MF_BYCOMMAND | MF_CHECKED) : (MF_BYCOMMAND | MF_UNCHECKED)); // CheckMenuItem(hmenuPopup, IDM_EXTMOUSE, (g_dwFlags & TSF_EXTMOUSE) // ? (MF_BYCOMMAND | MF_CHECKED) : (MF_BYCOMMAND | MF_UNCHECKED)); LangLoadString(IDS_QUICKCONFIG, szBuff, SIZEOF_ARRAY(szBuff)); InsertMenu(hmenu, IDM_CONFIG, MF_STRING | MF_BYCOMMAND | MF_POPUP, (UINT_PTR)hmenuPopup, szBuff); SetForegroundWindow(g_hwndMain); UINT uMenuID = (UINT)TrackPopupMenu(hmenu, TPM_RIGHTBUTTON | TPM_RIGHTALIGN | TPM_NONOTIFY | TPM_RETURNCMD, pt.x, pt.y, 0, g_hwndMain, NULL); PostMessage(g_hwndMain, WM_NULL, 0, 0); DestroyMenu(hmenu); switch (uMenuID) { case IDM_STTRAYNEXT: ShowTaskSwitchWnd(IDH_STTRAYNEXT); break; case IDM_STITRAYNEXT: ShowTaskSwitchWnd(IDH_STITRAYNEXT); break; case IDM_CONFIG: ConfigTaskSwitchXP(); break; case IDM_HIDE: ShowTrayIcon(FALSE); break; case IDM_REPLACEALTTAB: ReplaceAltTab((g_dwFlags & TSF_NOREPLACEALTTAB) ? (g_dwFlags & ~TSF_NOREPLACEALTTAB) : (g_dwFlags | TSF_NOREPLACEALTTAB)); break; case IDM_INSTSWITCHER: ReplaceAltTab((g_dwFlags & TSF_INSTSWITCHER) ? (g_dwFlags & ~TSF_INSTSWITCHER) : (g_dwFlags | TSF_INSTSWITCHER)); break; case IDM_STICKYALTTAB: g_dwFlags ^= TSF_STICKYALTTAB; break; case IDM_HOOKALTTAB: ReplaceAltTab((g_dwFlags & TSF_HOOKALTTAB) ? (g_dwFlags & ~TSF_HOOKALTTAB) : (g_dwFlags | TSF_HOOKALTTAB)); break; // case IDM_EXTMOUSE: // EnableExtMouse(!(g_dwFlags & TSF_EXTMOUSE), g_dwFlags & TSF_WHEELTAB); // break; case IDM_NEWEXCLUSION: ConfigTaskSwitchXP(L"/newexcl"); break; case IDM_DOCUMENTATION: HelpTaskSwitchXP(); break; case IDM_HOMEPAGE: ShellExecute(NULL, L"open", L"http://www.ntwind.com/taskswitchxp/", NULL, NULL, SW_SHOWNORMAL); break; case IDM_ABOUT: ConfigTaskSwitchXP(L"/about"); break; case IDM_EXIT: DestroyWindow(g_hwndMain); break; } }
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { static BOOL s_fConfirmActive = FALSE; static UINT s_uTaskbarCreated = 0; switch (uMsg) { case WM_HOTKEY: { switch (wParam) { case IDH_NEXTTASK: case IDH_PREVTASK: case IDH_WINNEXTTASK: case IDH_WINPREVTASK: case IDH_INSTNEXT: case IDH_INSTPREV: case IDH_STNEXTTASK: case IDH_STINEXTTASK: ShowTaskSwitchWnd((UINT)wParam); break; case IDH_MINIMIZETRAY: FlipToTray(GetForegroundWindow()); break; case IDH_RESTORETRAY: if (g_cWti > 0) _UnflipFromTray(g_cWti - 1); break; case IDH_SHOWHIDE: ShowTrayIcon(!(g_dwFlags & TSF_SHOWTRAYICON)); break; case IDH_CONFIG: ConfigTaskSwitchXP(); break; case IDH_ALTAPPLIST: //MessageBox (0, L"This must display alternative task switching window\r\n" // L"(or the same window but in alternative mode)", L"klvov says:", MB_OK); //ShowAltTSWindow(); //OutputDebugString(L"IDH_ALTAPPLIST message received\n"); ShowTaskSwitchWnd((UINT)wParam); break; case IDH_EXIT: if (!(g_dwFlags & TSF_NOCONFIRMEXIT)) { if (s_fConfirmActive) { // activate confirm dialog #pragma FIX_LATER(multiple exit confirmations) break; /*HWND hwndMsg = FindWindowEx(NULL, NULL, L"#32770", L"TaskSwitchXP confirmation"); if (hwndMsg) { SetForegroundWindow(hwndMsg); break; }*/ } s_fConfirmActive = TRUE; if (ConfirmMessage(IDS_CONFIRM_EXIT)) DestroyWindow(hwnd); s_fConfirmActive = FALSE; } else DestroyWindow(hwnd); break; } break; } case WM_TIMER: if (wParam == TIMER_RIGHTUP) { KillTimer(hwnd, TIMER_RIGHTUP); mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_RIGHTUP, _ptRClick.x, _ptRClick.y, _dwRData, _dwRExtraInfo); } else if (wParam == TIMER_SETANIMATION) { KillTimer(hwnd, TIMER_SETANIMATION); ANIMATIONINFO ai; ai.cbSize = sizeof(ANIMATIONINFO); ai.iMinAnimate = TRUE; SystemParametersInfo(SPI_SETANIMATION, sizeof(ANIMATIONINFO), &ai, FALSE); } else if (wParam == TIMER_CHECKTRAYWND) { for (UINT i = 0; i < g_cWti; i++) { if (!IsWindow(g_pWti[i].hwnd) || IsWindowVisible(g_pWti[i].hwnd)) _UnflipFromTray(i, SC_MINIMIZE); } } else if (wParam == TIMER_RELOADICONS) { if (!(g_dwFlags & TSF_RELOADICONS)) KillTimer(hwnd, TIMER_RELOADICONS); ReloadTsTrayIcons(); } else if (wParam == TIMER_CHECKCOLORS) { KillTimer(hwnd, TIMER_CHECKCOLORS); if (CheckColorTheme()) CheckDefaultColors(); } else if (wParam == TIMER_CLOSEDESK) { if (WaitForSingleObject(g_hThreadTs, 0) == WAIT_OBJECT_0) { KillTimer(hwnd, TIMER_CLOSEDESK); //_RPT0(_CRT_WARN, "close desk\n"); if (g_hThreadTs) { CloseHandle(g_hThreadTs); g_hThreadTs = NULL; } if (g_hDesk) { CloseDesktop(g_hDesk); g_hDesk = NULL; } } } break; case WM_REMOTECMD: SwitchToThisWindow(hwnd, TRUE); if (wParam & CCLF_ESCAPE) { if (g_hwndTs) PostMessage(g_hwndTs, WM_TASKSWITCH, IDH_ESCAPE, 0); } else if (wParam & CCLF_STINEXTTASK) { ShowTaskSwitchWnd(IDH_STINEXTTASK); } else if (wParam & CCLF_STNEXTTASK) { ShowTaskSwitchWnd(IDH_STNEXTTASK); } break; case WM_MYTRAYMSG: if (wParam == IDI_TASKSWITCHXP) { if ((UINT)lParam == g_uTrayMenu) { ShowTrayMenu(); } else if ((UINT)lParam == g_uTrayConfig) { ConfigTaskSwitchXP(); } else if ((UINT)lParam == g_uTrayNext) { ShowTaskSwitchWnd(IDH_STTRAYNEXT); } else if ((UINT)lParam == g_uTrayPrev) { ShowTaskSwitchWnd(IDH_STITRAYNEXT); } } else { if (lParam == WM_LBUTTONUP) { UnflipFromTrayID((UINT)wParam); } else if (lParam == WM_RBUTTONUP) { ShowFlippedSystemMenu((UINT)wParam); } else if (lParam == WM_MBUTTONUP) UnflipFromTrayID((UINT)wParam, 0); } break; case WM_EXTMOUSE: if (wParam == HTMINBUTTON) { FlipToTray((HWND)lParam); } else if (wParam == HTMAXBUTTON) { HWND h = (HWND)lParam; DWORD dwExStyle = GetWindowLongPtr(h, GWL_EXSTYLE); SetWindowPos(h, ((dwExStyle & WS_EX_TOPMOST) ? HWND_NOTOPMOST : HWND_TOPMOST), 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); } break; case WM_FLIPTOTRAY: return(FlipToTray((HWND)wParam)); //break; case WM_UNFLIPFROMTRAY: UnflipFromTray((HWND)wParam, (UINT)lParam); break; case WM_GETTRAYWINDOWS: if (wParam) { HWND *phWnd = (HWND*)wParam; int cWti = 0; while (cWti < MIN((int)lParam, (int)g_cWti)) { phWnd[cWti] = g_pWti[cWti].hwnd; cWti++; } return(cWti); } else return(g_cWti); break; case WM_RELOADSETTINGS: if (!LoadSettings()) { ReportError(IDS_ERR_LOADSETTINGS); DestroyWindow(hwnd); } break; case WM_THEMECHANGED: if (CheckColorTheme()) CheckDefaultColors(); SetTimer(hwnd, TIMER_CHECKCOLORS, 1000, NULL); break; case WM_CREATE: { s_uTaskbarCreated = RegisterWindowMessage(L"TaskbarCreated"); g_hwndMain = hwnd; SendMessage(hwnd, WM_SETICON, ICON_BIG, (LONG)(LONG_PTR)LoadImage(g_hinstExe, MAKEINTRESOURCE(IDI_TASKSWITCHXP), IMAGE_ICON, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR)); SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LONG)(LONG_PTR)LoadImage(g_hinstExe, MAKEINTRESOURCE(IDI_TASKSWITCHXP), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR)); if (!LoadSettings()) { ReportError(IDS_ERR_LOADSETTINGS); return(-1); } if (!InitPreviewThread()) return(-1); // Weird huh? I cannot understand this... if (g_dwShowDelay && g_dwFlagsPv & TSFPV_DESKTOP && g_dwFlagsPv & TSFPV_TASKBAR) { RECT rcPvEx; rcPvEx.left = rcPvEx.top = 0; rcPvEx.right = 102; rcPvEx.bottom = 76; HDC hdcScreen = GetDC(NULL); HDC hdcMem = CreateCompatibleDC(hdcScreen); HBITMAP hbitmapMem = CreateCompatibleBitmap(hdcScreen, rcPvEx.right - rcPvEx.left, rcPvEx.bottom - rcPvEx.top); ReleaseDC(NULL, hdcScreen); if (hbitmapMem) { HBITMAP hbitmapOld = (HBITMAP)SelectObject(hdcMem, hbitmapMem); SetForegroundWindow(g_hwndMain); MyPrintWindow(FindWindow(L"Shell_TrayWnd", L""), hdcMem, &rcPvEx, &rcPvEx, MPW_NOCHECKPOS); SelectObject(hdcMem, hbitmapOld); DeleteObject(hbitmapMem); } DeleteDC(hdcMem); } SetTimer(hwnd, TIMER_CHECKTRAYWND, 1000, NULL); if (g_dwCmdLine & CCLF_STINEXTTASK) { ShowTaskSwitchWnd(IDH_STINEXTTASK); } else if (g_dwCmdLine & CCLF_STNEXTTASK) { ShowTaskSwitchWnd(IDH_STNEXTTASK); } break; } case WM_CLOSE: break; case WM_DESTROY: KillTimer(hwnd, TIMER_CHECKTRAYWND); DestroySettings(); DestroyPreviewThread(); for (int i = (int)g_cWti - 1; i >= 0; i--) _UnflipFromTray((UINT)i, 0); PostQuitMessage(0); break; default: if (uMsg == s_uTaskbarCreated) { ReloadTsTrayIcons(); } else return(DefWindowProc(hwnd, uMsg, wParam, lParam)); break; } return(0); }
/* This function is called by the Windows function DispatchMessage() */ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static UINT s_uTaskbarRestart; int i; switch (message) { case WM_CREATE: /* Save Window Handle */ o.hWnd = hwnd; s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated")); WTSRegisterSessionNotification(hwnd, NOTIFY_FOR_THIS_SESSION); /* Load application icon */ HICON hIcon = LoadLocalizedIcon(ID_ICO_APP); if (hIcon) { SendMessage(hwnd, WM_SETICON, (WPARAM) (ICON_SMALL), (LPARAM) (hIcon)); SendMessage(hwnd, WM_SETICON, (WPARAM) (ICON_BIG), (LPARAM) (hIcon)); } CreatePopupMenus(); /* Create popup menus */ ShowTrayIcon(); if (o.allow_service[0]=='1' || o.service_only[0]=='1') CheckServiceStatus(); // Check if service is running or not if (!AutoStartConnections()) { SendMessage(hwnd, WM_CLOSE, 0, 0); break; } break; case WM_NOTIFYICONTRAY: OnNotifyTray(lParam); // Manages message from tray break; case WM_COMMAND: if ( (LOWORD(wParam) >= IDM_CONNECTMENU) && (LOWORD(wParam) < IDM_CONNECTMENU + MAX_CONFIGS) ) { StartOpenVPN(&o.conn[LOWORD(wParam) - IDM_CONNECTMENU]); } if ( (LOWORD(wParam) >= IDM_DISCONNECTMENU) && (LOWORD(wParam) < IDM_DISCONNECTMENU + MAX_CONFIGS) ) { StopOpenVPN(&o.conn[LOWORD(wParam) - IDM_DISCONNECTMENU]); } if ( (LOWORD(wParam) >= IDM_STATUSMENU) && (LOWORD(wParam) < IDM_STATUSMENU + MAX_CONFIGS) ) { ShowWindow(o.conn[LOWORD(wParam) - IDM_STATUSMENU].hwndStatus, SW_SHOW); } if ( (LOWORD(wParam) >= IDM_VIEWLOGMENU) && (LOWORD(wParam) < IDM_VIEWLOGMENU + MAX_CONFIGS) ) { ViewLog(LOWORD(wParam) - IDM_VIEWLOGMENU); } if ( (LOWORD(wParam) >= IDM_EDITMENU) && (LOWORD(wParam) < IDM_EDITMENU + MAX_CONFIGS) ) { EditConfig(LOWORD(wParam) - IDM_EDITMENU); } #ifndef DISABLE_CHANGE_PASSWORD if ( (LOWORD(wParam) >= IDM_PASSPHRASEMENU) && (LOWORD(wParam) < IDM_PASSPHRASEMENU + MAX_CONFIGS) ) { ShowChangePassphraseDialog(&o.conn[LOWORD(wParam) - IDM_PASSPHRASEMENU]); } #endif if (LOWORD(wParam) == IDM_SETTINGS) { ShowSettingsDialog(); } if (LOWORD(wParam) == IDM_CLOSE) { CloseApplication(hwnd); } if (LOWORD(wParam) == IDM_SERVICE_START) { MyStartService(); } if (LOWORD(wParam) == IDM_SERVICE_STOP) { MyStopService(); } if (LOWORD(wParam) == IDM_SERVICE_RESTART) MyReStartService(); break; case WM_CLOSE: CloseApplication(hwnd); break; case WM_DESTROY: WTSUnRegisterSessionNotification(hwnd); StopAllOpenVPN(); OnDestroyTray(); /* Remove Tray Icon and destroy menus */ PostQuitMessage (0); /* Send a WM_QUIT to the message queue */ break; case WM_QUERYENDSESSION: return(TRUE); case WM_ENDSESSION: StopAllOpenVPN(); OnDestroyTray(); break; case WM_WTSSESSION_CHANGE: switch (wParam) { case WTS_SESSION_LOCK: o.session_locked = TRUE; break; case WTS_SESSION_UNLOCK: o.session_locked = FALSE; if (CountConnState(suspended) != 0) ResumeConnections(); break; } break; case WM_POWERBROADCAST: switch (wParam) { case PBT_APMSUSPEND: if (o.disconnect_on_suspend[0] == '1') { /* Suspend running connections */ for (i=0; i<o.num_configs; i++) { if (o.conn[i].state == connected) SuspendOpenVPN(i); } /* Wait for all connections to suspend */ for (i=0; i<10; i++, Sleep(500)) if (CountConnState(suspending) == 0) break; } return FALSE; case PBT_APMRESUMESUSPEND: case PBT_APMRESUMECRITICAL: if (CountConnState(suspended) != 0 && !o.session_locked) ResumeConnections(); return FALSE; } default: /* for messages that we don't deal with */ if (message == s_uTaskbarRestart) { /* Explorer has restarted, re-register the tray icon. */ ShowTrayIcon(); CheckAndSetTrayIcon(); 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; }
void CTrayIcon::OnDestroy() { CWnd::OnDestroy(); ShowTrayIcon(FALSE); }
/* This function is called by the Windows function DispatchMessage() */ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static UINT s_uTaskbarRestart; int i; switch (message) { case WM_CREATE: /* Save Window Handle */ o.hWnd = hwnd; s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated")); CreatePopupMenus(); /* Create popup menus */ LoadAppIcon(); /* Load App Icon */ ShowTrayIcon(); if (o.allow_service[0]=='1' || o.service_only[0]=='1') CheckServiceStatus(); // Check if service is running or not if (!AutoStartConnections()) { SendMessage(hwnd, WM_CLOSE, 0, 0); break; } break; case WM_NOTIFYICONTRAY: OnNotifyTray(lParam); // Manages message from tray return TRUE; case WM_COMMAND: if ( (LOWORD(wParam) >= IDM_CONNECTMENU) && (LOWORD(wParam) < IDM_CONNECTMENU + MAX_CONFIGS) ) { StartOpenVPN(LOWORD(wParam) - IDM_CONNECTMENU); } if ( (LOWORD(wParam) >= IDM_DISCONNECTMENU) && (LOWORD(wParam) < IDM_DISCONNECTMENU + MAX_CONFIGS) ) { StopOpenVPN(LOWORD(wParam) - IDM_DISCONNECTMENU); } if ( (LOWORD(wParam) >= IDM_STATUSMENU) && (LOWORD(wParam) < IDM_STATUSMENU + MAX_CONFIGS) ) { ShowWindow(o.cnn[LOWORD(wParam) - IDM_STATUSMENU].hwndStatus, SW_SHOW); } if ( (LOWORD(wParam) >= IDM_VIEWLOGMENU) && (LOWORD(wParam) < IDM_VIEWLOGMENU + MAX_CONFIGS) ) { ViewLog(LOWORD(wParam) - IDM_VIEWLOGMENU); } if ( (LOWORD(wParam) >= IDM_EDITMENU) && (LOWORD(wParam) < IDM_EDITMENU + MAX_CONFIGS) ) { EditConfig(LOWORD(wParam) - IDM_EDITMENU); } #ifndef DISABLE_CHANGE_PASSWORD if ( (LOWORD(wParam) >= IDM_PASSPHRASEMENU) && (LOWORD(wParam) < IDM_PASSPHRASEMENU + MAX_CONFIGS) ) { ShowChangePassphraseDialog(LOWORD(wParam) - IDM_PASSPHRASEMENU); } #endif if (LOWORD(wParam) == IDM_PROXY) { ShowProxySettingsDialog(); } if (LOWORD(wParam) == IDM_ABOUT) { DialogBox(o.hInstance, (LPCTSTR)IDD_ABOUTDIALOG, NULL, (DLGPROC)AboutDialogFunc); } if (LOWORD(wParam) == IDM_CLOSE) { CloseApplication(hwnd); } if (LOWORD(wParam) == IDM_SERVICE_START) { MyStartService(); } if (LOWORD(wParam) == IDM_SERVICE_STOP) { MyStopService(); } if (LOWORD(wParam) == IDM_SERVICE_RESTART) MyReStartService(); break; case WM_CLOSE: CloseApplication(hwnd); break; case WM_DESTROY: StopAllOpenVPN(); OnDestroyTray(); /* Remove Tray Icon and destroy menus */ PostQuitMessage (0); /* Send a WM_QUIT to the message queue */ break; case WM_QUERYENDSESSION: return(TRUE); case WM_ENDSESSION: StopAllOpenVPN(); OnDestroyTray(); break; case WM_POWERBROADCAST: switch (wParam) { case PBT_APMSUSPEND: if (o.disconnect_on_suspend[0] == '1') { /* Suspend running connections */ for (i=0; i<o.num_configs; i++) { if (o.cnn[i].connect_status == CONNECTED) SuspendOpenVPN(i); } /* Wait for all connections to suspend */ for (i=0; i<10; i++, Sleep(500)) if (CountConnectedState(SUSPENDING) == 0) break; } return FALSE; case PBT_APMRESUMESUSPEND: case PBT_APMRESUMECRITICAL: for (i=0; i<o.num_configs; i++) { /* Restart suspend connections */ if (o.cnn[i].connect_status == SUSPENDED) StartOpenVPN(i); /* If some connection never reached SUSPENDED state */ if (o.cnn[i].connect_status == SUSPENDING) StopOpenVPN(i); } return FALSE; } default: /* for messages that we don't deal with */ if (message == s_uTaskbarRestart) { /* Explorer has restarted, re-register the tray icon. */ ShowTrayIcon(); CheckAndSetTrayIcon(); break; } return DefWindowProc (hwnd, message, wParam, lParam); } return 0; }