Осложнения при захвате экрана с окном WPF сверху - PullRequest
1 голос
/ 09 марта 2011

Мне нужно захватить весь экран с прозрачным окном WPF в качестве самого верхнего окна.Я попробовал 2 подхода:

  1. с использованием System.Windows.Drawing.Graphics.CopyFromScreen
  2. с использованием WINAPI GetDesktopWindow

Оба метода дают одинаковый результат.Я получаю весь экран, КРОМЕ моего самого прозрачного окна WPF.Окно WPF w создается с:

w.AllowsTransparency = true;
w.WindowStyle = System.Windows.WindowStyle.None;
w.Background = new SolidColorBrush( Color.FromArgb( 1, 0, 0, 0 ) );
w.Topmost = true;

плюс некоторый контент, конечно.Окно покрывает всю поверхность экрана.

По-видимому, окно WPF рисует на поверхности, которая не включена в GetDesktopWindow.

Может кто-нибудь, пожалуйста, пролить свет на это и поделиться некоторыми идеями, какдействительно получить всю поверхность экрана?

1 Ответ

1 голос
/ 09 марта 2011

Только что нашел решение:

Насколько я могу судить, не существует решения для подхода Graphics.CopyFromScreen, потому что вам нужно ИЛИ CopyPixelOperation.CaptureBlt с CopyPixelOperation.SourceCopy, но вы не можете.Обычное безумие M $ несоответствия ...

Однако подход WINAPI работает, так как вы можете комбинировать SRCCOPY и CAPTUREBLT при использовании BitBlt.Без CAPTUREBLT прозрачные и многослойные окна не будут включены.

...