質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

2353閲覧

マルチディスプレイで画面を投影したい。

Mashimasa

総合スコア51

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2021/10/20 07:24

拡張表示しているマルチティディスプレイがあります(ディスプレイ1、ディスプレイ2とします)。

ディスプレイ1では別のシステムの画面が表示されており、ディスプレイ2ではWPFのウインドウが表示されています。

ディスプレイ1と2は離れた場所にあり、時折ディスプレイ1の画面をディスプレイ2から確認したい(できれば操作もしたい)のですが、
WPFで、異なる座標の画面を投影させるようなことは実現可能なのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/10/20 07:43 編集

マルチディスプレイの設定を、表示画面の複製に変えればいいのではないでしょうか。
Mashimasa

2021/10/20 08:23 編集

DisplaySwitch.exeによる切り替えも検討しましたが、切り替え時に画面右端に、 Win+Pを押した時と同じ画面(映す - PC画面のみ 複製 拡張... の選択画面※Win10)が出てきてしまいます。業務アプリケーションなのでそれは避けたいです。それが避けられれば良いのですが....。
退会済みユーザー

退会済みユーザー

2021/10/21 02:28

拡大API面白そうですね。MagSetInputTransform辺りを使えば、操作を反映させる事も出来るのかな?
guest

回答1

0

ベストアンサー

とりあえず表示画面の複製に切り替えるのを前提で、 SetDisplayConfig の最低限動作したサンプルを。
詳細は、APIのリファレンスを読んでください。

vbnet

1Imports System.Runtime.InteropServices 2 3Module Module1 4 5 <Flags> 6 Enum SDCFlags As Integer 7 SDC_TOPOLOGY_CLONE = &H2 8 SDC_TOPOLOGY_EXTEND = &H4 9 SDC_APPLY = &H80 10 End Enum 11 12 <DllImport("User32.dll")> 13 Function SetDisplayConfig( 14 numPathArrayElements As Integer, 15 pathArray As IntPtr, 16 numModeInfoArrayElements As Integer, 17 modeInfoArray As IntPtr, 18 flags As SDCFlags) As Integer 19 End Function 20 21 Sub Main() 22 Console.WriteLine("何かキーを押すと表示画面複製に切り替えます。") 23 Console.ReadKey() 24 SetDisplayConfig(0, IntPtr.Zero, 0, IntPtr.Zero, (SDCFlags.SDC_APPLY Or SDCFlags.SDC_TOPOLOGY_CLONE)) 25 26 Console.WriteLine("何かキーを押すと表示画面拡張に切り替えます。") 27 Console.ReadKey() 28 SetDisplayConfig(0, IntPtr.Zero, 0, IntPtr.Zero, (SDCFlags.SDC_APPLY Or SDCFlags.SDC_TOPOLOGY_EXTEND)) 29 30 Console.WriteLine("何かキーを押すと終了します。") 31 Console.ReadKey() 32 End Sub 33 34End Module

KOZ6.0さんが紹介している拡大APIで特定ウィンドウを表示させるとかも出来そうですが、ちょっと面倒くさそうなのでそちらは試してません。

投稿2021/10/21 02:52

編集2021/10/21 03:18
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Mashimasa

2021/10/21 03:21

頂いたサンプルでやりたいことができました!!! 拡大APIの方は敷居が高そうなので、今回は見送ります。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問