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);