1c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org/* 2c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 3c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org * 4c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org * Use of this source code is governed by a BSD-style license 5c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org * that can be found in the LICENSE file in the root of the source 6c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org * tree. An additional intellectual property rights grant can be found 7c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org * in the file PATENTS. All contributing project authors may 8c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org */ 10c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org 11c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org#include "webrtc/modules/desktop_capture/win/window_capture_utils.h" 12c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org 13c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.orgnamespace webrtc { 14c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org 15c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.orgbool 16c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.orgGetCroppedWindowRect(HWND window, 17c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org DesktopRect* cropped_rect, 18c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org DesktopRect* original_rect) { 19c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org RECT rect; 20c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org if (!GetWindowRect(window, &rect)) { 21c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org return false; 22c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org } 23c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org WINDOWPLACEMENT window_placement; 247ca277b57434afafef50dfbd371fd84fb96c7145jiayl@webrtc.org window_placement.length = sizeof(window_placement); 25c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org if (!GetWindowPlacement(window, &window_placement)) { 26c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org return false; 27c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org } 28c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org 29c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org *original_rect = DesktopRect::MakeLTRB( 30c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org rect.left, rect.top, rect.right, rect.bottom); 31c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org 327faba36f79c1cc8f8715f1060b849fdb5fcd6629Peter Kasting if (window_placement.showCmd == SW_SHOWMAXIMIZED) { 33c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org DesktopSize border = DesktopSize(GetSystemMetrics(SM_CXSIZEFRAME), 34c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org GetSystemMetrics(SM_CYSIZEFRAME)); 35c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org *cropped_rect = DesktopRect::MakeLTRB( 36c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org rect.left + border.width(), 37c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org rect.top, 38c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org rect.right - border.width(), 39c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org rect.bottom - border.height()); 40c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org } else { 41c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org *cropped_rect = *original_rect; 42c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org } 43c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org return true; 44c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org} 45c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org 46d848d5e74aee56f454311756dc2032fad26d79adJiayang LiuAeroChecker::AeroChecker() : dwmapi_library_(nullptr), func_(nullptr) { 47d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu // Try to load dwmapi.dll dynamically since it is not available on XP. 48d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu dwmapi_library_ = LoadLibrary(L"dwmapi.dll"); 49d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu if (dwmapi_library_) { 50d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu func_ = reinterpret_cast<DwmIsCompositionEnabledFunc>( 51d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu GetProcAddress(dwmapi_library_, "DwmIsCompositionEnabled")); 52d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu } 53d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu} 54d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu 55d848d5e74aee56f454311756dc2032fad26d79adJiayang LiuAeroChecker::~AeroChecker() { 56d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu if (dwmapi_library_) { 57d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu FreeLibrary(dwmapi_library_); 58d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu } 59d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu} 60d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu 61d848d5e74aee56f454311756dc2032fad26d79adJiayang Liubool AeroChecker::IsAeroEnabled() { 62d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu BOOL result = FALSE; 63d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu if (func_) { 64d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu func_(&result); 65d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu } 66d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu return result != FALSE; 67d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu} 68d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu 69c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org} // namespace webrtc 70