using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Drawing;
namespace ImitateForm
{
public class WindowsForm
{
#region 定义api函数
#region 热键
// 注册热键 当前窗体句柄,热键id(不与其他热键重复),第一个组合键(alt,ctrl,shift,windows等),内容键 返回定义是否成功
[DllImport("user32.dll", SetLastError = true)]
private static extern bool RegisterHotKey(IntPtr hWnd, int id, KeyModifiers fsModifiers, KeyCodes vk);
// 注销热键,当热键注册之后,不在使用是注销掉 当前窗体句柄,热键id
[DllImport("user32.dll", SetLastError = true)]
private static extern bool UnregisterHotKey(IntPtr hWnd, int id);
#endregion
#region 键盘
//模拟键盘事件 键码,0,标识动作(按下,抬起),0
[DllImport("user32.dll")]
private static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
#endregion
#region 鼠标
// 鼠标执行动作 动作标识,dx:dy:(在动作为[MOUSEEVENTF_ABSOLUTE]的时候为相对位置,一般不使用(0)),一般不使用(0),一般不使用(0)
[DllImport("user32.dll")]
private static extern void mouse_event(long dwFlags, long dx, long dy, long dwData, long dwExtraInfo);
// 设置鼠标位置 相对x轴坐标,相对y轴坐标
[DllImport("user32.dll")]
private static extern void SetCursorPos(int dx, int dy);
// 获取鼠标当前位置 位置
[DllImport("user32.dll")]
private static extern void GetCursorPos(ref Point lpPoint);
#endregion
#region 窗体
//查找窗口 窗口类名,窗口标题名称
[DllImport("user32.dll")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
//激活窗体(获得窗体焦点) 窗体句柄
[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
//获取当前(激活,活动)窗口句柄
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
//获得指定窗口的进程和线程ID 窗口句柄, ID
[DllImport("User32.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto)]
private static extern int GetWindowThreadProcessId(IntPtr hwnd,out int ID);
//获取窗口的大小和位置 窗口句柄,大小位置结构
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool GetWindowRect(IntPtr hWnd, ref Rectangular lpRect);
//设置窗口的显示方式 窗口句柄,显示方式
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
private static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
//获取窗口标题 窗口句柄,标题,最大值
[DllImport("user32.dll", SetLastError = true)]
private static extern int GetWindowText(IntPtr hwnd, StringBuilder ipstring, int n);
//获取窗口的类名字 窗口句柄,类名,最大值
[DllImport("user32.dll")]
private static extern int GetClassName(IntPtr hwnd,StringBuilder ipstring, int n);
//根据指定坐标获取窗口的句柄 坐标
[DllImport("user32.dll")]
private static extern IntPtr WindowFromPoint(Point p);
//查找子窗口从排在给定的子窗口后面的下一个子窗口开始, 父窗口句柄(如果为null,则以桌面为主),子窗口句柄(如果HwndChildAfter为NULL,查找从hwndParent的第一个子窗口开始)(如果这两个同时为null,则函数查找所有的顶层窗口及消息窗口),类名字符串,窗口名称
[DllImport("user32.dll", EntryPoint = "FindWindowEx")]
private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpzzClass, string lpszWindow);
//将指定的消息发送到一个或多个窗口,此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回 接收消息的窗口的句柄,用于区别其他消息的常量值,通常是一个与消息有关的常量值(可选),是一个指向内存中数据的指针
[DllImport("user32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, string lParam);
//获得父窗口句柄 当前窗口句柄
[DllImport("user32.dll", EntryPoint = "GetParent")]
private static extern IntPtr GetParent(IntPtr hWnd);
//移动,改变窗体
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern int MoveWindow(IntPtr hwnd, int x, int y, int nWidth, int nHeight, bool bRepaint);
//
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)]
private static extern int ScreenToClient(IntPtr hWnd, ref Rectangle rect);
#endregion
#endregion
#region 外部链接字段及使用类
/// <summary>
/// 键盘操作类[SendKeys,也是键盘操作类]
/// </summary>
public static class Keyboard
{
/// <summary>
/// 模拟键盘动作
/// </summary>
/// <param name="bVk">按键的虚拟键值</param>
/// <param name="dwFlags">选项标志: keydown:0, keyup:2</param>
public static void Event(KeyCodes bVk, KeyboardEventF dwFlags)
{
if (bVk != KeyCodes.None)
{
switch (dwFlags)
{
case KeyboardEventF.Key:
keybd_event((byte)bVk, 0, 0, 0);
keybd_event((byte)bVk, 0, 2, 0);
break;
default:
keybd_event((byte)bVk, 0, (int)dwFlags, 0);
break;
}
}
}
/// <summary>
/// 一系列组合键的完成
/// </summary>
/// <param name="bVk">键集合</param>
public static void Event(params KeyCodes[] keys)
{
for (int i = 0; i < keys.Length; i++)
if (keys[i] != KeyCodes.None)
keybd_event((byte)keys[i], 0, 0, 0);
for (int i = keys.Length - 1; i >= 0; i--)
if (keys[i] != KeyCodes.None)
keybd_event((byte)keys[i], 0, 2, 0);
}
/// <summary>
/// 注册热键
/// 使用实例:
/// const int WM_HOTKEY = 0x0312;
/// switch (m.Msg)
/// {
/// case WM_HOTKEY:
/// switch (m.WParam.ToInt32())
/// {
/// case 103:
/// System.Windows.Forms.MessageBox.Show("Test");
/// break;
/// }
/// break;
/// }
/// </summary>
/// <param name="hWnd">窗口句柄</param>
/// <param name="id">热键id</param>
/// <param name="fsModifiers">第一个组合键(alt,shift....)</param>
/// <param name="vk">第二个组合键</param>
/// <returns>是否注册成功</returns>
public static bool Register(IntPtr hWnd, int id, KeyModifiers fsModifiers, KeyCodes vk)
{
return RegisterHotKey(hWnd, id, fsModifiers, vk);
}
/// <summary>
/// 销毁热键
/// </summary>
/// <param name="hWnd">窗口句柄</param>
/// <param name="id">热键的ID</param>
/// <returns>是否销毁成功</returns>
public static bool Unregister(IntPtr hWnd, int id)
{
return UnregisterHotKey(hWnd, id);
}
}
/// <summary>
/// 鼠标操作类
/// </summary>
public static class Mouses
{
static Mouses()
{
dblclickTime = 100;
_p = new Point();
}
private static Point _p;
private static int dblclickTime;
/// <summary>
/// 鼠标双击时间,默认为100毫秒
/// </summary>
public static int DblclickTime
{
get { return dblclickTime; }
set { dblclickTime = value; }
}
/// <summary>
/// 鼠标动作
/// </summary>
/// <param name="mouseevent">动作类型</param>
public static void Event(MouseEventF mouseevent)
{
switch (mouseevent)
{
case MouseEventF.Left:
mouse_event(0x0002, 0, 0, 0, 0);
mouse_event(0x0004, 0, 0, 0, 0);
break;
case MouseEventF.Right:
mouse_event(0x0008, 0, 0, 0, 0);
mouse_event(0x0010, 0, 0, 0, 0);
break;
case MouseEventF.Middle:
mouse_event(0x0020, 0, 0, 0, 0);
mouse_event(0x0040, 0, 0, 0, 0);
break;
case MouseEventF.LeftDblclick:
mouse_event(0x0002, 0, 0, 0, 0);
mouse_event(0x0004, 0, 0, 0, 0);
if (DblclickTime > 1)
System.Threading.Thread.Sleep(DblclickTime);
mouse_event(0x0002, 0, 0, 0, 0);
mouse_event(0x0004, 0, 0, 0, 0);
break;
case MouseEventF.RightDblclick:
mouse_event(0x0008, 0, 0, 0, 0);
mouse_event(0x0010, 0, 0, 0, 0);
if (DblclickTime > 1)
System.Threading.Thread.Sleep(DblclickTime);
mouse_event(0x0008, 0, 0, 0, 0);
mouse_event(0x0010, 0, 0, 0, 0);
break;
case MouseEventF.MiddleDblclick:
mouse_event(0x0020, 0, 0, 0, 0);
mouse_event(0x0040, 0, 0, 0, 0);
if (DblclickTime > 1)
System.Threading.Thread.Sleep(DblclickTime);
mouse_event(0x0020, 0, 0, 0, 0);
mouse_event(0x0040, 0, 0, 0, 0);
break;
default:
mouse_event((long)mouseevent, 0, 0, 0, 0);
break;
}
}
/// <summary>
/// 鼠标动作 ,针对于鼠标的相对位置参数(MOUSEEVENTF_ABSOLUTE)
/// </summary>
/// <param name="dx">根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定水平方向的绝对位置或相对运动</param>
/// <param name="dy">根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定垂直方向的绝对位置或相对运动</param>
/// <param name="dwData">未使用 0</param>
/// <param name="dwExtraInfo">通常未用的一个值。用GetMessageExtraInfo函数可取得这个值。可用的值取决于特定的驱动程序</param>
public static void Event(long dx, long dy, long dwData, long dwExtraInfo)
{
mouse_event(0x8000, dx, dy, dwData, dwExtraInfo);
}
/// <summary>
/// 设置鼠标的位置
/// </summary>
/// <param name="x">X坐标</param>
/// <param name="y">Y坐标</param>
public static void SetPoint(int x, int y)
{
SetCursorPos(x, y);
}
/// <summary>
/// 设置鼠标的位置
/// </summary>
/// <param name="p">位置</param>
public static void SetPoint(Point p)
{
SetCursorPos(p.X, p.Y);
}
/// <summary>
/// 获取鼠标的位置
/// </summary>
/// <returns>位置</returns>
public static Point GetPoint()
{
GetCursorPos(ref _p);
return _p;
}
}
/// <summary>
/// 窗体操作类
/// </summary>
public static class Forms
{
/// <summary>
/// 查找窗体
/// </summary>
/// <param name="formname">窗体标题名称</param>
/// <returns>窗体句柄</returns>
public static IntPtr FindForm(string formname)
{
return FindWindow(null, formname);
}
/// <summary>
/// 查找窗体
/// </summary>
/// <param name="classname">窗体类名称</param>
/// <param name="formname">窗体标题</param>
/// <returns>窗体句柄</returns>
public static IntPtr FindForm(string classname, string formname)
{
return FindWindow(classname, formname);
}
/// <summary>
/// 获取当前活动窗体
/// </summary>
/// <returns>窗体句柄</returns>
public static IntPtr GetForegroundForm()
{
return GetForegroundWindow();
}
/// <summary>
/// 给指定句柄窗体设置焦点,或者激活窗体
/// </summary>
/// <param name="iphw">窗体句柄</param>
/// <returns>是否成功</returns>
public static bool SetForegroundForm(IntPtr iphw)
{
return SetForegroundWindow(iphw);
}
/// <summary>
/// 获取指定窗体句柄的进程和线程Id
/// </summary>
/// <param name="iphw">窗体句柄</param>
/// <param name="id">返回时进程Id</param>
/// <returns>创建该窗体的线程Id</returns>
public static int GetFormThreadProcessId(IntPtr iphw, out int id)
{
return GetWindowThreadProcessId(iphw, out id);
}
/// <summary>
/// 返回指定句柄窗体的进程和线程组成的数组
/// </summary>
/// <param name="iphw">窗体句柄</param>
/// <returns>进程,线程组成的数组 a[0]: 线程Id, a[1]: 进程Id</returns>
public static int[] GetFormThreadProcessId(IntPtr iphw)
{
int[] ret = new int[2];
ret[0] = GetWindowThreadProcessId(iphw, out ret[1]);
return ret;
}
/// <summary>
/// 获取窗体的大小和位置
/// </summary>
/// <param name="iphw">窗体句柄</param>
/// <param name="rgl">大小和位置</param>
/// <returns>是否成功</returns>
public static bool GetFormRect(IntPtr iphw, ref Rectangular rgl)
{
return GetWindowRect(iphw, ref rgl);
}
/// <summary>
/// 获取窗体的大小和位置
/// </summary>
/// <param name="iphw">窗体句柄</param>
/// <returns>是否成功</returns>
public static Rectangular GetFormRect(IntPtr iphw)
{
Rectangular rgl = new Rectangular();
GetWindowRect(iphw, ref rgl);
return rgl;
}
/// <summary>
/// 按照方式显示窗体
/// </summary>
/// <param name="iphw">窗体句柄</param>
/// <param name="sw">窗体显示方式,还原,最小化,最大化</param>
/// <returns></returns>
public static int ShowForm(IntPtr iphw, ShowWindowF sw)
{
return ShowWindow(iphw, (int)sw);
}
/// <summary>
/// 获取窗体标题
/// </summary>
/// <param name="hwnd">窗体句柄</param>
/// <param name="ipstring">标题名称</param>
/// <param name="n">最大值</param>
/// <returns></returns>
public static int GetFormTitleName(IntPtr hwnd, StringBuilder ipstring, int n)
{
return GetWindowText(hwnd, ipstring, n);
}
/// <summary>
/// 获得窗体的类名
/// </summary>
/// <param name="hwnd">窗体句柄</param>
/// <param name="ipstring">类名称</param>
/// <param name="n">最大值</param>
/// <returns></returns>
public static int GetFormClassName(IntPtr hwnd,StringBuilder ipstring, int n)
{
return GetClassName(hwnd,ipstring, n);
}
/// <summary>
/// 获取窗体标题
/// </summary>
/// <param name="hwnd">窗体句柄</param>
/// <returns></returns>
public static StringBuilder GetFormTitleName(IntPtr hwnd)
{
StringBuilder sb = new StringBuilder();
sb.Capacity = 999;
GetWindowText(hwnd, sb, 998);
return sb;
}
/// <summary>
/// 获得窗体的类名
/// </summary>
/// <param name="hwnd">窗体句柄</param>
/// <returns></returns>
public static StringBuilder GetFormClassName(IntPtr hwnd)
{
StringBuilder sb = new StringBuilder();
sb.Capacity = 999;
GetWindowText(hwnd,sb, 998);
return sb;
}
/// <summary>
/// 获取坐标处的窗体句柄
/// </summary>
/// <param name="p">坐标</param>
/// <returns>窗体句柄</returns>
public static IntPtr GetFormByPoint(Point p)
{
return WindowFromPoint(p);
}
/// <summary>
/// 查找子窗口
/// </summary>
/// <returns></returns>
public static IntPtr FindFormEx()
{
return FindWindowEx(IntPtr.Zero, IntPtr.Zero, null, null);
}
/// <summary>
/// 查找子窗口
/// </summary>
/// <param name="parent">父窗口句柄</param>
/// <param name="child">子窗口句柄</param>
/// <param name="classname">类名</param>
/// <param name="titlename">标题名称</param>
/// <returns>子窗体句柄</returns>
public static IntPtr FindFormEx(IntPtr parent, IntPtr child, string classname, string titlename)
{
return FindWindowEx(parent, child, classname, titlename);
}
/// <summary>
/// 查找子窗口
/// </summary>
/// <param name="parent">父窗口句柄</param>
/// <param name="child">子窗口句柄</param>
/// <param name="titlename">标题名称</param>
/// <returns>子窗口句柄</returns>
public static IntPtr FindFormEx(IntPtr parent, IntPtr child, string titlename)
{
return FindWindowEx(parent, child, null, titlename);
}
/// <summary>
/// 将指定的消息发送到一个或多个窗口
/// </summary>
/// <param name="hwnd">窗口句柄</param>
/// <param name="wMsg">消息类型</param>
/// <param name="wParam">附加信息</param>
/// <param name="lParam">附加信息</param>
/// <returns>消息执行结果</returns>
public static int SendMessageToForm(IntPtr hwnd, int wMsg, IntPtr wParam, string ipmsg)
{
return SendMessage(hwnd, wMsg, wParam, ipmsg);
}
/// <summary>
/// 将指定的消息发送到一个或多个窗口
/// </summary>
/// <param name="hwnd">窗口句柄</param>
/// <param name="wMsg">消息类型</param>
/// <param name="ipmsg">消息内容</param>
/// <returns>消息执行结果</returns>
public static int SendMessageToForm(IntPtr hwnd, int wMsg, string ipmsg)
{
return SendMessage(hwnd, wMsg, IntPtr.Zero, ipmsg);
}
/// <summary>
/// 获取父窗口句柄
/// </summary>
/// <param name="lphwnd">当前窗口句柄</param>
/// <returns></returns>
public static IntPtr GetParentForm(IntPtr lphwnd)
{
return GetParent(lphwnd);
}
/// <summary>
/// 移动改变窗体
/// </summary>
/// <param name="hwnd">窗体句柄</param>
/// <param name="x">x坐标</param>
/// <param name="y">y坐标</param>
/// <param name="nWidth">宽度</param>
/// <param name="nHeight">高度</param>
/// <param name="bRepaint">是否要重画窗体</param>
/// <returns></returns>
public static int MoveForm(IntPtr hwnd, int x, int y, int nWidth, int nHeight, bool bRepaint)
{
return MoveWindow(hwnd, x, y, nWidth, nHeight, bRepaint);
}
/// <summary>
/// 移动改变窗体
/// </summary>
/// <param name="hwnd">窗体句柄</param>
/// <param name="rect">位置大小</param>
/// <returns></returns>
public static int MoveForm(IntPtr hwnd, Rectangle rect)
{
return MoveWindow(hwnd, rect.X, rect.Y, rect.Width, rect.Height, true);
}
/// <summary>
///
/// </summary>
/// <param name="hWnd">窗体句柄</param>
/// <param name="rect">窗体位置</param>
/// <returns></returns>
public static int ScreenToClients(IntPtr hWnd, ref Rectangle rect)
{
return ScreenToClient(hWnd, ref rect);
}
/// <summary>
///
/// </summary>
/// <param name="hWnd">窗体句柄</param>
/// <returns></returns>
public static Rectangle ScreenToClients(IntPtr hWnd)
{
Rectangle rect = new Rectangle();
ScreenToClient(hWnd, ref rect);
return rect;
}
}
#endregion
}
#region 其他辅助类与枚举
/// <summary>
/// 获取窗口的位置类
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct Rectangular
{
public int Left; //最左坐标
public int Top; //最上坐标
public int Right; //最右坐标
public int Bottom; //最下坐标
}
/// <summary>
/// 展示窗体方式
/// </summary>
public enum ShowWindowF : int
{
/// <summary>
/// 正常模式
/// </summary>
Normal = 1,
/// <summary>
/// 最小化
/// </summary>
Minimize = 2,
/// <summary>
/// 最大化
/// </summary>
Maximize = 3,
/// <summary>
/// 关闭
/// </summary>
Close = 0
}
/// <summary>
/// 定义了辅助键的名称,注册热键使用
/// </summary>
[Flags]
public enum KeyModifiers
{
/// <summary>
/// 没有
/// </summary>
NoneKey = 0,
/// <summary>
/// alt键
/// </summary>
AltKey = 1,
/// <summary>
/// ctrl键
/// </summary>
CtrlKey = 2,
/// <summary>
/// shift键
/// </summary>
ShiftKey = 4,
/// <summary>
/// windows键
/// </summary>
WindowsKey = 8
}
/// <summary>
/// 鼠标动作
/// </summary>
public enum MouseEventF : long
{
/// <summary>
/// 移动
/// </summary>
Move = 0x0001,
/// <summary>
/// 左键按下
/// </summary>
LeftDown = 0x0002,
/// <summary>
/// 左键抬起
/// </summary>
LeftUp = 0x0004,
/// <summary>
/// 右键按下
/// </summary>
RightDown = 0x0008,
/// <summary>
/// 右键抬起
/// </summary>
RightUp = 0x0010,
/// <summary>
/// 中间键按下
/// </summary>
MiddleDowm = 0x0020,
/// <summary>
/// 中间键抬起
/// </summary>
MiddleUp = 0x0040,
/// <summary>
/// [不经常使用] dx和dy指定鼠标坐标系统中的一个绝对位置。在鼠标坐标系统中,屏幕在水平和垂直方向上均匀分割成65535×65535个单元
/// </summary>
Absolute = 0x8000,
/// <summary>
/// 左键完整操作,按下抬起
/// </summary>
Left,
/// <summary>
/// 右键完整操作,按下抬起
/// </summary>
Right,
/// <summary>
/// 中间键完整操作,按下抬起
/// </summary>
Middle,
/// <summary>
/// 左键双击
/// </summary>
LeftDblclick,
/// <summary>
/// 右键双击
/// </summary>
RightDblclick,
/// <summary>
/// 中间键双击
/// </summary>
MiddleDblclick
}
/// <summary>
/// 键盘动作
/// </summary>
public enum KeyboardEventF : long
{
/// <summary>
/// 键按下
/// </summary>
KeyDown = 0x0,
/// <summary>
/// 键抬起
/// </summary>
KeyUp = 0x2,
/// <summary>
/// 完整按键
/// </summary>
Key
}
/// <summary>
/// 常用键盘键码
/// </summary>
public enum KeyCodes : byte
{
/// <summary>
/// 没有按任何键
/// </summary>
None = 0,
/// <summary>
/// 鼠标左按钮
/// </summary>
LeftMouse = 1,
/// <summary>
/// 鼠标右按钮
/// </summary>
RightMouse = 2,
/// <summary>
/// 鼠标中键(三个按钮的鼠标)
/// </summary>
MiddleMouse = 4,
/// <summary>
/// Backspace 键
/// </summary>
BackspaceKey = 8,
/// <summary>
/// Tab 键
/// </summary>
TabKey = 9,
/// <summary>
/// Enter 键
/// </summary>
EnterKey = 13,
/// <summary>
/// Shift 键
/// </summary>
ShiftKey = 16,
/// <summary>
/// Ctrl 键
/// </summary>
CtrlKey = 17,
/// <summary>
/// Alt 键
/// </summary>
AltKey = 18,
/// <summary>
/// Caps Lock 键
/// </summary>
CapsLockKey = 20,
/// <summary>
/// Esc 键
/// </summary>
EscapeKey = 27,
/// <summary>
/// 空格键
/// </summary>
SpaceKey = 32,
/// <summary>
/// Page Up 键
/// </summary>
PageUpKey = 33,
/// <summary>
/// Page Down 键
/// </summary>
PageDownKey = 34,
/// <summary>
/// End 键
/// </summary>
EndKey = 35,
/// <summary>
/// Home 键
/// </summary>
HomeKey = 36,
/// <summary>
/// 向左键
/// </summary>
LeftKey = 37,
/// <summary>
/// 向上键
/// </summary>
UpKey = 38,
/// <summary>
/// 向右键
/// </summary>
RightKey = 39,
/// <summary>
/// 向下键
/// </summary>
DownKey = 40,
/// <summary>
/// Insert 键
/// </summary>
InsertKey = 45,
/// <summary>
/// Delete 键
/// </summary>
DeletKey = 46,
/// <summary>
/// 0 键
/// </summary>
D0 = 48,
/// <summary>
/// 1 键
/// </summary>
D1 = 49,
/// <summary>
/// 2 键
/// </summary>
D2 = 50,
/// <summary>
/// 3 键
/// </summary>
D3 = 51,
/// <summary>
/// 4 键
/// </summary>
D4 = 52,
/// <summary>
/// 5 键
/// </summary>
D5 = 53,
/// <summary>
/// 6 键
/// </summary>
D6 = 54,
/// <summary>
/// 7 键
/// </summary>
D7 = 55,
/// <summary>
/// 8 键
/// </summary>
D8 = 56,
/// <summary>
/// 9 键
/// </summary>
D9 = 57,
/// <summary>
/// A 键
/// </summary>
A = 65,
/// <summary>
/// B 键
/// </summary>
B = 66,
/// <summary>
/// C 键
/// </summary>
C = 67,
/// <summary>
/// D 键
/// </summary>
D = 68,
/// <summary>
/// E 键
/// </summary>
E = 69,
/// <summary>
/// F 键
/// </summary>
F = 70,
/// <summary>
/// G 键
/// </summary>
G = 71,
/// <summary>
/// H 键
/// </summary>
H = 72,
/// <summary>
/// I 键
/// </summary>
I = 73,
/// <summary>
/// J 键
/// </summary>
J = 74,
/// <summary>
/// K 键
/// </summary>
K = 75,
/// <summary>
/// L 键
/// </summary>
L = 76,
/// <summary>
/// M 键
/// </summary>
M = 77,
/// <summary>
/// N 键
/// </summary>
N = 78,
/// <summary>
/// O 键
/// </summary>
O = 79,
/// <summary>
/// P 键
/// </summary>
P = 80,
/// <summary>
/// Q 键
/// </summary>
Q = 81,
/// <summary>
/// R 键
/// </summary>
R = 82,
/// <summary>
/// S 键
/// </summary>
S = 83,
/// <summary>
/// T 键
/// </summary>
T = 84,
/// <summary>
/// U 键
/// </summary>
U = 85,
/// <summary>
/// V 键
/// </summary>
V = 86,
/// <summary>
/// W 键
/// </summary>
W = 87,
/// <summary>
/// X 键
/// </summary>
X = 88,
/// <summary>
/// Y 键
/// </summary>
Y = 89,
/// <summary>
/// Z 键
/// </summary>
Z = 90,
/// <summary>
/// 左 Windows 徽标键(Microsoft Natural Keyboard,人体工程学键盘)
/// </summary>
LeftWindowsKey = 91,
/// <summary>
/// 右 Windows 徽标键(Microsoft Natural Keyboard,人体工程学键盘)
/// </summary>
RrightWindowsKey = 92,
/// <summary>
/// 应用程序键(Microsoft Natural Keyboard,人体工程学键盘)
/// </summary>
Apps = 93,
/// <summary>
/// 计算机睡眠键
/// </summary>
Sleep = 95,
/// <summary>
/// 数字键盘上的 0 键
/// </summary>
NumPad0 = 96,
/// <summary>
/// 数字键盘上的 1 键
/// </summary>
NumPad1 = 97,
/// <summary>
/// 数字键盘上的 2 键
/// </summary>
NumPad2 = 98,
/// <summary>
/// 数字键盘上的 3 键
/// </summary>
NumPad3 = 99,
/// <summary>
/// 数字键盘上的 4 键
/// </summary>
NumPad4 = 100,
/// <summary>
/// 数字键盘上的 5 键
/// </summary>
NumPad5 = 101,
/// <summary>
/// 数字键盘上的 6 键
/// </summary>
NumPad6 = 102,
/// <summary>
/// 数字键盘上的 7 键
/// </summary>
NumPad7 = 103,
/// <summary>
/// 数字键盘上的 8 键
/// </summary>
NumPad8 = 104,
/// <summary>
/// 数字键盘上的 9 键
/// </summary>
NumPad9 = 105,
/// <summary>
/// 乘号键
/// </summary>
MultiplyKey = 106,
/// <summary>
/// 加号键
/// </summary>
AddKey = 107,
/// <summary>
/// 分隔符键
/// </summary>
SeparatorKey = 108,
/// <summary>
/// 减号键
/// </summary>
SubtractKey = 109,
/// <summary>
/// 句点键
/// </summary>
DecimalKey = 110,
/// <summary>
/// 除号键
/// </summary>
DivideKey = 111,
/// <summary>
/// F1 键
/// </summary>
F1 = 112,
/// <summary>
/// F2 键
/// </summary>
F2 = 113,
/// <summary>
/// F3 键
/// </summary>
F3 = 114,
/// <summary>
/// F4 键
/// </summary>
F4 = 115,
/// <summary>
/// F5 键
/// </summary>
F5 = 116,
/// <summary>
/// F6 键
/// </summary>
F6 = 117,
/// <summary>
/// F7 键
/// </summary>
F7 = 118,
/// <summary>
/// F8 键
/// </summary>
F8 = 119,
/// <summary>
/// F9 键
/// </summary>
F9 = 120,
/// <summary>
/// F10 键
/// </summary>
F10 = 121,
/// <summary>
/// F11 键
/// </summary>
F11 = 122,
/// <summary>
/// F12 键
/// </summary>
F12 = 123,
/// <summary>
/// F13 键
/// </summary>
F13 = 124,
/// <summary>
/// F14 键
/// </summary>
F14 = 125,
/// <summary>
/// F15 键
/// </summary>
F15 = 126,
/// <summary>
/// F16 键
/// </summary>
F16 = 127,
/// <summary>
/// F17 键
/// </summary>
F17 = 128,
/// <summary>
/// F18 键
/// </summary>
F18 = 129,
/// <summary>
/// F19 键
/// </summary>
F19 = 130,
/// <summary>
/// F20 键
/// </summary>
F20 = 131,
/// <summary>
/// F21 键
/// </summary>
F21 = 132,
/// <summary>
/// F22 键
/// </summary>
F22 = 133,
/// <summary>
/// F23 键
/// </summary>
F23 = 134,
/// <summary>
/// F24 键
/// </summary>
F24 = 135,
/// <summary>
/// Num Lock 键
/// </summary>
NumLock = 144,
/// <summary>
/// Scroll Lock 键
/// </summary>
ScrollLock = 145,
/// <summary>
/// 左 Shift 键
/// </summary>
LeftShiftKey = 160,
/// <summary>
/// 右 Shift 键
/// </summary>
RightShiftKey = 161,
/// <summary>
/// 左 Ctrl 键
/// </summary>
LeftControlKey = 162,
/// <summary>
/// 右 Ctrl 键
/// </summary>
RightControlKey = 163,
/// <summary>
/// 左 Alt 键
/// </summary>
LeftMenu = 164,
/// <summary>
/// 右 Alt 键
/// </summary>
RightMenu = 165,
/// <summary>
/// 美式标准键盘上的 OEM 分号键(Windows 2000 或更高版本)
/// </summary>
OemSemicolon = 186,
/// <summary>
/// 任何国家/地区键盘上的 OEM 加号键(Windows 2000 或更高版本)
/// </summary>
Oemplus = 187,
/// <summary>
/// 任何国家/地区键盘上的 OEM 逗号键(Windows 2000 或更高版本)
/// </summary>
Oemcomma = 188,
/// <summary>
/// 任何国家/地区键盘上的 OEM 减号键(Windows 2000 或更高版本)
/// </summary>
OemMinus = 189,
/// <summary>
/// 任何国家/地区键盘上的 OEM 句点键(Windows 2000 或更高版本)
/// </summary>
OemPeriod = 190,
/// <summary>
/// 美式标准键盘上的 OEM 问号键(Windows 2000 或更高版本)
/// </summary>
OemQuestion = 191,
/// <summary>
/// 美式标准键盘上的 OEM 波形符键(Windows 2000 或更高版本)
/// </summary>
Oemtilde = 192,
/// <summary>
/// 美式标准键盘上的 OEM 左括号键(Windows 2000 或更高版本)
/// </summary>
OemOpenBrackets = 219,
/// <summary>
/// 美式标准键盘上的 OEM 管道键(Windows 2000 或更高版本)
/// </summary>
OemPipe = 220,
/// <summary>
/// 美式标准键盘上的 OEM 右括号键(Windows 2000 或更高版本)
/// </summary>
OemCloseBrackets = 221,
/// <summary>
/// 美式标准键盘上的 OEM 单/双引号键(Windows 2000 或更高版本)
/// </summary>
OemQuotes = 222,
/// <summary>
/// RT 102 键的键盘上的 OEM 尖括号或反斜杠键(Windows 2000 或更高版本)
/// </summary>
OemBackslash = 226
}
#endregion
}