SharpDX - вывод одного (вторичного) монитора

Я пытаюсь создать приложение для дублирования рабочего стола в C# с использованием библиотеки SharpDx. Проблема заключается в выборе экрана для дублирования. Я использую следующий код для настройки вывода:

public DesktopDuplicator(int whichGraphicsCardAdapter, int whichOutputDevice)
        {
            this.mWhichOutputDevice = whichOutputDevice;
            Adapter1 adapter = null;
            Factory1 factory;
            try
            {
                factory = new Factory1();

                adapter = factory.GetAdapter1(whichGraphicsCardAdapter);
            }
            catch (SharpDXException)
            {
                throw new DesktopDuplicationException("Could not find the specified graphics card adapter.");
            }
            this.mDevice = new Device(adapter);
            Output output = null;
            try
            {
                output = adapter.GetOutput(whichOutputDevice);

            }
            catch (SharpDXException)
            {
                throw new DesktopDuplicationException("Could not find the specified output device.");
            }


            var output1 = output.QueryInterface<Output1>();
            this.mOutputDesc = output.Description;
            this.mTextureDesc = new Texture2DDescription()
            {
                CpuAccessFlags = CpuAccessFlags.Read,
                BindFlags = BindFlags.None,
                Format = Format.B8G8R8A8_UNorm,
                Width = this.mOutputDesc.DesktopBounds.Right,
                Height = this.mOutputDesc.DesktopBounds.Bottom,
                OptionFlags = ResourceOptionFlags.None,
                MipLevels = 1,
                ArraySize = 1,
                SampleDescription = { Count = 1, Quality = 0 },
                Usage = ResourceUsage.Staging,

            };

            try
            {
                this.mDeskDupl = output1.DuplicateOutput(mDevice);
            }
            catch (SharpDXException ex)
            {
                if (ex.ResultCode.Code == SharpDX.DXGI.ResultCode.NotCurrentlyAvailable.Result.Code)
                {
                    throw new DesktopDuplicationException("There is already the maximum number of applications using the Desktop Duplication API running, please close one of the applications and try again.");
                }
            }
        }

Это работает в SharpDX 2.6.3, но в 4.0.1. Я могу легко дублировать основной экран (outputDevice = 0), но тогда возникает проблема со вторым экраном.

В адаптере есть 2 выхода (это правильно, у меня дисплей 1920x1080 и 1366x768 на ноутбуке). Первый (0-й - основной) выход отображается как 1920x1080 (что правильно), а второй - как 3386x1080. Это означает, что на втором выходе оба экрана объединены. Когда я пытаюсь просмотреть это изображение, я возвращаюсь, оно все черное и ничего не отображается. Я хотел вырезать второй выход из этого большего изображения, чтобы дублировать только эту часть, но проблема в том, что все черное, никакой информации. В SharpDx 2.6.3 он обычно возвращает второй вывод в виде 1366x768 с правильным изображением.

Существует очень мало документации по этому вопросу, поэтому любая помощь будет отличной.

0 ответов

Другие вопросы по тегам