文章目錄
- 這篇文章以按下Ctrl+Shift+0實現顯示案頭為例,採用C#編寫的程式碼說明C#自訂快速鍵的實現。
這篇文章以按下Ctrl+Shift+0實現顯示案頭為例,採用C#編寫的程式碼說明C#自訂快速鍵的實現。
讀者可以依此類推,通過按下某些鍵可以實現一些自訂的功能,只要修改下面代碼中RegisterHotKey 的參數和case語句中的執行內容即可。
下面給的樣本程式中關鍵處都具有注釋。
下面給出一個完整的可啟動並執行C#編寫的樣本程式
開啟VS2005整合式開發環境,建立一個windows應用程式,下面的是Form1.cs的全部代碼。
(說明:要使該程式正確運行,必須把下面代碼中的C:\ShowDesktop.scf替換成你原生“顯示案頭.scf”檔案所在的路徑)
C#自訂快速鍵實現代碼
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
-
- //要使用DllImport語句必須引用該命名空間
- using System.Runtime.InteropServices;
-
- //要使用Process語句必須引用該命名空間
- using System.Diagnostics;
-
- namespace WindowsApplication4
- {
- public partial class Form1 : Form
- {
-
- //user32.dll是Unmanaged 程式碼,不能用命名空間的方式直接引用,
- //所以需要用“DllImport”進行引入後才能使用
- [DllImport("user32.dll", SetLastError = true)]
- public static extern bool RegisterHotKey(
- IntPtr hWnd, //要定義熱鍵的視窗的控制代碼
- int id, //定義熱鍵ID(不能與其它ID重複)
- //標識熱鍵是否在按Alt、Ctrl、Shift、Windows等鍵時才會生效
- KeyModifiers fsModifiers,
- 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,
- CtrlAndShift = 6
- }
-
-
- private void Form1_Load(object sender, EventArgs e)
- {
- //註冊熱鍵Shift+S,Id號為100。KeyModifiers.Shift也可以直接使用數字4來表示。
- RegisterHotKey(Handle, 100, KeyModifiers.Shift, Keys.S);
- //註冊熱鍵Ctrl+B,Id號為101。KeyModifiers.Ctrl也可以直接使用數字2來表示。
- RegisterHotKey(Handle, 101, KeyModifiers.Ctrl, Keys.B);
- //註冊熱鍵Alt+D,Id號為102。KeyModifiers.Alt也可以直接使用數字1來表示。
- RegisterHotKey(Handle, 102, KeyModifiers.Alt, Keys.D);
- //註冊熱鍵Ctrl+Alt+0,Id號為103。KeyModifiers.CtrlAndAlt也可以直接使用數字3來表示。
- RegisterHotKey(Handle, 103, KeyModifiers.CtrlAndShift, Keys.D0);
- }
-
-
- private void Form1_FormClosing(object sender, FormClosingEventArgs e)
- {
- //登出Id號為100的熱鍵設定
- UnregisterHotKey(Handle, 100);
- //登出Id號為101的熱鍵設定
- UnregisterHotKey(Handle, 101);
- //登出Id號為102的熱鍵設定
- UnregisterHotKey(Handle, 102);
- //登出Id號為103的熱鍵設定
- UnregisterHotKey(Handle, 103);
- }
-
- protected override void WndProc(ref Message m)
- {
- const int WM_HOTKEY = 0x0312;
- //按快速鍵
- switch (m.Msg)
- {
- case WM_HOTKEY:
- switch (m.WParam.ToInt32())
- {
- case 100: //按下的是Shift+S
- //此處填寫快速鍵響應代碼
- break;
- case 101: //按下的是Ctrl+B
- //此處填寫快速鍵響應代碼
- break;
- case 102: //按下的是Alt+D
- //此處填寫快速鍵響應代碼
- break;
- case 103: //按下的是Ctrl+Shift+0
- {
- Process Myprocess;
- try
- {
- //這段程式功能為:按下Ctrl+Shift+0後顯示案頭
- Myprocess = new System.Diagnostics.Process();
- Myprocess.StartInfo.FileName = @"C:\ShowDesktop.scf";
- Myprocess.StartInfo.Verb = "Open";
- Myprocess.Start();
- }
- catch (Exception ex)
- {
- //程式出錯時提示資訊
- MessageBox.Show(
- ex.Message, "資訊提示!", MessageBoxButtons.OK, MessageBoxIcon.Information);
- }
- break;
- }
- }
- break;
- }
- base.WndProc(ref m);
- }
-
- public Form1()
- {
- InitializeComponent();
- }
- }
- }
通過上述代碼就實現了C#自訂快速鍵的設定,大家可以嘗試一下。