fix: window content protection on older Windows versions (#47886)

Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
This commit is contained in:
trop[bot]
2025-07-31 10:53:15 +02:00
committed by GitHub
parent 8841e4be83
commit a41ca28b63
3 changed files with 17 additions and 6 deletions

View File

@@ -1282,12 +1282,7 @@ void NativeWindowViews::SetOpacity(const double opacity) {
#if BUILDFLAG(IS_WIN)
const double boundedOpacity = std::clamp(opacity, 0.0, 1.0);
HWND hwnd = GetAcceleratedWidget();
if (!layered_) {
LONG ex_style = ::GetWindowLong(hwnd, GWL_EXSTYLE);
ex_style |= WS_EX_LAYERED;
::SetWindowLong(hwnd, GWL_EXSTYLE, ex_style);
layered_ = true;
}
SetLayered();
::SetLayeredWindowAttributes(hwnd, 0, boundedOpacity * 255, LWA_ALPHA);
opacity_ = boundedOpacity;
#else
@@ -1730,6 +1725,16 @@ void NativeWindowViews::UpdateThickFrame() {
FlipWindowStyle(GetAcceleratedWidget(), resizable_, WS_THICKFRAME);
}
}
void NativeWindowViews::SetLayered() {
HWND hwnd = GetAcceleratedWidget();
if (!layered_) {
LONG ex_style = ::GetWindowLong(hwnd, GWL_EXSTYLE);
ex_style |= WS_EX_LAYERED;
::SetWindowLong(hwnd, GWL_EXSTYLE, ex_style);
layered_ = true;
}
}
#endif
void NativeWindowViews::OnWidgetActivationChanged(views::Widget* changed_widget,

View File

@@ -178,6 +178,7 @@ class NativeWindowViews : public NativeWindow,
#if BUILDFLAG(IS_WIN)
TaskbarHost& taskbar_host() { return taskbar_host_; }
void UpdateThickFrame();
void SetLayered();
#endif
SkColor overlay_button_color() const { return overlay_button_color_; }

View File

@@ -176,6 +176,11 @@ void ElectronDesktopWindowTreeHostWin::UpdateAllowScreenshots() {
if (allowed == allow_screenshots_)
return;
// On some older Windows versions, setting the display affinity
// to WDA_EXCLUDEFROMCAPTURE won't prevent the window from being
// captured - setting WS_EX_LAYERED mitigates this issue.
if (base::win::GetVersion() < base::win::Version::WIN11_22H2)
native_window_view_->SetLayered();
::SetWindowDisplayAffinity(
GetAcceleratedWidget(),
allow_screenshots_ ? WDA_NONE : WDA_EXCLUDEFROMCAPTURE);