This change avoids inadvertent capture of certain system windows (e.g. the Start menu, other taskbar menus, and notification toasts) when capturing a specific window on Windows. It stops using EnumWindows for detection of overlapping windows, because this API excludes these system windows from its enumeration. Using FindWindowEx instead enumerates these windows. The enumeration logic is refactored somewhat because a callback is no longer necessary. Bug: webrtc:10835 Change-Id: I1cccd44d6ef07f13a68e8daf2d2573d422001201 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/161153 Reviewed-by: Jamie Walch <jamiewalch@chromium.org> Commit-Queue: Jamie Walch <jamiewalch@chromium.org> Cr-Commit-Position: refs/heads/master@{#30022}
46 lines
1.4 KiB
C++
46 lines
1.4 KiB
C++
/*
|
|
* Copyright (c) 2019 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#ifndef MODULES_DESKTOP_CAPTURE_WIN_SELECTED_WINDOW_CONTEXT_H_
|
|
#define MODULES_DESKTOP_CAPTURE_WIN_SELECTED_WINDOW_CONTEXT_H_
|
|
|
|
#include <windows.h>
|
|
|
|
#include "modules/desktop_capture/desktop_geometry.h"
|
|
#include "modules/desktop_capture/win/window_capture_utils.h"
|
|
|
|
namespace webrtc {
|
|
|
|
class SelectedWindowContext {
|
|
public:
|
|
SelectedWindowContext(HWND selected_window,
|
|
DesktopRect selected_window_rect,
|
|
WindowCaptureHelperWin* window_capture_helper);
|
|
|
|
bool IsSelectedWindowValid() const;
|
|
|
|
bool IsWindowOwnedBySelectedWindow(HWND hwnd) const;
|
|
bool IsWindowOverlappingSelectedWindow(HWND hwnd) const;
|
|
|
|
HWND selected_window() const;
|
|
WindowCaptureHelperWin* window_capture_helper() const;
|
|
|
|
private:
|
|
const HWND selected_window_;
|
|
const DesktopRect selected_window_rect_;
|
|
WindowCaptureHelperWin* const window_capture_helper_;
|
|
DWORD selected_window_thread_id_;
|
|
DWORD selected_window_process_id_;
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // MODULES_DESKTOP_CAPTURE_WIN_SELECTED_WINDOW_CONTEXT_H_
|