ディスプレイがクローンされている場合、1つのディスプレイにのみアプリケーションを表示することはできますか?私の目標は、プレゼンテーション中にノートパソコンのディスプレイに表示されるが、プロジェクタには表示されないタイマーを開発することです。2台のクローンディスプレイのうち1台にのみプレゼンテーションタイマーを表示
私はWindowsの "Identify displays"機能のようなものを探しています。これは、クローンモードでも、さまざまなディスプレイに数字1と2を表示します。
おかげ
編集
私はこの質問へpossible duplicateを発見しました。この場合の回答は、Screens.AllScreens
を使用して画面数を検出することでした。私の場合、これでは不十分です。受け入れられた回答のコメントは、directly painting on the desktopについてのスレッドへのリンクです。私は次のコードでこれを試しましたが、テキストが両方のディスプレイに表示されました。入力のHdcを取得するコードは、screen capturesについての記事からです。私は
[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#でこれを実行する方法はありません(彼らは記事にIntPtr.Zeroをしている)他のパラメータのために何を設定するかわからないので、私C#タグをデバイスドライバに変更しました。
私はusermodeでこれを行う方法が絶対にないと思う。たとえ可能であっても、ディスプレイドライバをハックする必要があります。とにかく、ユーザーの設定に違反することは悪い考えです。あなたが本当に望むのは、非クローンモードに一時的に切り替えて戻すことでしょうか? –
ご返信ありがとうございます。私は、クローンと非クローンの間の切り替えが可能ではないと思います。私は毎秒更新するラップトップ画面にタイマーを持っていたいと思います。私はこれが極端なちらつきにつながると思う。 ドライバーをどのように直接使うことができますか?ディスプレイ全体にアプリケーション全体を印刷する必要はありません。テキストを印刷することもOKです。 – Flogo
あなたが何をしているのか分かります。本当に親切なのは、それをクローンとして残すことです。あなたはこれを行う方法を見つけることができますが、計画Bの準備ができていることを願っています。(いいえ、カスタムディスプレイドライバでこれをどうやって行うのか分かりません) –