捕获硬件按钮事件

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using Microsoft.WindowsCE.Forms;
using System.Runtime.InteropServices;

namespace PDADeviceApplication1
{
    /// <summary>
    /// Summary description for HButtons.
    /// </summary>
    public enum KeyModifiers
    {
        None = 0,
        Alt = 1,
        Control = 2,
        Shift = 4,
        Windows = 8,
        Modkeyup = 0x1000,
    }

    public enum KeysHardware : int
    {
        Hardware1 = 193,
        Hardware2 = 194,
        Hardware3 = 195,
        Hardware4 = 196,
        Hardware5 = 197
    }
    public class HButtons : System.Windows.Forms.Form
    {
        myMessageWindow messageWindow;
        public HButtons()
        {
            this.messageWindow = new myMessageWindow(this); RegisterHKeys.RegisterRecordKey(this.messageWindow.Hwnd);
        }

        protected override void Dispose(bool disposing)
        {
            base.Dispose(disposing);
        }
        public static void Main()
        {
            Application.Run(new HButtons());
        }
        public void ButtonPressed(int button)
        {
            switch (button)
            {
                case (int)KeysHardware.Hardware1:
                    MessageBox.Show("Button 1 pressed!");
                    break;
                case (int)KeysHardware.Hardware2:
                    MessageBox.Show("Button 2 pressed!");
                    break;
                case (int)KeysHardware.Hardware3:
                    MessageBox.Show("Button 3 pressed!");
                    break;
                case (int)KeysHardware.Hardware4:
                    MessageBox.Show("Button 4 pressed!");
                    break;
            }

        }

        private void InitializeComponent()
        {
            this.SuspendLayout();
            //
            // HButtons
            //
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
            this.ClientSize = new System.Drawing.Size(240, 294);
            this.Name = "HButtons";
            this.ResumeLayout(false);

        }

    }

    public class myMessageWindow : MessageWindow
    {

        public const int WM_HOTKEY = 0x0312;
        HButtons example;
        public myMessageWindow(HButtons example)
        {
            this.example = example;
        }

        protected override void WndProc(ref Message msg)
        {
            switch (msg.Msg)
            {
                case WM_HOTKEY:
                    example.ButtonPressed(msg.WParam.ToInt32());
                    return;
            }
            base.WndProc(ref msg);
        }
    }
    public class RegisterHKeys
    {
        [DllImport("coredll.dll", SetLastError = true)]
        public static extern bool RegisterHotKey(
        IntPtr hWnd, // handle to window
        int id, // hot key identifier
        KeyModifiers Modifiers, // key-modifier options
        int key //virtual-key code
        );

        [DllImport("coredll.dll")]
        private static extern bool UnregisterFunc1(KeyModifiers
        modifiers, int keyID);

        public static void RegisterRecordKey(IntPtr hWnd)
        {
            UnregisterFunc1(KeyModifiers.Windows, (int)KeysHardware.Hardware1);
            RegisterHotKey(hWnd, (int)KeysHardware.Hardware1, KeyModifiers.Windows, (int)KeysHardware.Hardware1);


            UnregisterFunc1(KeyModifiers.Windows, (int)KeysHardware.Hardware2);
            RegisterHotKey(hWnd, (int)KeysHardware.Hardware2, KeyModifiers.Windows, (int)KeysHardware.Hardware2);

            UnregisterFunc1(KeyModifiers.Windows, (int)KeysHardware.Hardware3);
            RegisterHotKey(hWnd, (int)KeysHardware.Hardware3, KeyModifiers.Windows, (int)KeysHardware.Hardware3);

            UnregisterFunc1(KeyModifiers.Windows, (int)KeysHardware.Hardware4);
            RegisterHotKey(hWnd, (int)KeysHardware.Hardware4, KeyModifiers.Windows, (int)KeysHardware.Hardware4);
        }
    }
}
 

///

public enum KeysHardware
{
Hardware1 = 193,
Hardware2 = 194,
Hardware3 = 195,
Hardware4 = 196,
Hardware5 = 197,
Hardware6 = 37,//left
Hardware7 = 39,//right
Hardware8 = 38,//up
Hardware9 = 40,//down
Hardware10 = 13//enter


}

Then you register it like this. Cursors keys has to be registred with NONE modifier:

UnregisterFunc1(KeyModifiers.Windows, (int)KeysHardware.Hardware1);
RegisterHotKey(hWnd, (int) KeysHardware.Hardware1, KeyModifiers.Windows, (int) KeysHardware.Hardware1);

UnregisterFunc1(KeyModifiers.Windows, (int)KeysHardware.Hardware2);
RegisterHotKey(hWnd, (int) KeysHardware.Hardware2, KeyModifiers.Windows, (int) KeysHardware.Hardware2);
UnregisterFunc1(KeyModifiers.Windows, (int)KeysHardware.Hardware3);
RegisterHotKey(hWnd, (int) KeysHardware.Hardware3, KeyModifiers.Windows, (int) KeysHardware.Hardware3);
UnregisterFunc1(KeyModifiers.Windows, (int)KeysHardware.Hardware4);
RegisterHotKey(hWnd, (int) KeysHardware.Hardware4, KeyModifiers.Windows, (int) KeysHardware.Hardware4);
UnregisterFunc1(KeyModifiers.Windows, (int)KeysHardware.Hardware5);
RegisterHotKey(hWnd, (int) KeysHardware.Hardware5, KeyModifiers.Windows, (int) KeysHardware.Hardware5);
UnregisterFunc1(KeyModifiers.None, (int)KeysHardware.Hardware6);
RegisterHotKey(hWnd, (int) KeysHardware.Hardware6, KeyModifiers.None, (int) KeysHardware.Hardware6);
UnregisterFunc1(KeyModifiers.None, (int)KeysHardware.Hardware7);
RegisterHotKey(hWnd, (int) KeysHardware.Hardware7, KeyModifiers.None, (int) KeysHardware.Hardware7);
UnregisterFunc1(KeyModifiers.None, (int)KeysHardware.Hardware8);
RegisterHotKey(hWnd, (int) KeysHardware.Hardware8, KeyModifiers.None, (int) KeysHardware.Hardware8);
UnregisterFunc1(KeyModifiers.None, (int)KeysHardware.Hardware9);
RegisterHotKey(hWnd, (int) KeysHardware.Hardware9, KeyModifiers.None, (int) KeysHardware.Hardware9);
UnregisterFunc1(KeyModifiers.None, (int)KeysHardware.Hardware10);
RegisterHotKey(hWnd, (int) KeysHardware.Hardware10, KeyModifiers.None, (int) KeysHardware.Hardware10);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值