Показывать таймер презентации только на одном из двух клонированных дисплеев - PullRequest
3 голосов
/ 21 января 2012

Можно ли показать приложение только на одном дисплее, если дисплей клонирован? Моя цель - разработать таймер, который будет отображаться на дисплее ноутбука во время презентации, но не на проекторе.

Я ищу что-то вроде функции «Идентифицировать дисплеи» Windows, которая отображает цифры 1 и 2 на разных дисплеях, даже в клонированном режиме.

Спасибо

Редактировать

Я обнаружил возможный дубликат к этому вопросу. В этом случае принятым ответом было использование Screens.AllScreens для определения количества экранов. Этого недостаточно в моем случае. Комментарий к принятому ответу ссылается на ветку о , непосредственно рисующей на рабочем столе . Я попробовал это с помощью следующего кода, но текст появился на обоих дисплеях. Код для получения Hdc ввода взят из статьи о снимках экрана . Я не уверен, что установить для других параметров (они IntPtr.Zero в статье)

[DllImport("gdi32.dll")]
static extern IntPtr CreateDC(IntPtr lpszDriver, string lpszDevice, IntPtr lpszOutput, IntPtr lpszInitData);

[DllImport("gdi32.dll")]
static extern IntPtr DeleteDC(IntPtr hdc);

private void PaintOnDesktop(string stringToPrint, Font font, Brush brush, PointF position) {
    string deviceName = Screen.AllScreens[0].DeviceName;
    IntPtr targetHdc = CreateDC(IntPtr.Zero, deviceName, IntPtr.Zero, IntPtr.Zero);
    using (Graphics g = Graphics.FromHdc(targetHdc)) {
        g.DrawString(stringToPrint, font, brush, position);
    }
    DeleteDC(targetHdc);
}

Редактировать 2

По-видимому, в C # нет способа сделать это, поэтому я изменил тег C # на драйвер устройства.

1 Ответ

1 голос
/ 05 февраля 2012

Единственный способ добиться этого эффекта - это «клонировать» экран «вручную», то есть не использовать эту функцию драйвера, что, конечно, приведет к некоторой задержке.UltraMon имеет такую ​​функцию, разработанную для видеокарт или ОС, которые не поддерживают клонирование нескольких мониторов.Это в основном делается путем быстрого скриншота рабочего стола и отображения его в форме на другом (расширенном) мониторе.

Индуцированная задержка присутствует только на одном из мониторов, поэтому в вашем случае, если это для презентации,Я бы предложил сделать «ваш» монитор (возможно, основной на вашем ноутбуке) получателем лага, чтобы аудитория его не увидела.Затем вы, конечно, можете нарисовать форму таймера в верхней части любого экрана.

...