[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(); } } }
▼ページトップへ