void CWHelper::OnExit() { // Bring back XBMC window ShowWindow(g_hWnd,SW_RESTORE); SetForegroundWindow(g_hWnd); m_hwnd = NULL; if(m_hProcess != NULL) { CloseHandle(m_hProcess); m_hProcess = NULL; } LockSetForegroundWindow(LSFW_LOCK); OutputDebugString(L"WindowHelper thread ended\n"); }
/* * Bring the specifed window to the front */ bool mixp_bring_to_front(const QWidget *window) { bool ret = false; if(window) { for(int i = 0; (i < 5) && (!ret); i++) { ret = (SetForegroundWindow(window->winId()) != FALSE); SwitchToThisWindow(window->winId(), TRUE); } LockSetForegroundWindow(LSFW_LOCK); } return ret; }
static INT_PTR CALLBACK ShutdownDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { BYTE shutdownType = (BYTE)GetWindowLongPtr(hwndDlg, DWLP_USER); WORD countdown = (WORD)GetWindowLongPtr(GetDlgItem(hwndDlg, IDC_TEXT_HEADER), GWLP_USERDATA); switch (msg) { case WM_INITDIALOG: hwndShutdownDlg = hwndDlg; SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)lParam); TranslateDialogDefault(hwndDlg); if (lParam == SDSDT_SHUTDOWN || lParam == SDSDT_REBOOT || lParam == SDSDT_LOGOFF) ShowWindow(GetDlgItem(hwndDlg, IDC_TEXT_UNSAVEDWARNING), SW_SHOW); SendDlgItemMessage(hwndDlg, IDC_ICON_HEADER, STM_SETIMAGE, IMAGE_ICON, (LPARAM)IcoLib_GetIcon("AutoShutdown_Header")); { HFONT hBoldFont; LOGFONT lf; if (GetObject((HFONT)SendDlgItemMessage(hwndDlg, IDC_TEXT_HEADER, WM_GETFONT, 0, 0), sizeof(lf), &lf)) { lf.lfWeight = FW_BOLD; hBoldFont = CreateFontIndirect(&lf); } else hBoldFont = NULL; SendDlgItemMessage(hwndDlg, IDC_TEXT_HEADER, WM_SETFONT, (WPARAM)hBoldFont, FALSE); SetWindowLongPtr(GetDlgItem(hwndDlg, IDC_TEXT_HEADER), GWLP_USERDATA, (LONG_PTR)hBoldFont); } { countdown = db_get_w(NULL, "AutoShutdown", "ConfirmDlgCountdown", SETTING_CONFIRMDLGCOUNTDOWN_DEFAULT); if (countdown < 3) countdown = SETTING_CONFIRMDLGCOUNTDOWN_DEFAULT; SetWindowLongPtr(GetDlgItem(hwndDlg, IDC_TEXT_HEADER), GWLP_USERDATA, countdown); SendMessage(hwndDlg, M_UPDATE_COUNTDOWN, 0, countdown); } SkinPlaySound("AutoShutdown_Countdown"); if (!SetTimer(hwndDlg, 1, 1000, NULL)) PostMessage(hwndDlg, M_START_SHUTDOWN, 0, 0); Utils_RestoreWindowPositionNoSize(hwndDlg, NULL, "AutoShutdown", "ConfirmDlg_"); /* disallow foreground window changes (WinMe/2000+) */ SetForegroundWindow(hwndDlg); LockSetForegroundWindow(LSFW_LOCK); SendMessage(hwndDlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(hwndDlg, IDCANCEL), TRUE); return FALSE; /* focus set on cancel */ case WM_DESTROY: { hwndShutdownDlg = NULL; ShowWindow(hwndDlg, SW_HIDE); /* reallow foreground window changes (WinMe/2000+) */ LockSetForegroundWindow(LSFW_UNLOCK); Utils_SaveWindowPosition(hwndDlg, NULL, "AutoShutdown", "ConfirmDlg_"); HFONT hFont = (HFONT)SendDlgItemMessage(hwndDlg, IDC_TEXT_HEADER, WM_GETFONT, 0, 0); SendDlgItemMessage(hwndDlg, IDC_TEXT_HEADER, WM_SETFONT, 0, FALSE); /* no return value */ if (hFont != NULL) DeleteObject(hFont); } return TRUE; case M_START_SHUTDOWN: if (IsWindowEnabled(GetDlgItem(hwndDlg, IDC_BUTTON_SHUTDOWNNOW))) { EnableWindow(GetDlgItem(hwndDlg, IDC_BUTTON_SHUTDOWNNOW), FALSE); ShowWindow(hwndDlg, SW_HIDE); /* get rid of the dialog immediately */ DWORD dwErrCode = ShutdownNow(shutdownType); if (dwErrCode != ERROR_SUCCESS) { char *pszErr = GetWinErrorDescription(dwErrCode); ShowInfoMessage(NIIF_ERROR, Translate("Automatic Shutdown Error"), Translate("The shutdown process failed!\nReason: %s"), (pszErr != NULL) ? pszErr : Translate("Unknown")); if (pszErr != NULL) LocalFree(pszErr); } DestroyWindow(hwndDlg); } return TRUE; case WM_TIMER: if (countdown) { --countdown; SetWindowLongPtr(GetDlgItem(hwndDlg, IDC_TEXT_HEADER), GWLP_USERDATA, countdown); if (countdown == 27 || countdown == 24 || countdown == 21 || countdown == 19 || countdown == 17 || countdown == 15 || countdown == 13 || countdown == 11 || countdown <= 10) SkinPlaySound("AutoShutdown_Countdown"); } else KillTimer(hwndDlg, wParam); /* countdown finished */ PostMessage(hwndDlg, M_UPDATE_COUNTDOWN, 0, countdown); return TRUE; case M_UPDATE_COUNTDOWN: /* lParam=(WORD)countdown */ { TCHAR szText[256]; mir_sntprintf(szText, TranslateTS(desc[shutdownType - 1]), lParam); SetDlgItemText(hwndDlg, IDC_TEXT_HEADER, szText); /* countdown finished */ if (!lParam) PostMessage(hwndDlg, M_START_SHUTDOWN, 0, 0); } return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_BUTTON_SHUTDOWNNOW: KillTimer(hwndDlg, 1); SetWindowLongPtr(GetDlgItem(hwndDlg, IDC_TEXT_HEADER), GWLP_USERDATA, 0); SendMessage(hwndDlg, M_UPDATE_COUNTDOWN, 0, (LONG)0); PostMessage(hwndDlg, M_START_SHUTDOWN, 0, 0); return TRUE; case IDCANCEL: /* WM_CLOSE */ if (countdown) { KillTimer(hwndDlg, 1); DestroyWindow(hwndDlg); } return TRUE; } break; } return FALSE; }
static LRESULT CALLBACK _window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) { TRACKMOUSEEVENT tme = {0}; switch ( msg ) { case APP_WINDOW_CREATE: { RECT rect; GetClientRect(hwnd, &rect); window.w = rect.right-rect.left; window.h = rect.bottom-rect.top; window.created = 1; pushL_windowevent("create"); return 0; } case WM_ACTIVATEAPP: if ( wparam ) { window.activated = 1; SetForegroundWindow(hwnd); LockSetForegroundWindow( LSFW_LOCK ); InvalidateRect(hwnd, 0, 0); if (window.created) pushL_windowevent("activate"); } else { window.activated = 0; if (window.created) pushL_windowevent("deactivate"); } return 0; case APP_TICK: window.timerposted = 0; pushL_tick(); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; case WM_SHOWWINDOW: if (wparam) { if (window.created) pushL_windowevent("show"); } else { if (window.created) pushL_windowevent("hide"); } return 0; case WM_MOVE: if ( !IsIconic( hwnd ) ) { window.x = (int)(short)LOWORD( lparam ); window.y = (int)(short)HIWORD( lparam ); if (window.created) pushL_windowevent("move"); } return 0; case WM_SIZE: if ( SIZE_MAXIMIZED == wparam || SIZE_RESTORED == wparam ) { window.w = LOWORD( lparam ); window.h = HIWORD( lparam ); if (window.created) { pushL_windowevent("resize"); pushL_draw(); SwapBuffers(window.hdc); } } return 0; case WM_ERASEBKGND: return 1; case WM_PAINT: if ( GetUpdateRect(hwnd, 0, FALSE) ) { ValidateRect(hwnd, 0 ); pushL_draw(); SwapBuffers(window.hdc); } return 0; case WM_APPCOMMAND: switch ( GET_APPCOMMAND_LPARAM( lparam ) ) { case APPCOMMAND_COPY: pushL_command("copy"); break; case APPCOMMAND_CUT: pushL_command("cut"); break; case APPCOMMAND_PASTE: pushL_command("paste"); break; default: return DefWindowProc(hwnd, msg, wparam, lparam); } return 1; case WM_MBUTTONDBLCLK: pushL_mousedblclick(GET_X_LPARAM( lparam ), GET_Y_LPARAM( lparam ), "middle", GetKeyState( VK_MENU ) & 0x8000, GetKeyState( VK_CONTROL ) & 0x8000, GetKeyState( VK_SHIFT ) & 0x8000); return 0; case WM_LBUTTONDBLCLK: pushL_mousedblclick(GET_X_LPARAM( lparam ), GET_Y_LPARAM( lparam ), "left", GetKeyState( VK_MENU ) & 0x8000, GetKeyState( VK_CONTROL ) & 0x8000, GetKeyState( VK_SHIFT ) & 0x8000); return 0; case WM_RBUTTONDBLCLK: pushL_mousedblclick(GET_X_LPARAM( lparam ), GET_Y_LPARAM( lparam ), "right", GetKeyState( VK_MENU ) & 0x8000, GetKeyState( VK_CONTROL ) & 0x8000, GetKeyState( VK_SHIFT ) & 0x8000); return 0; case WM_MBUTTONDOWN: SetCapture( hwnd ); pushL_mousedown(GET_X_LPARAM( lparam ), GET_Y_LPARAM( lparam ), "middle", GetKeyState( VK_MENU ) & 0x8000, GetKeyState( VK_CONTROL ) & 0x8000, GetKeyState( VK_SHIFT ) & 0x8000); return 0; case WM_LBUTTONDOWN: SetCapture( hwnd ); pushL_mousedown(GET_X_LPARAM( lparam ), GET_Y_LPARAM( lparam ), "left", GetKeyState( VK_MENU ) & 0x8000, GetKeyState( VK_CONTROL ) & 0x8000, GetKeyState( VK_SHIFT ) & 0x8000); return 0; case WM_RBUTTONDOWN: SetCapture( hwnd ); pushL_mousedown(GET_X_LPARAM( lparam ), GET_Y_LPARAM( lparam ), "right", GetKeyState( VK_MENU ) & 0x8000, GetKeyState( VK_CONTROL ) & 0x8000, GetKeyState( VK_SHIFT ) & 0x8000); return 0; case WM_MBUTTONUP: ReleaseCapture(); pushL_mouseup(GET_X_LPARAM( lparam ), GET_Y_LPARAM( lparam ), "middle", GetKeyState( VK_MENU ) & 0x8000, GetKeyState( VK_CONTROL ) & 0x8000, GetKeyState( VK_SHIFT ) & 0x8000); return 0; case WM_LBUTTONUP: ReleaseCapture(); pushL_mouseup(GET_X_LPARAM( lparam ), GET_Y_LPARAM( lparam ), "left", GetKeyState( VK_MENU ) & 0x8000, GetKeyState( VK_CONTROL ) & 0x8000, GetKeyState( VK_SHIFT ) & 0x8000); return 0; case WM_RBUTTONUP: ReleaseCapture(); pushL_mouseup(GET_X_LPARAM( lparam ), GET_Y_LPARAM( lparam ), "right", GetKeyState( VK_MENU ) & 0x8000, GetKeyState( VK_CONTROL ) & 0x8000, GetKeyState( VK_SHIFT ) & 0x8000); return 0; case WM_CHAR: if ( ( 32 <= ( wparam & 0xFF ) )) { pushL_char(wparam); } return 0; case WM_MOUSELEAVE: window.tracking = 0; pushL_mouseexit(); return 0; case WM_MOUSEMOVE: SetCursor( window.hcursor ); if ( !window.tracking ) { window.tracking = 1; tme.cbSize = sizeof( TRACKMOUSEEVENT ); tme.dwFlags = TME_LEAVE; tme.hwndTrack = hwnd; tme.dwHoverTime = HOVER_DEFAULT; TrackMouseEvent( &tme ); pushL_mouseenter(); } pushL_mousemove(GET_X_LPARAM(lparam ), GET_Y_LPARAM(lparam ), GetKeyState( VK_MENU ) & 0x8000, GetKeyState( VK_CONTROL ) & 0x8000, GetKeyState( VK_SHIFT ) & 0x8000); return 0; case WM_MOUSEWHEEL: { POINT pt; UINT step; SystemParametersInfo( SPI_GETWHEELSCROLLLINES, 0, &step, 0 ); pt.x = GET_X_LPARAM( lparam ); pt.y = GET_Y_LPARAM( lparam ); ScreenToClient(hwnd, &pt); pushL_mousewheel(pt.x, pt.y, GET_WHEEL_DELTA_WPARAM( wparam ) / WHEEL_DELTA, step, GetKeyState( VK_MENU ) & 0x8000, GetKeyState( VK_CONTROL ) & 0x8000, GetKeyState( VK_SHIFT ) & 0x8000); } return 0; case WM_KEYDOWN: case WM_SYSKEYDOWN: if ( KF_REPEAT & HIWORD( lparam ) ) { pushL_keypress(_translate_keyboard_key( wparam ), GetKeyState( VK_MENU ) & 0x8000, GetKeyState( VK_CONTROL ) & 0x8000, GetKeyState( VK_SHIFT ) & 0x8000); } else { pushL_keydown(_translate_keyboard_key( wparam ), GetKeyState( VK_MENU ) & 0x8000, GetKeyState( VK_CONTROL ) & 0x8000, GetKeyState( VK_SHIFT ) & 0x8000); } if ( GetKeyState( VK_CONTROL ) & 0x8000 ) { switch ( wparam ) { case 0x43: pushL_command("copy"); break; case 0x58: pushL_command("cut"); break; case 0x56: pushL_command("paste"); break; } } return 0; case WM_KEYUP: case WM_SYSKEYUP: pushL_keyup(_translate_keyboard_key( wparam ), GetKeyState( VK_MENU ) & 0x8000, GetKeyState( VK_CONTROL ) & 0x8000, GetKeyState( VK_SHIFT ) & 0x8000); return 0; } return DefWindowProc(hwnd, msg, wparam, lparam); }