1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

にわのわさんAdvent Calendar 2023

Day 22

c#でのホットキー設定方法

Last updated at Posted at 2023-12-21

はじめに

にわのわです。

c#におけるホットキーの設定方法について書きます。
c#でのホットキーの設定は、ctrlキー、windowsキー、altキー+通常のキー1つの組み合わせで設定可能です。

ソース

以下のソースではホットキー設定用のフォームを作成し、閉じられた際にホットキーの設定を行っています。

    List<Keys> hotkeyKeys = new List<Keys>(hotKeySettingForm.GetHotkeyKeys());

    //ホットキーが設定されていない場合は何もしない
    if (hotkeyKeys.Count == 0)
    {
        return;
    }

    //ホットキーの設定をラベルに表示
    testlabel.Text = "ホットキー設定:" + string.Join(" + ", hotkeyKeys);

    int modKey = 0x0000;
    if (hotkeyKeys.Contains(Keys.ControlKey))
    {
        modKey |= 0x0002;
        _ = hotkeyKeys.Remove(Keys.ControlKey);
    }
    if (hotkeyKeys.Contains(Keys.Menu))
    {
        modKey |= 0x0001;
        _ = hotkeyKeys.Remove(Keys.Menu);
    }
    if (hotkeyKeys.Contains(Keys.ShiftKey))
    {
        modKey |= 0x0004;
        _ = hotkeyKeys.Remove(Keys.ShiftKey);
    }

    //ホットキーを設定する。
    hotKey = new HotKey(modKey, hotkeyKeys[0]);
    hotKey.HotKeyPush += new EventHandler(#実行したい関数);
}

ホットキー設定用のフォームは以下のようになっています。

 public partial class HotKeySettingForm : Form
 {
     public HotKeySettingForm()
     {
         InitializeComponent();
     }

     public Keys SelectedHotkey { get; private set; }
     public List<Keys> HotkeyKeys { get; set; } = new List<Keys>();
     public int KeyCount { get; set; } = 0;

     private void buttonSubmit_Click(object sender, EventArgs e)
     {
         // ホットキーが設定されていない場合はエラーを表示
         if (HotkeyKeys.Count == 0)
         {
             _ = MessageBox.Show("ホットキーが設定されていません。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
         else
         {
             // OKボタンがクリックされたときにフォームを閉じる
             DialogResult = DialogResult.OK;
             Close();
         }
     }

     private void HotKeySettingForm_KeyDown(object sender, KeyEventArgs e)
     {
         // 押下されたキーが一つの場合、リストをクリアして押下されたキーを追加
         if (KeyCount == 0)
         {
             HotkeyKeys.Clear();
             HotkeyKeys.Add(e.KeyCode);
             KeyCount++;
         }
         else
         {
             if (!HotkeyKeys.Contains(e.KeyCode))
             {
                 HotkeyKeys.Add(e.KeyCode);
                 KeyCount++;
             }
         }

         // ホットキーのリストをラベルに表示
         labelHotKey.Text = string.Join(" + ", HotkeyKeys);
     }

     private void HotKeySettingForm_KeyUp(object sender, KeyEventArgs e)
     {
         KeyCount--;
     }

     public List<Keys> GetHotkeyKeys()
     {
         return HotkeyKeys;
     }


 }

また、プロkグラムが終了する際にホットキーの監視解除が必要です

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        //ホットキーの監視を解除する
        hotKey.Dispose();
    }

おわりに

これらでc#でのホットキーの設定ができるようになります。
今回記載した内容では、バックグラウンドでもホットキーの監視ができるため、そこそこ満足しています。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?