static void clicked (GtkWidget *widget, GdkEventButton *event, gpointer data) { switch(event->button) { case 1: //left click OnTrayDefaultAction(); break; case 2: //middle click break; case 3: //right click ShowTrayMenu(); break; } }
LRESULT CWebInterfaceDlg::OnTrayMsg(WPARAM, LPARAM lp) { switch (lp) { case WM_MOUSEMOVE: break; case WM_LBUTTONDOWN: OnConfigure (); break; case WM_RBUTTONUP: ShowTrayMenu (); break; } return 0; }
LRESULT CTeenSpiritDlg::OnTrayNotify(WPARAM wParam, LPARAM lParam) { if (wParam != IDR_MAINFRAME) return 0; switch (lParam ) { case WM_MOUSEMOVE: { CPoint p; GetCursorPos(&p); if (m_ptTrayCursorPos != p) { m_ptTrayCursorPos = p; KillTimer(TMR_ShowTrayTooltipOnMouseMove); SetTimer(TMR_ShowTrayTooltipOnMouseMove, 100, NULL); } } break; case WM_LBUTTONDBLCLK: case WM_RBUTTONDBLCLK: case WM_RBUTTONDOWN: break; case WM_LBUTTONDOWN: PostMessage(WM_SYSCOMMAND, SC_RESTORE); break; case WM_CONTEXTMENU: break; case WM_RBUTTONUP: { CPoint pt; GetCursorPos(&pt); ShowTrayMenu(pt); } break; } return 0; }
/*static*/ bool Win32TrayItem::ShowTrayMenu(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int trayIconID = LOWORD(wParam); return ShowTrayMenu(trayIconID); }
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { static UINT s_uTaskBarCreated = 0; switch(uMsg) { case WM_CREATE: { g_hwndMain = hwnd; // Register task bar (re)creation in order to reload systray icons after explorer crashes s_uTaskBarCreated = RegisterWindowMessage(REGISTER_MESSAGE); // Set Icons SendMessage(hwnd, WM_SETICON, ICON_BIG, (LONG)(LONG_PTR)LoadImage(g_hInst, MAKEINTRESOURCE(IDI_MAIN_ICON), IMAGE_ICON, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR)); SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LONG)(LONG_PTR)LoadImage(g_hInst, MAKEINTRESOURCE(IDI_MAIN_ICON), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR)); ShowWindow(hwnd, SW_HIDE); // Clear the list g_IconTray.clear(); installHookKeyboard(); // Open the configuration if (openConfig() == FALSE) { uninstallHookKeyboard(); clearMenuSkin(); MessageBox(g_hwndMain, L"Configuration file not found or invalid", ERR_MSGBOX_TITLE, NULL); PostQuitMessage(0); return 0; } // Retreive the version of Windows (in order to know if it is a win200 or superior) windowsVersion = GetWindowsVersion(); // Initialisation of variables for menus InitMenuVars(); // Add the system tray icons (depends of the configuration) ShowTrayIcons(); // Show loading error messages if (g_loadingmessage != NULL) { ShowBalloon(ERR_MSGBOX_TITLE, g_loadingmessage, 0, NIIF_ERROR); free(g_loadingmessage); g_loadingmessage = NULL; } // Launch application in "autorun" mode fireEvent(PROG_EVENT_START); FlushMemory(); } break; case WM_HOTKEY: if( (wParam >= IDH_HOTKEY_MENU) && (wParam <= (IDH_HOTKEY_MENU + g_portal->hotkeys.size()) ) ) { // Detect application item or menu item in order to open a menu or launch the application PortalProg* l_sp = g_portal->hotkeys[ wParam - IDH_HOTKEY_MENU ]; while( l_sp ) { if( l_sp->progs.size() > 0 ) { ShowTrayMenu(l_sp, PORTAL_MENU_HOTKEY); } else { l_sp->run(false); // Some commands could call quitPortal. In this case g_portal is set to NULL. if(g_portal == NULL) return 0; } l_sp = l_sp->nextSameHotkey; } } FlushMemory(); break; case WM_DESTROY: { quitPortal(); } break; case WM_MYTRAYMSG: if ((wParam >= IDI_MAIN_ICON) && g_portal && (wParam <= (IDI_MAIN_ICON + g_portal->menus.size()))) { // Find the clicked systray int pos = (int)wParam - IDI_MAIN_ICON; if( ((UINT)lParam == WM_RBUTTONUP) || ((UINT)lParam == WM_LBUTTONUP) || ((UINT)lParam == WM_MOUSEMOVE) ) { // Left click : minimalist menu // Right click : Complete menu (with About/Reload/Quit) // Auto Open : Complete menu (like right click) with a automatic dismiss int param = PORTAL_MENU_SYSTRAY; if((UINT)lParam == WM_RBUTTONUP) { param = PORTAL_MENU_SYSTRAY_CMD; } if( ((UINT)lParam == WM_MOUSEMOVE) ) { if( (g_portal->menus[pos] != NULL) && (g_portal->menus[pos]->options & PROG_OPTION_AUTOOPEN) ) { param = PORTAL_MENU_SYSTRAY_AUTO; } else { return 0; } } // Detect if the icon is for a menu or a application if( (g_portal->menus[pos] != NULL) && ( g_portal->menus[pos]->progs.size() > 0 ) ) { ShowTrayMenu(g_portal->menus[pos], param); g_currentMenu = pos; } else if( (g_portal->menus[pos] != NULL) && (g_portal->menus[pos]->progExe != NULL )) { if((UINT)lParam == WM_LBUTTONUP) { g_portal->menus[pos]->run(true); g_currentMenu = pos; } else { ShowTrayMenu(g_portal->menus[pos], param); g_currentMenu = pos; } } else { ShowTrayMenu(NULL, param); g_currentMenu = 0; } FlushMemory(); } else if( (UINT)lParam == NIN_BALLOONUSERCLICK ) { if(g_aboutbaloon) checkGuiproVersion(); FlushMemory(); return 0; } } break; case WM_INITMENUPOPUP : OnInitMenuPopup(hwnd, wParam, lParam); break; case WM_UNINITMENUPOPUP: OnUninitMenuPopup(hwnd, wParam, lParam); break; case WM_MEASUREITEM : OnMeasureItem(hwnd, wParam, lParam); break; case WM_DRAWITEM : OnDrawItem(hwnd, wParam, lParam); break; case WM_MENUCHAR: return OnMenuCharItem(hwnd, wParam, lParam); case WM_COMMAND: // Retreive a menu command if( wParam == IDM_EXIT ) { quitPortal(); } else if( wParam == IDM_RELOAD ) { reloadPortalConfig(); } else if( wParam == IDM_ABOUT ) { ShowAbout(g_currentMenu); FlushMemory(); } else if( ((UINT)wParam >= (PORTAL_HK_ID)) && ( (UINT)wParam <= (UINT)(PORTAL_HK_ID + menuGetNbElem()) ) ) { PortalProg* l_sp = menuGetElem( (int)(wParam - 1 - PORTAL_HK_ID) ); l_sp->run(true); FlushMemory(); } else if( ((UINT)wParam >= (PORTAL_FILE_ID)) && ( (UINT)wParam < (UINT)(PORTAL_FILE_ID + menuGetNbFiles()) ) ) { PortalProg* l_sp = menuGetFile( (int)(wParam - PORTAL_FILE_ID) ); l_sp->run(true); FlushMemory(); for(PortalProgVector::iterator i = g_portal_files.begin(); i != g_portal_files.end(); i++) { delete (*i); } g_portal_files.clear(); } break; default: if( uMsg == s_uTaskBarCreated ) { // Traskbar (re)creation, we have to reset systray icons ReloadTrayIcons(); FlushMemory(); } else { return(DefWindowProc(hwnd, uMsg, wParam, lParam)); } break; } return 0; }
INT_PTR CALLBACK DlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_COMMAND: if (HIWORD(wParam) == BN_CLICKED) { switch (LOWORD(wParam)) { case IDC_BTN_CONN: case SWM_CONN: on_button_connect_clicked(); break; case IDC_BTN_EXIT: case SWM_LOGOFF: on_button_exit_clicked (); break; case IDC_CHK_AUTO_CON: auto_con = IsDlgButtonChecked(hwnd, IDC_CHK_AUTO_CON); reg_info_dword (reg_key, REG_KEY_AUTO_CON, TRUE, auto_con, NULL); break; case IDC_CHK_AUTO_MIN: auto_min = IsDlgButtonChecked(hwnd, IDC_CHK_AUTO_MIN); reg_info_dword (reg_key, REG_KEY_AUTO_MIN, TRUE, auto_min, NULL); // if (auto_min && state == ONLINE && IsWindowVisible(hwnd)) { // ShowWindow(hwnd, SW_HIDE); // } break; case SWM_SHOW: ShowWindow(hwnd, SW_RESTORE); break; case SWM_HIDE: case IDOK: ShowWindow(hwnd, SW_HIDE); break; case SWM_EXIT: on_program_quit(); break; } } else if (HIWORD(wParam) == CBN_SELCHANGE) { combo_index = SendMessage((HWND)lParam, CB_GETCURSEL, 0, 0); } break; case SWM_TRAYMSG: switch(lParam) { case WM_LBUTTONDBLCLK: if (IsWindowVisible(hwnd)) ShowWindow(hwnd, SW_HIDE); else ShowWindow(hwnd, SW_RESTORE); break; case WM_RBUTTONDOWN: case WM_CONTEXTMENU: ShowTrayMenu(hwnd); break; } break; case WM_CLOSE: on_close_window_clicked(); break; } return FALSE; }
LRESULT CALLBACK OptionsWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static HWND hwAppDesc, hwcPreventShutdown, hwcPreventSleep, hwgbBSOD, hwcBSODnoMouse, hwcBSODsecureDesk, hwcBSODnoTaskmgr, hwbBSOD; switch (message) { case WM_CREATE: hwAppDesc = CreateWindow(T("STATIC"), T("Welcome to CompuGuard, ") T("select something to guard:"), WS_CHILD | WS_VISIBLE | SS_LEFT, 10, 10, 400, 20, hwnd, NULL, g_hInstance, NULL); hwcPreventShutdown = CreateWindow(TEXT("button"), TEXT("Prevent &Shutdown"), WS_VISIBLE | WS_CHILD | BS_CHECKBOX, 10, 40, 190, 20, hwnd, (HMENU) OPTBTN_PREVENT_SHUTDOWN, g_hInstance, NULL); CheckDlgButton(hwnd, OPTBTN_PREVENT_SHUTDOWN, BST_CHECKED); hwcPreventSleep = CreateWindow(TEXT("button"), TEXT("Prevent S&leep"), WS_VISIBLE | WS_CHILD | BS_CHECKBOX, 10, 60, 190, 20, hwnd, (HMENU) OPTBTN_PREVENT_SLEEP, g_hInstance, NULL); CheckDlgButton(hwnd, OPTBTN_PREVENT_SLEEP, BST_CHECKED); // Blue Screen Section hwgbBSOD = CreateWindow(TEXT("button"), TEXT("&Blue Screen of Death"), WS_VISIBLE | WS_CHILD | BS_GROUPBOX, 210, 40, 190, 100, hwnd, NULL, g_hInstance, NULL); hwcBSODnoMouse = CreateWindow( TEXT("button"), TEXT("Disable &Mouse"), WS_VISIBLE | WS_CHILD | BS_CHECKBOX, 220, 55, 150, 20, hwnd, (HMENU) OPTBTN_BSOD_DISABLE_MOUSE, g_hInstance, NULL); CheckDlgButton(hwnd, OPTBTN_BSOD_DISABLE_MOUSE, BST_CHECKED); hwcBSODsecureDesk = CreateWindow( TEXT("button"), TEXT("Use &Secure Desktop"), WS_VISIBLE | WS_CHILD | BS_CHECKBOX, 220, 75, 150, 20, hwnd, (HMENU) OPTBTN_BSOD_SECURE_DESK, g_hInstance, NULL); CheckDlgButton(hwnd, OPTBTN_BSOD_SECURE_DESK, BST_CHECKED); hwcBSODnoTaskmgr = CreateWindow( TEXT("button"), TEXT("Disable &Task Manager"), WS_VISIBLE | WS_CHILD | BS_CHECKBOX, 220, 75, 150, 20, hwnd, (HMENU) OPTBTN_BSOD_NO_TASKMGR, g_hInstance, NULL); CheckDlgButton(hwnd, OPTBTN_BSOD_NO_TASKMGR, BST_CHECKED); hwbBSOD = CreateWindow(TEXT("button"), TEXT("Show &BSOD"), WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 220, 95, 170, 20, hwnd, (HMENU) OPTBTN_BSOD_RUN, g_hInstance, NULL); SendMessage(hwnd, WM_SETFONT, (WPARAM) g_hFont, TRUE); SendMessage(hwAppDesc, WM_SETFONT, (WPARAM) g_hFont, TRUE); SendMessage(hwcPreventShutdown, WM_SETFONT, (WPARAM) g_hFont, TRUE); SendMessage(hwcPreventSleep, WM_SETFONT, (WPARAM) g_hFont, TRUE); SendMessage(hwgbBSOD, WM_SETFONT, (WPARAM) g_hFont, TRUE); SendMessage(hwcBSODnoMouse, WM_SETFONT, (WPARAM) g_hFont, TRUE); SendMessage(hwcBSODsecureDesk, WM_SETFONT, (WPARAM) g_hFont, TRUE); SendMessage(hwbBSOD, WM_SETFONT, (WPARAM) g_hFont, TRUE); SendMessage(hwcBSODnoTaskmgr, WM_SETFONT, (WPARAM) g_hFont, TRUE); if (IsDlgButtonChecked(hwnd, OPTBTN_PREVENT_SHUTDOWN) && fShutdownBlockReasonCreate != NULL) fShutdownBlockReasonCreate(hwnd, T("Jon Skeet said you can't shutdown!")); break; case WM_EXIT: if (ShowPasswordDialog(hwnd)) DestroyWindow(hwnd); else MessageBox(hwnd, T("Wrong password!"), T("Error"), MB_ICONERROR); break; case WM_DESTROY: if (IsDlgButtonChecked(hwnd, OPTBTN_PREVENT_SHUTDOWN) && fShutdownBlockReasonDestroy != NULL) fShutdownBlockReasonDestroy(hwnd); PostQuitMessage(0); break; case WM_TRAY: switch (lParam) { case WM_LBUTTONDBLCLK: ShowWindow(hwnd, IsWindowVisible(hwnd) ? SW_HIDE : SW_SHOW); break; case WM_RBUTTONDOWN: ShowTrayMenu(hwnd); break; } break; case WM_COMMAND: switch (LOWORD(wParam)) { case TRAYBTN_SHOW: ShowWindow(hwnd, IsWindowVisible(hwnd) ? SW_HIDE : SW_SHOW); break; case TRAYBTN_EXIT: PostMessage(hwnd, WM_EXIT, 0, 0); break; case OPTBTN_PREVENT_SHUTDOWN: { BOOL checked = IsDlgButtonChecked(hwnd, OPTBTN_PREVENT_SHUTDOWN); CheckDlgButton(hwnd, OPTBTN_PREVENT_SHUTDOWN, checked ? BST_UNCHECKED : BST_CHECKED); PreventShutdown(hwnd, checked); break; } case OPTBTN_PREVENT_SLEEP: { BOOL checked = IsDlgButtonChecked(hwnd, OPTBTN_PREVENT_SLEEP); CheckDlgButton(hwnd, OPTBTN_PREVENT_SLEEP, checked ? BST_UNCHECKED : BST_CHECKED); PreventSleep(checked); break; } case OPTBTN_BSOD_DISABLE_MOUSE: { g_BSODnoMouse = IsDlgButtonChecked(hwnd, OPTBTN_BSOD_DISABLE_MOUSE); CheckDlgButton(hwnd, OPTBTN_BSOD_DISABLE_MOUSE, g_BSODnoMouse ? BST_UNCHECKED : BST_CHECKED); break; } case OPTBTN_BSOD_SECURE_DESK: { g_BSODsecureDesk = IsDlgButtonChecked(hwnd, OPTBTN_BSOD_SECURE_DESK); CheckDlgButton(hwnd, OPTBTN_BSOD_SECURE_DESK, g_BSODsecureDesk ? BST_UNCHECKED : BST_CHECKED); break; } case OPTBTN_BSOD_NO_TASKMGR: { g_BSODnotaskmgr = IsDlgButtonChecked(hwnd, OPTBTN_BSOD_NO_TASKMGR); CheckDlgButton(hwnd, OPTBTN_BSOD_NO_TASKMGR, g_BSODnotaskmgr ? BST_UNCHECKED : BST_CHECKED); break; } case OPTBTN_BSOD_RUN: ShowBSOD(); break; } break; case WM_CLOSE: ShowWindow(hwnd, SW_HIDE); return 0; case WM_QUERYENDSESSION: return !IsDlgButtonChecked(hwnd, OPTBTN_PREVENT_SHUTDOWN); case WM_CTLCOLORSTATIC: { HDC hdcStatic = (HDC) wParam; SetBkColor(hdcStatic, RGB(0xF0, 0xF0, 0xF0)); return (INT_PTR) g_hBrush; } default: return DefWindowProc(hwnd, message, wParam, lParam); } return 0; }
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { static UINT s_uTaskBarCreated = 0; switch(uMsg) { case WM_CREATE: s_uTaskBarCreated = RegisterWindowMessage(L"TaskbarCreated"); g_hwndMain = hwnd; // Set icons SendMessage(hwnd, WM_SETICON, ICON_BIG, (LONG)(LONG_PTR)LoadImage(g_hInst, MAKEINTRESOURCE(IDI_MAIN_ICON), IMAGE_ICON, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR)); SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LONG)(LONG_PTR)LoadImage(g_hInst, MAKEINTRESOURCE(IDI_TRAY_ICON), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR)); // call uninstall hook keyboard to clean the override key array uninstallHookKeyboard(); // Set the Tray Icon ReloadExTrayIcon(); if (openConfig() == 1) { MessageBox(g_hwndMain, L"No config file", L"Error", NULL); GUIProQuit(); return 0; } if (!registerConfig(TRUE)) { GUIProQuit(); return 0; } /* myRegisterHotKey(VK_ADD, MOD_CONTROL | MOD_WIN, IDH_HOTKEY_VOL_UP, true); myRegisterHotKey(VK_SUBTRACT, MOD_CONTROL | MOD_WIN, IDH_HOTKEY_VOL_DOWN, true); myRegisterHotKey(VK_NUMPAD0, MOD_CONTROL | MOD_WIN, IDH_HOTKEY_VOL_MUTE, true); */ // Clean the memory in order to have a light application FlushMemory(); break; case WM_DESTROY: GUIProQuit(); break; case WM_HOTKEY: { int ret = -2; switch (wParam) { case IDH_HOTKEY_VOL_UP: ret = changeVolumeUp(); break; case IDH_HOTKEY_VOL_DOWN: ret = changeVolumeDown(); break; case IDH_HOTKEY_VOL_MUTE: ret = changeVolumeMute(); if (ret > 0) ret = getVolume(); break; } if (ret >= 0) { ShowVolumeBalloon(ret); } unloadVolumeInterface(); FlushMemory(); } break; case WM_MYTRAYMSG: // Tray Icon event if (wParam == IDI_MAIN_ICON) { if ((UINT)lParam == WM_RBUTTONUP) { ShowTrayMenu(); FlushMemory(); } else if ((UINT)lParam == WM_LBUTTONUP) { ShowVolumeBalloon(-1); FlushMemory(); } } break; default: if( uMsg == s_uTaskBarCreated ) { ReloadExTrayIcon(); FlushMemory(); } else { return(DefWindowProc(hwnd, uMsg, wParam, lParam)); } break; } return 0; }
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); }