Browse Source

win-capture: Ignore cloaked windows

Fixes issue where there are two window handles for minimized Calculator,
and OBS picks the wrong one.
jpark37 5 years ago
parent
commit
e933e20b7c
2 changed files with 9 additions and 1 deletions
  1. 1 0
      plugins/win-capture/CMakeLists.txt
  2. 8 1
      plugins/win-capture/window-helpers.c

+ 1 - 0
plugins/win-capture/CMakeLists.txt

@@ -32,6 +32,7 @@ add_library(win-capture MODULE
 	${win-capture_HEADERS})
 target_link_libraries(win-capture
 	libobs
+	Dwmapi
 	ipc-util
 	psapi)
 

+ 8 - 1
plugins/win-capture/window-helpers.c

@@ -2,8 +2,9 @@
 #include <obs.h>
 #include <util/dstr.h>
 
-#include <windows.h>
+#include <dwmapi.h>
 #include <psapi.h>
+#include <windows.h>
 #include "window-helpers.h"
 #include "obfuscate.h"
 
@@ -442,6 +443,12 @@ BOOL CALLBACK enum_windows_proc(HWND window, LPARAM lParam)
 	if (!check_window_valid(window, data->mode))
 		return TRUE;
 
+	int cloaked;
+	if (SUCCEEDED(DwmGetWindowAttribute(window, DWMWA_CLOAKED, &cloaked,
+					    sizeof(cloaked))) &&
+	    cloaked)
+		return TRUE;
+
 	const int rating = window_rating(window, data->priority, data->class,
 					 data->title, data->exe,
 					 data->uwp_window);