sabakan0307
@sabakan0307 (saba kan)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

(至急)C#とHDMI接続について

Q&A

Closed

解決したいこと

C#でアプリケーション(Windows Form Application)を作成しています。
動画ファイルをボタンで切り替えて、再生するというシンプルなものですが、HDMIでプロジェクタなどに接続したとき、GUIが全て投影されるのは見栄えが悪く、動画を再生するところだけをHDMI接続したときに、映したいと思っています。まだC#の初心者で、調べてみましたがそれらしい記事が見つかりません。
イメージとしては、MicrosoftのPowerPointで、プレゼンテーションモードにしたとき、パソコン側では次のスライドと現在のスライドが表示されていますが、HDMIで出力したときは、現在のスライドが表示されている...というものです。実現するために必要なコードや、拡張機能などあれば教えていただきたいです

0

1Answer

Windows Form Applicationで動画を再生し、その一部分だけをHDMI接続されたディスプレイに表示するためには、DirectShowやWindows Media Playerを使用することが一般的です。以下は、C#を使用してWindows Form Applicationを作成し、動画の再生と部分的なHDMI表示を行う簡単な例です。

まず、プロジェクトにAxWindowsMediaPlayerコントロールを追加します。

Windows FormにAxWindowsMediaPlayerコントロールを配置します。
プロジェクトにInterop.WMPLib.dllおよびAxInterop.WMPLib.dllを追加します。
次に、以下のコードを使用して、動画の再生とHDMIに一部分を表示するプログラムを作成します。

using System;
using System.Windows.Forms;
using WMPLib;

namespace VideoPlayerApp
{
    public partial class MainForm : Form
    {
        private AxWindowsMediaPlayer mediaPlayer;

        public MainForm()
        {
            InitializeComponent();
            InitializeMediaPlayer();
        }

        private void InitializeMediaPlayer()
        {
            mediaPlayer = new AxWindowsMediaPlayer();
            ((System.ComponentModel.ISupportInitialize)(mediaPlayer)).BeginInit();
            Controls.Add(mediaPlayer);
            mediaPlayer.Dock = DockStyle.Fill;
            ((System.ComponentModel.ISupportInitialize)(mediaPlayer)).EndInit();
        }

        private void MainForm_Load(object sender, EventArgs e)
        {
            // HDMIディスプレイの設定
            SetHDMIDisplay();

            // 動画ファイルのパスを指定
            string videoFilePath = "C:\\Path\\To\\Your\\Video.mp4";

            // 動画の再生
            PlayVideo(videoFilePath);
        }

        private void SetHDMIDisplay()
        {
            // HDMIディスプレイを取得(例:2番目のディスプレイ)
            Screen[] screens = Screen.AllScreens;
            if (screens.Length > 1)
            {
                Screen hdmiDisplay = screens[1];
                mediaPlayer.Location = hdmiDisplay.Bounds.Location;
                mediaPlayer.Size = hdmiDisplay.Bounds.Size;
                mediaPlayer.uiMode = "none"; // ユーザー インターフェースを非表示
            }
            else
            {
                MessageBox.Show("HDMIディスプレイが見つかりませんでした。");
            }
        }

        private void PlayVideo(string filePath)
        {
            if (System.IO.File.Exists(filePath))
            {
                mediaPlayer.URL = filePath;
                mediaPlayer.Ctlcontrols.play();
            }
            else
            {
                MessageBox.Show("指定された動画ファイルが存在しません。");
            }
        }
    }
}

この例では、AxWindowsMediaPlayerを使用して動画を再生し、HDMIディスプレイの位置とサイズを取得して、その部分だけに動画を表示しています。
お役に立てれば幸いです。

1Like

Comments

  1. @sabakan0307

    Questioner

    返信が遅れてすみませんでした。
    ありがとうございます!!

Your answer might help someone💌