39Si

プログラミング関連の勉強した内容を簡単にまとめておきます

ショートカットキー(hotkey)を使用する[Visual C#]

Windows でホットキーを使用

 自分の作っているプログラムにショートカットキーを割り当ててより便利に使えるようにホットキーを利用してみた。思ったより簡単に使えたのでメモ。
自分のプログラムにどんどん組み込んで作業効率を上げたい。

[環境]
windows 8 Pro
Microsoft Visual Studio Express 2012 for Windows Desktop

手順

1.新しいプロジェクトを作成し、新しくwindowsフォームアプリケーションを作る。 2.Form1のプロパティのイベントの Load と FormClosed に処理を割り当てる

ソースコード

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.Runtime.InteropServices;  // for DllImport

namespace hotkey
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        const int MOD_ALT = 0x0001;
        const int MOD_CONTROL = 0x0002;
        const int MOD_SHIFT = 0x0004;
        const int WM_HOTKEY = 0x0312;

        const int HOTKEY_ID = 0x0001;  // 0x0000~0xbfff 内の適当な値でよい
        const int HOTKEY2_ID = 0x0002;

        [DllImport("user32.dll")]
        extern static int RegisterHotKey(IntPtr HWnd, int ID, int MOD_KEY, int KEY);
        [DllImport("user32.dll")]
        extern static int UnregisterHotKey(IntPtr HWnd, int ID);

        //Form1が起動したときの処理
        private void Form1_Load(object sender, EventArgs e)
        {
            // ホットキーの登録 "ALT + SHIFT + A"
            RegisterHotKey(this.Handle, HOTKEY_ID, MOD_ALT, (int)Keys.A);
        }

        //ウィンドウが閉じた時の処理
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            // ホットキーの登録抹消
            UnregisterHotKey(this.Handle, HOTKEY_ID);
        }

        protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);

            if (m.Msg == WM_HOTKEY)
            {
                if ((int)m.WParam == HOTKEY_ID)
                {
                    /* ホットキーの処理 */
                    MessageBox.Show("Alt+Aが押されました。");
                }
            }
        }
    }
}

参考文献

http://youryella.wankuma.com/Library/Extensions/Form/HotKey.aspx