日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

动态为程序指定快捷键

發布時間:2025/7/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态为程序指定快捷键 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為了提供更加好的用戶體驗,在windows Forms開發中,通常我們需要讓用戶可以自定義快捷鍵。我們知道在設計階段指派快捷鍵是很容易的,但是如何讓他們可以在運行時動態指定快捷鍵呢?

第一步:導入兩個函數,分別是注冊和取消注冊快捷鍵

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace TestHotKeys
{
??? class HotKeys
??? {
??????? //如果函數執行成功,返回值不為0。???????
??????? //如果函數執行失敗,返回值為0。要得到擴展錯誤信息,調用GetLastError。???????
??????? [DllImport("user32.dll", SetLastError = true)]???????
??????? public static extern bool RegisterHotKey(???????????
??????????? IntPtr hWnd,??????????????? //要定義熱鍵的窗口的句柄???????????
??????????? int id,???????????????????? //定義熱鍵ID(不能與其它ID重復)
??????????? KeyModifiers fsModifiers,?? //標識熱鍵是否在按Alt、Ctrl、Shift、Windows等鍵時才會生效???????????
??????????? Keys vk???????????????????? //定義熱鍵的內容??
??????????? );

??????? [DllImport("user32.dll", SetLastError = true)]???????
??????? public static extern bool UnregisterHotKey(???????????
??????????? IntPtr hWnd,??????????????? //要取消熱鍵的窗口的句柄???????????
??????????? int id????????????????????? //要取消熱鍵的ID???????????
??????????? );???????
??????????? //定義了輔助鍵的名稱(將數字轉變為字符以便于記憶,也可去除此枚舉而直接使用數值)???????
??????? [Flags()]???????
??????? public enum KeyModifiers??????? {???????????
??????????? None = 0,???????????
??????????? Alt = 1,???????????
??????????? Ctrl = 2,???????????
??????????? Shift = 4,???????????
??????????? WindowsKey = 8???????
??????? }
??? }
}

?

第二步:在窗體的初始化之后,注冊快捷鍵

/// <summary>
/// 注冊快捷鍵。這里的100,101,102是隨便寫的,只要不重復就可以
/// </summary>
private void RegisterHotKeys()
{
??? HotKeys.RegisterHotKey(Handle, 100, HotKeys.KeyModifiers.Shift, Keys.A);
??? HotKeys.RegisterHotKey(Handle, 101, HotKeys.KeyModifiers.Shift, Keys.B);
??? HotKeys.RegisterHotKey(Handle, 102, HotKeys.KeyModifiers.Shift, Keys.C);
}


第三步:編寫一個特殊事件,讓窗體能接收windows消息

/// <summary>
/// 響應窗體消息的事件
/// </summary>
/// <param name="m"></param>
protected override void WndProc(ref Message m)
{
??? const int WM_HOTKEY = 0x0312;
??? switch (m.Msg)
??? {
??????? case WM_HOTKEY: {
??????????? switch (m.WParam.ToInt32())
??????????? {
??????????????? case 100: { CallMethod("A"); break; }
??????????????? case 101: { CallMethod("B"); break; }
??????????????? case 102: { CallMethod("C"); break; }
??????????????? default:
??????????????????? break;
??????????? }
??????????? break;
??????? }
??????? default:
??????????? break;
??? }
??? base.WndProc(ref m);
}

我們這里是為了演示目的,實現了一個簡單的CallMethod方法,它就是顯示一個消息而已

private void CallMethod(string input) {
??? MessageBox.Show(input);
}

?

?

最后,不要忘記在窗體關閉的時候,取消快捷鍵的注冊

/// <summary>
/// 取消快捷鍵注冊
/// </summary>
private void UnRegisterHotKeys()
{
??? HotKeys.UnregisterHotKey(Handle, 100);
??? HotKeys.UnregisterHotKey(Handle, 101);
??? HotKeys.UnregisterHotKey(Handle, 102);
}

總結

以上是生活随笔為你收集整理的动态为程序指定快捷键的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。