好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#编程实现自定义热键的方法

本文实例讲述了C#编程实现自定义热键的方法。分享给大家供大家参考。具体实现方法如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Drawing.Imaging;

using System.IO;

using System.Runtime.InteropServices;

using System.Net;

using System.Drawing.Drawing2D;

namespace App

{

  public partial class Form2 : Form

  {

   public Form2()

   {

    InitializeComponent();

    //程序加载加载热键

    this .Load += delegate

    {

     // 热键一:Control +光标左箭头

     CustomSystemKeyBoard.RegisterHotKey(Handle, 100, 8, Keys.Left);

     // 热键一:Control +光标右箭头

     CustomSystemKeyBoard.RegisterHotKey(Handle, 200, 2, Keys.Right);

     // 热键一:Control +光标上箭头

     CustomSystemKeyBoard.RegisterHotKey(Handle, 300, 2, Keys.Up);

     // 热键一:Control +光标下箭头

     CustomSystemKeyBoard.RegisterHotKey(Handle, 400, 2, Keys.Down);

    };

    //在程序退出时取消热键的注册

    this .FormClosing += delegate

    {

     CustomSystemKeyBoard.UnregisterHotKey(Handle, 100);

     CustomSystemKeyBoard.UnregisterHotKey(Handle, 200);

     CustomSystemKeyBoard.UnregisterHotKey(Handle, 300);

     CustomSystemKeyBoard.UnregisterHotKey(Handle, 400);

    };

   }

   protected override void WndProc( ref Message m)

   {

    //如果m.Msg的值为0x0312那么表示用户按下了热键

    const int WM_HOTKEY = 0x0312;

    switch (m.Msg)

    {

     case WM_HOTKEY:

      ProcessKey(m);

      break ;

    }

    base .WndProc( ref m);

   }

   /// <summary>

   /// 按下热键的操作

   /// </summary>

   /// <param name="m"></param>

   protected void ProcessKey(Message m)

   {

    //IntPtr用于表示指针或句柄的平台特定类型

    string id = m.WParam.ToString();

    MessageBox.Show(id);

    switch (id)

    {

     case "100" :

      //

      break ;

     case "200" :

      break ;

     case "300" :

      break ;

     case "400" :

      break ;

    }

   }

  }

  public class CustomSystemKeyBoard

  {

   /// <summary>

   /// 声明API函数

   /// </summary>

   /// <param name="hWnd">Handle</param>

   /// <param name="id">热键id</param>

   /// <param name="fsModifiers">热键类型(KeyModifiers)</param>

   /// <param name="vk">键盘按键</param>

   /// <returns></returns>

   [System.Runtime.InteropServices.DllImport( "user32.dll" )]

   public static extern bool RegisterHotKey(

    IntPtr hWnd,

    int id,

    uint fsModifiers,

    Keys vk

    );

   /// <summary>

   /// 声明API函数

   /// </summary>

   /// <param name="hWnd"></param>

   /// <param name="id"></param>

   /// <returns></returns>

   [System.Runtime.InteropServices.DllImport( "user32.dll" )]

   public static extern bool UnregisterHotKey(IntPtr hWnd, int id);

   /// <summary>

   /// 定义一个KeyModifiers的枚举,以便出现组合键

   /// </summary>

   public enum KeyModifiers

   {

    None = 0,

    Alt = 1,

    Control = 2,

    Shift = 3,

    Windows = 8

   }

  }

}

希望本文所述对大家的C#程序设计有所帮助。

dy("nrwz");

查看更多关于C#编程实现自定义热键的方法的详细内容...

  阅读:68次