none
vb2015で.wmvファイルを起動させるスクリーンセーバーは作れますか? RRS feed

  • 質問

  • vb2015で.wmvファイルを起動させるスクリーンセーバーは作れますか?

    人から「.wmvのムービーをスクリーンセーバーで流したい」と相談を受けました。

    調べたところ、
    スクリーンセーバーの条件は
    『C:\Windows\System32』に置かれた『.scr』ファイル
    という事らしいです。

    その『.scr』ファイルは実は中身は『.exe』ファイルで、一旦『.exe』を作った後に名前を変えているだけという情報が出てきました。
    『.exe』なので、なんでも動かせるので、うかつなところからスクリーンセーバーをダウンロードしてはいけないらしいです。

    なるほど、『.exe』であれば、vb2015で作った後に、拡張子を『.scr』に変更すればよいのですよね?


    <質問>
    vb2015で.wmvファイルを起動させるスクリーンセーバーは作れますか?

    なんか出来そうな気がします。仮にできるとします。

    C:\Users\user1\Videos\testmv.wmvというムービーがあるとします。
    これを起動する為だけのアプリ『testmv.exe』をつくり、『testmv.scr』にリネームし、『C:\Windows\System32』に置くとします。

    これをvb2015で作るとすれば何アプリケーションのスタイルで
    WindowsApplication?
    ConsoleApplication?
    どのように作ればよいでしょうか?
    2017年6月28日 0:27

回答

  • WindowsApplicationでも、ConsoleApplicationでもなく、WpfApplicationですか。
    一番知らない分野です。

    VBにもWpfApplicationをつくる入口は用意されていますが、VBだと無理なのでしょうか?

    VBでWPFアプリケーションを作成することは可能です。
    WPFでC#、かつスクリーンセーバー関連だったのでおっしゃる通り安易にご紹介したくなく、そのWPFアプリケーションのダウンロード先をご紹介しませんでしたが、危険を十分にご存知だと思いましたので、以下にご紹介しておきます。
    VS2015 WPF C#のプロジェクトですので、どのように作成するのか参考になると思います。もし、ダウンロードされるのであれば、実行形式の直接のダウンロードではなく、sourceforgeからプロジェクトをダウンロードされると良いと思います。

    How to load a video as a screensaver on Windows 10
    https://superuser.com/questions/1011584/how-to-load-a-video-as-a-screensaver-on-windows-10

    WPFと言ってもMVVMというデザインパターンに捕らわれなければ、Windowsフォームアプリケーションと同様にイベントドリブンで作成することができますので、思ったより簡単と思われるかもしれません。

    こちらでも最初調べ、
    ムービースクリーンセーバーDX.scr
    というのを試してみました。

    私もこれを調べました。お役に立てませんでしたね。m(_ _)m

    スクリーンセーバーは危険なファイルなので、
    ベクターや窓の杜といった一定の信頼があるところから以外はダウンロードするなとよく書かれています。

    ・『.wmv』ファイルが再生できる
    ・マルチスクリーンのクローン画面でも動く
    ・Windows10 pro 64bitで動作する
    ・信頼できるサイトからダウンロードできる

    という条件を満たせるスクリーンセーバーがあれば是非紹介頂きたいです。

    私の方で上記のWPFアプリケーションを試してみましたが、1番目と3番目は満たしていました。2番目は環境が無いので試せていません。4番目はプロジェクトをコンパイルして作成しました。ご判断におまかせします。
    なおこのWPFアプリケーションですが、動画ファイルの場所等をレジストリに保存しますのでご注意下さい。
    #ソースを読めばわかりますし、アプリケーションの説明にも書かれています。

    (追記)
    sourceforgeに関してはいろいろありました・・・


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2017年6月28日 4:33
    モデレータ
  • ソースを読むと、上下のキー、もしくはボリュームアップ、ボリュームダウンのキー、もしくはマウスのホイールでボリュームが変えられそうです。

    (追記)
    ちなみにこの設定値もレジストリに保存されるようです。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/


    2017年6月28日 7:00
    モデレータ

すべての返信

  • こんにちは。

    以下を見るに同じ手順で作成できるのではないでしょうか。(少し情報が古いですが)

    https://support.microsoft.com/ja-jp/help/818359/how-to-create-a-screen-saver-by-using-visual-basic-net-or-visual-basic

    GUIを有するアプリケーションをフルスクリーン表示させる設定をしているだけのようですので、
    まずはWindowsApplicationで試してみては如何でしょう。


    2017年6月28日 0:56
    モデレータ
  • <質問>
    vb2015で.wmvファイルを起動させるスクリーンセーバーは作れますか?

    作れます。

    これをvb2015で作るとすれば何アプリケーションのスタイルで
    WindowsApplication?
    ConsoleApplication?
    どのように作ればよいでしょうか?
    Windowsフォームアプリケーションで全画面表示で動画を再生するようにし、Windowsから渡されるいくつかの引数に対応するようにし、完成したexeをscrに変更するだけです。
    ただ、Windowsフォームアプリケーションだと動画を再生する方法がDirectShowあたりになると思うのですが、ちょっとやっかいですね。ちなみにWPFでC#になりますが、動画を再生するスクリーンセーバーのサンプルコードがネット上にありました。WPFだと動画の再生は簡単です。

    ところでスクリーンセーバーにwmvを使いたいだけであればフリーソフトもありますし、上記のWPFアプリケーションをご紹介しても良いかもしれませんね。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2017年6月28日 2:42
    モデレータ
  • その通りやってみましたけど、上手くいきませんでした。

    フォームを2つとモジュールファイルを作れという話ですが、
    それぞれのフォームでエラーが出ます。

    重大度レベル    コード    説明    プロジェクト    ファイル    行    抑制状態
    エラー    BC30260    'components' は、この class で 'Private components As IContainer' として既に宣言されています。    WindowsApplication6    c:\users\user1\documents\visual studio 2015\Projects\WindowsApplication6\WindowsApplication6\frmcnfg.Designer.vb    18    アクティブ
    エラー    BC30269    'Protected Overrides Sub Dispose(disposing As Boolean)' には同じ署名で複数の定義が存在します。    WindowsApplication6    c:\users\user1\documents\visual studio 2015\Projects\WindowsApplication6\WindowsApplication6\frmcnfg.vb    18    アクティブ
    エラー    BC30269    'Private Sub InitializeComponent()' には同じ署名で複数の定義が存在します。    WindowsApplication6    c:\users\user1\documents\visual studio 2015\Projects\WindowsApplication6\WindowsApplication6\frmcnfg.vb    37    アクティブ
    エラー    BC30260    'components' は、この class で 'Private components As IContainer' として既に宣言されています。    WindowsApplication6    c:\users\user1\documents\visual studio 2015\Projects\WindowsApplication6\WindowsApplication6\frmscr.Designer.vb    18    アクティブ
    エラー    BC30269    'Protected Overrides Sub Dispose(disposing As Boolean)' には同じ署名で複数の定義が存在します。    WindowsApplication6    c:\users\user1\documents\visual studio 2015\Projects\WindowsApplication6\WindowsApplication6\frmscr.vb    20    アクティブ
    エラー    BC30269    'Private Sub InitializeComponent()' には同じ署名で複数の定義が存在します。    WindowsApplication6    c:\users\user1\documents\visual studio 2015\Projects\WindowsApplication6\WindowsApplication6\frmscr.vb    31    アクティブ
    エラー    BC31429    class 'frmcnfg' に同じ名前のメンバーが多種類存在するため、'components' があいまいです。    WindowsApplication6    c:\users\user1\documents\visual studio 2015\Projects\WindowsApplication6\WindowsApplication6\frmcnfg.Designer.vb    9    アクティブ
    エラー    BC31429    class 'frmcnfg' に同じ名前のメンバーが多種類存在するため、'components' があいまいです。    WindowsApplication6    c:\users\user1\documents\visual studio 2015\Projects\WindowsApplication6\WindowsApplication6\frmcnfg.Designer.vb    10    アクティブ
    エラー    BC30521    これらの引数に最も固有な、アクセス可能な 'InitializeComponent' がないため、オーバーロードの解決に失敗しました:
        'Private Sub InitializeComponent()': 最も固有ではありません。
        'Private Sub InitializeComponent()': 最も固有ではありません。    WindowsApplication6    c:\users\user1\documents\visual studio 2015\Projects\WindowsApplication6\WindowsApplication6\frmcnfg.vb    11    アクティブ
    エラー    BC31429    class 'frmcnfg' に同じ名前のメンバーが多種類存在するため、'components' があいまいです。    WindowsApplication6    c:\users\user1\documents\visual studio 2015\Projects\WindowsApplication6\WindowsApplication6\frmcnfg.vb    20    アクティブ
    エラー    BC31429    class 'frmcnfg' に同じ名前のメンバーが多種類存在するため、'components' があいまいです。    WindowsApplication6    c:\users\user1\documents\visual studio 2015\Projects\WindowsApplication6\WindowsApplication6\frmcnfg.vb    21    アクティブ
    エラー    BC31429    class 'frmscr' に同じ名前のメンバーが多種類存在するため、'components' があいまいです。    WindowsApplication6    c:\users\user1\documents\visual studio 2015\Projects\WindowsApplication6\WindowsApplication6\frmscr.Designer.vb    9    アクティブ
    エラー    BC31429    class 'frmscr' に同じ名前のメンバーが多種類存在するため、'components' があいまいです。    WindowsApplication6    c:\users\user1\documents\visual studio 2015\Projects\WindowsApplication6\WindowsApplication6\frmscr.Designer.vb    10    アクティブ
    エラー    BC30521    これらの引数に最も固有な、アクセス可能な 'InitializeComponent' がないため、オーバーロードの解決に失敗しました:
        'Private Sub InitializeComponent()': 最も固有ではありません。
        'Private Sub InitializeComponent()': 最も固有ではありません。    WindowsApplication6    c:\users\user1\documents\visual studio 2015\Projects\WindowsApplication6\WindowsApplication6\frmscr.vb    13    アクティブ
    エラー    BC31429    class 'frmscr' に同じ名前のメンバーが多種類存在するため、'components' があいまいです。    WindowsApplication6    c:\users\user1\documents\visual studio 2015\Projects\WindowsApplication6\WindowsApplication6\frmscr.vb    22    アクティブ
    エラー    BC31429    class 'frmscr' に同じ名前のメンバーが多種類存在するため、'components' があいまいです。    WindowsApplication6    c:\users\user1\documents\visual studio 2015\Projects\WindowsApplication6\WindowsApplication6\frmscr.vb    23    アクティブ
    エラー    BC31429    class 'frmscr' に同じ名前のメンバーが多種類存在するため、'components' があいまいです。    WindowsApplication6    c:\users\user1\documents\visual studio 2015\Projects\WindowsApplication6\WindowsApplication6\frmscr.vb    32    アクティブ
    エラー    BC31429    class 'frmscr' に同じ名前のメンバーが多種類存在するため、'components' があいまいです。    WindowsApplication6    c:\users\user1\documents\visual studio 2015\Projects\WindowsApplication6\WindowsApplication6\frmscr.vb    34    アクティブ
    警告    BC42025    共有メンバー、定数メンバー、列挙型メンバー、または入れ子にされた型にインスタンス経由でアクセスしています。正規の式は評価されません。    WindowsApplication6    c:\users\user1\documents\visual studio 2015\Projects\WindowsApplication6\WindowsApplication6\frmscr.vb    88    アクティブ
    警告    BC42025    共有メンバー、定数メンバー、列挙型メンバー、または入れ子にされた型にインスタンス経由でアクセスしています。正規の式は評価されません。    WindowsApplication6    c:\users\user1\documents\visual studio 2015\Projects\WindowsApplication6\WindowsApplication6\frmscr.vb    88    アクティブ
    警告    BC42025    共有メンバー、定数メンバー、列挙型メンバー、または入れ子にされた型にインスタンス経由でアクセスしています。正規の式は評価されません。    WindowsApplication6    c:\users\user1\documents\visual studio 2015\Projects\WindowsApplication6\WindowsApplication6\frmscr.vb    106    アクティブ
    警告    BC42025    共有メンバー、定数メンバー、列挙型メンバー、または入れ子にされた型にインスタンス経由でアクセスしています。正規の式は評価されません。    WindowsApplication6    c:\users\user1\documents\visual studio 2015\Projects\WindowsApplication6\WindowsApplication6\frmscr.vb    106    アクティブ



    ■frmscr.vb■
    Imports Microsoft.Win32
    Imports Microsoft.VisualBasic
    Imports System.Math
    Public Class frmscr
        Inherits System.Windows.Forms.Form

    #Region " Windows Form Designer generated code "

        Public Sub New()
            MyBase.New()

            'The Windows Form Designer requires this call.
            InitializeComponent()

            'Add any initialization after the InitializeComponent() call.

        End Sub

        'Form overrides dispose to clean up the component list.
        Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
            If disposing Then
                If Not (components Is Nothing) Then
                    components.Dispose()
                End If
            End If
            MyBase.Dispose(disposing)
        End Sub

        'Required by the Windows Form Designer.
        Private components As System.ComponentModel.IContainer
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
            Me.components = New System.ComponentModel.Container
            Me.lblMessage = New System.Windows.Forms.Label
            Me.Timer1 = New System.Windows.Forms.Timer(Me.components)
            Me.SuspendLayout()
            '
            'lblMessage
            '
            Me.lblMessage.AutoSize = True
            Me.lblMessage.BackColor = System.Drawing.Color.Black
            Me.lblMessage.ForeColor = System.Drawing.Color.Yellow
            Me.lblMessage.Location = New System.Drawing.Point(72, 118)
            Me.lblMessage.Name = "lblMessage"
            Me.lblMessage.Size = New System.Drawing.Size(193, 36)
            Me.lblMessage.TabIndex = 1
            Me.lblMessage.Text = "screen saver"
            Me.lblMessage.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
            '
            'Timer1
            '
            Me.Timer1.Enabled = True
            '
            'frmscr
            '
            Me.AutoScaleBaseSize = New System.Drawing.Size(15, 33)
            Me.BackColor = System.Drawing.Color.Black
            Me.ClientSize = New System.Drawing.Size(292, 273)
            Me.ControlBox = False
            Me.Controls.Add(Me.lblMessage)
            Me.Font = New System.Drawing.Font("Microsoft Sans Serif", 21.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
            Me.MaximizeBox = False
            Me.MinimizeBox = False
            Me.Name = "frmscr"
            Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
            Me.TopMost = True
            Me.WindowState = System.Windows.Forms.FormWindowState.Maximized
            Me.ResumeLayout(False)

        End Sub

    #End Region

        Private Sub frmscr_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

            Dim tmpLng As Integer
            tmpLng = SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1&, 0&, 0&)

            'Get the user's previous preference for the marquee message.

            Dim pRegKey As RegistryKey = Registry.CurrentUser
            pRegKey = pRegKey.OpenSubKey("Software\\Test Screen Saver")
            Dim val As Object = pRegKey.GetValue("Message")
            pRegKey.Close()
            lblMessage.Text = val.ToString

            'Make the cursor disappear.

            Me.Cursor.Current.Hide()
        End Sub

        Private Sub frmscr_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
            'Immediately end when any key is pressed.
            Me.Close()
        End Sub

        Private Sub frmscr_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Activated
            'Center the lblMessage label to the form.
            lblMessage.Left = GetScaleWidth(Me)
            lblMessage.Top = (GetScaleWidth(Me) - lblMessage.Height) / 3
        End Sub

        Private Sub frmscr_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
            'System.Windows.Forms.Cursor.Current.Show
            ''Restore the mouse cursor.
            Dim tmplng As Integer
            Me.Cursor.Current.Show()

            tmplng = SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0&, 0&, 0&)
        End Sub

        Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            'Determine whether the Message has moved completely off the left side of the screen.
            If lblMessage.Left < (0 - lblMessage.Width) Then
                lblMessage.Left = GetScaleWidth(Me) 'ScaleWidth
            End If

            'Moves lblMessage to the left.
            lblMessage.Left = lblMessage.Left - 10


        End Sub

        Private Sub frmscr_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove

            Static OldX As Integer
            Static OldY As Integer

            'Determines whether the mouse was moved and whether the movement was large.
            'if so, the screen saver is ended.
            If (OldX > 0 And OldY > 0) And (Abs(e.X - OldX) > 3 Or Abs(e.Y - OldY) > 3) Then
                Me.Close()

            End If

            'Assigns the current X and Y locations to OldX and OldY.
            OldX = e.X
            OldY = e.Y

        End Sub
    End Class
    ■frmscr.vb■

    ■frmcnfg.vb■
    Imports Microsoft.Win32
    Public Class frmcnfg
        Inherits System.Windows.Forms.Form

    #Region " Windows Form Designer generated code "

        Public Sub New()
            MyBase.New()

            'The Windows Form Designer requires this call.
            InitializeComponent()

            'Add any initialization after the InitializeComponent() call.

        End Sub

        'Form overrides dispose to clean up the component list.
        Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
            If disposing Then
                If Not (components Is Nothing) Then
                    components.Dispose()
                End If
            End If
            MyBase.Dispose(disposing)
        End Sub

        'Required by the Windows Form Designer.
        Private components As System.ComponentModel.IContainer

        'NOTE: The Windows Form Designer requires the following procedure.
        'It can be modified by using the Windows Form Designer.  
        'Do not modify the procedure by using the Code editor.
        Friend WithEvents txtmessage As System.Windows.Forms.TextBox
        Friend WithEvents cmdcancel As System.Windows.Forms.Button
        Friend WithEvents cmdOk As System.Windows.Forms.Button
        Friend WithEvents label1 As System.Windows.Forms.Label
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
            Me.cmdOk = New System.Windows.Forms.Button
            Me.cmdcancel = New System.Windows.Forms.Button
            Me.label1 = New System.Windows.Forms.Label
            Me.txtmessage = New System.Windows.Forms.TextBox
            Me.SuspendLayout()
            '
            'cmdOk
            '
            Me.cmdOk.Location = New System.Drawing.Point(200, 184)
            Me.cmdOk.Name = "cmdOk"
            Me.cmdOk.Size = New System.Drawing.Size(56, 24)
            Me.cmdOk.TabIndex = 0
            Me.cmdOk.Text = "&OK"
            '
            'cmdcancel
            '
            Me.cmdcancel.Location = New System.Drawing.Point(272, 184)
            Me.cmdcancel.Name = "cmdcancel"
            Me.cmdcancel.Size = New System.Drawing.Size(56, 24)
            Me.cmdcancel.TabIndex = 1
            Me.cmdcancel.Text = "&Cancel"
            '
            'label1
            '
            Me.label1.Location = New System.Drawing.Point(24, 40)
            Me.label1.Name = "label1"
            Me.label1.Size = New System.Drawing.Size(152, 24)
            Me.label1.TabIndex = 2
            Me.label1.Text = "Enter Message"
            '
            'txtmessage
            '
            Me.txtmessage.Location = New System.Drawing.Point(32, 64)
            Me.txtmessage.Multiline = True
            Me.txtmessage.Name = "txtmessage"
            Me.txtmessage.Size = New System.Drawing.Size(296, 96)
            Me.txtmessage.TabIndex = 3
            Me.txtmessage.Text = ""
            '
            'frmcnfg
            '
            Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
            Me.ClientSize = New System.Drawing.Size(344, 221)
            Me.Controls.Add(Me.txtmessage)
            Me.Controls.Add(Me.label1)
            Me.Controls.Add(Me.cmdcancel)
            Me.Controls.Add(Me.cmdOk)
            Me.Name = "frmcnfg"
            Me.Text = "CONFIGURATION"
            Me.ResumeLayout(False)

        End Sub

    #End Region


        Private Sub cmdcancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdcancel.Click
            Me.Close()
        End Sub

        Private Sub cmdOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdOk.Click
            'Save the current settings to
            'HKEY_CURRENT_USER\Software\
            'in the registry.


            Dim key As RegistryKey = Registry.CurrentUser.OpenSubKey("Software", True)
            Dim newkey As RegistryKey = key.CreateSubKey("Test Screen Saver")
            newkey.SetValue("Message", txtmessage.Text)
            newkey.Close()
            Me.Close()
        End Sub
    End Class
    ■frmcnfg.vb■


    ■Module1.vb■
    Imports System.Runtime.InteropServices
    Imports System.Environment

    Module Module1

        Public Declare Auto Function SystemParametersInfo Lib "user32" (ByVal uAction As Integer, ByVal uParam As Integer, ByRef pvParam As Integer, ByVal fuWinIni As Integer) As Boolean
        Public Const SPI_SCREENSAVERRUNNING = 97&
        Public Const frmedge As Integer = 4
        Public nMouseMoves&
        Dim sStartType


        Public Sub Main(ByVal args As String())
            Dim Inst As Boolean = False


            If args.Length > 0 Then
                sStartType = args(0).ToLower.Trim().Substring(0, 2)

                If sStartType = "" Then
                    'This will occur when a user right-clicks the .SCR
                    'file and chooses "configure"
                    sStartType = "/c"
                End If

                ' Determine whether the screen saver should show user-definable options.
                If sStartType = "/c" Then
                    Dim usercnfg As New frmcnfg
                    usercnfg.ShowDialog()

                    ' Exit the application.
                    Exit Sub
                End If

                ' Determine whether the screen saver should just execute.
                If sStartType = "/s" Then
                    'Check for previous instance.
                    Inst = PrevInstance()
                    If Not (Inst) Then
                        ' Create a Screen Saver form and display the form.
                        Dim scrsvr As New frmscr
                        scrsvr.ShowDialog()
                    Else
                        'If a previous instance exists, exit the application.
                        Exit Sub
                    End If
                End If
            End If
        End Sub


        Function PrevInstance() As Boolean
            If UBound(Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName)) > 0 Then
                Return True
            Else
                Return False
            End If
        End Function
        Public Function GetScaleWidth(ByVal frm As Form) As Integer

            Dim ctl As Control
            Dim w As Integer = frm.ClientSize.Width

            For Each ctl In frm.Controls
                With ctl
                    If .GetContainerControl() Is frm Then
                        If .Dock = DockStyle.Left Or .Dock = DockStyle.Right Then
                            w = w - .Size.Width
                        End If
                    End If
                End With
            Next
            GetScaleWidth = w - frmedge
        End Function


    End Module
    ■Module1.vb■
    2017年6月28日 3:19
  • 有難うございます。


    > ただ、Windowsフォームアプリケーションだと動画を再生する方法がDirectShowあたりになると思うのですが、ちょっとやっかいですね。
    > ちなみにWPFでC#になりますが、動画を再生するスクリーンセーバーのサンプルコードがネット上にありました。WPFだと動画の再生は簡単です。

    WindowsApplicationでも、ConsoleApplicationでもなく、WpfApplicationですか。
    一番知らない分野です。

    VBにもWpfApplicationをつくる入口は用意されていますが、VBだと無理なのでしょうか?

    C#でも、ファイル名やパスを変えるだけで動くサンプルなら大丈夫ですが。


    > ところでスクリーンセーバーにwmvを使いたいだけであればフリーソフトもありますし、上記のWPFアプリケーションをご紹介しても良いかもしれませんね。

    フリーソフトの紹介も歓迎します。

    こちらでも最初調べ、
    ムービースクリーンセーバーDX.scr
    というのを試してみました。

    これで動くのは動いたのですが、マルチスクリーンでクローンした環境では、
    メイン画面では動くのですが、サブ画面が黒画面になってしまって使いものにならないと言われました。
    動作OS:Windows XP/Me/98なので、Windows10で動いただけマシですが。

    条件の後付けで申し訳ないですが、
    マルチスクリーンでクローン側もメインと同じようにスクリーンセーバーが動くものがあれば有難いです。

    スクリーンセーバーは危険なファイルなので、
    ベクターや窓の杜といった一定の信頼があるところから以外はダウンロードするなとよく書かれています。

    ・『.wmv』ファイルが再生できる
    ・マルチスクリーンのクローン画面でも動く
    ・Windows10 pro 64bitで動作する
    ・信頼できるサイトからダウンロードできる

    という条件を満たせるスクリーンセーバーがあれば是非紹介頂きたいです。
    2017年6月28日 3:40
  • URL先はデザイナー側のコードも掲載されているので、自動生成部分とぶつかったのかもしれませんね。

    エラーをひとつづつ対策するか、
    URL先を解釈された上でデザイナー部分はVisual Studioのデザイナーに任せたほうが良いかもしれません。

    ご自身でエラー対応が難しそうであれば、
    フリーソフトの紹介を待たれたほうが宜しいかもしれません。

    2017年6月28日 4:11
    モデレータ
  • WindowsApplicationでも、ConsoleApplicationでもなく、WpfApplicationですか。
    一番知らない分野です。

    VBにもWpfApplicationをつくる入口は用意されていますが、VBだと無理なのでしょうか?

    VBでWPFアプリケーションを作成することは可能です。
    WPFでC#、かつスクリーンセーバー関連だったのでおっしゃる通り安易にご紹介したくなく、そのWPFアプリケーションのダウンロード先をご紹介しませんでしたが、危険を十分にご存知だと思いましたので、以下にご紹介しておきます。
    VS2015 WPF C#のプロジェクトですので、どのように作成するのか参考になると思います。もし、ダウンロードされるのであれば、実行形式の直接のダウンロードではなく、sourceforgeからプロジェクトをダウンロードされると良いと思います。

    How to load a video as a screensaver on Windows 10
    https://superuser.com/questions/1011584/how-to-load-a-video-as-a-screensaver-on-windows-10

    WPFと言ってもMVVMというデザインパターンに捕らわれなければ、Windowsフォームアプリケーションと同様にイベントドリブンで作成することができますので、思ったより簡単と思われるかもしれません。

    こちらでも最初調べ、
    ムービースクリーンセーバーDX.scr
    というのを試してみました。

    私もこれを調べました。お役に立てませんでしたね。m(_ _)m

    スクリーンセーバーは危険なファイルなので、
    ベクターや窓の杜といった一定の信頼があるところから以外はダウンロードするなとよく書かれています。

    ・『.wmv』ファイルが再生できる
    ・マルチスクリーンのクローン画面でも動く
    ・Windows10 pro 64bitで動作する
    ・信頼できるサイトからダウンロードできる

    という条件を満たせるスクリーンセーバーがあれば是非紹介頂きたいです。

    私の方で上記のWPFアプリケーションを試してみましたが、1番目と3番目は満たしていました。2番目は環境が無いので試せていません。4番目はプロジェクトをコンパイルして作成しました。ご判断におまかせします。
    なおこのWPFアプリケーションですが、動画ファイルの場所等をレジストリに保存しますのでご注意下さい。
    #ソースを読めばわかりますし、アプリケーションの説明にも書かれています。

    (追記)
    sourceforgeに関してはいろいろありました・・・


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2017年6月28日 4:33
    モデレータ
  • 有難うございます。

    VideoScreensaver.scrを早速試させて頂きました。

    音が出ないのですが、どこかの設定でなんとかなりますか?

    ムービー単体やムービースクリーンセーバーDX.scrからの場合は、音が出ていますが、VideoScreensaver.scrからだと音が出ません。
    2017年6月28日 6:52
  • ソースを読むと、上下のキー、もしくはボリュームアップ、ボリュームダウンのキー、もしくはマウスのホイールでボリュームが変えられそうです。

    (追記)
    ちなみにこの設定値もレジストリに保存されるようです。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/


    2017年6月28日 7:00
    モデレータ
  • 有難うございます。

    出来ました。
    デュアルでの動作確認もできました。

    音量調整ですが、
    スクリーンセーバーを起動中、もしくはプレビューの時にしか確認できないのですが、
    でも、スクリーンセーバーはマウスやキーボードを触れば消えるのが仕様です。

    どうしたものかと思いましたが、
    ↑↓キーを触っても、

    マウスを動かさないように慎重にスクロールだけさせても、

    スクリーンセーバーは解除されませんでした。

    ここが、通常のスクリーンセイバーと異なるところですね。
    普通のスクリーンセーバーは↑↓キーで解除されますから。

    でも、利用上、特に支障がないので、要件は達成できました。

    感謝いたします。

    2017年6月28日 7:37