[VC2010] スクリーンセーバーを起動する方法

◆概要

この資料は、Widnows Formのボタン等でスクリーンセーバーを起動する方法について記述しています。

 スクリーンセーバーを作成していテストする場合や、仕事中によからぬHPを見ていて「上司がきた!」ときなど(笑)、素早くスクリーンセーバーを起動したいときに利用するとよいでしょう。
現在設定されているスクリーンセーバーがすぐに起動します。

 これを実現するには、Windows APIのGetDesktopWindow関数、SendMessage関数を利用します。


▼ページトップへ
◆コード例

 Windows APIを利用するため、using ディレクティブ次のコードを追加します。

using System.Runtime.InteropServices;// 追加
そして、APIの宣言を行います。
[DllImport("user32.dll", EntryPoint = "GetDesktopWindow")]
private static extern IntPtr GetDesktopWindow();

[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam); 

 APIで使用する定数の宣言を行い、API関数を呼び出すvoidを作成します。

// 定数の宣言
private const int SC_SCREENSAVE = 0xF140; 
private const int WM_SYSCOMMAND = 0x0112; 
//... 

public static void SetScreenSaverRunning()
{
   SendMessage
   (GetDesktopWindow(), WM_SYSCOMMAND, SC_SCREENSAVE, 0);
}
◆Windows Formに実装した例

次の例では、Windows Formにボタンを1つ追加しています。
ボタンをクリックすると直ちに既定のスクリーンセーバーが起動します。

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;// 追加

namespace launchSystemScreenSaver
{
    public partial class Form1 : Form
    {
        # region Windows API
        [DllImport("user32.dll", EntryPoint = "GetDesktopWindow")]
        private static extern IntPtr GetDesktopWindow();

        [DllImport("user32.dll")]
        private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
        #endregion

        public Form1()
        {
            InitializeComponent();
        }

   // API定数
 
    private const int SC_SCREENSAVE = 0xF140; 
    private const int WM_SYSCOMMAND = 0x0112; 
 
    //... 

    public static void SetScreenSaverRunning()
    {
        SendMessage

        (GetDesktopWindow(), WM_SYSCOMMAND, SC_SCREENSAVE, 0);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        SetScreenSaverRunning();
    }
    }
}

▼ページトップへ