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 с правильным изображением.
Существует очень мало документации по этому вопросу, поэтому любая помощь будет отличной.