前言
網上搜了一圈沒現成的,乾脆寫一個方便使用好了。
環境:.Net Framework 4.0,VS2010
鍵盤鍵碼值參考了:
C#窗體如何通過keybd_event()函數模擬鍵盤按鍵(組合鍵)產生事件
1. 鍵盤鍵碼值
爲了調用windows系統的keybd_event,鍵碼的值都是byte類型
/// <summary>
/// 枚舉類型,鍵盤按鍵的鍵碼值
/// </summary>
public enum KeyValueEnum : byte
{
//常用鍵:字母鍵A到Z
vbKeyA = 65 ,
vbKeyB = 66 ,
vbKeyC = 67 ,
vbKeyD = 68 ,
vbKeyE = 69 ,
vbKeyF = 70 ,
vbKeyG = 71 ,
vbKeyH = 72 ,
vbKeyI = 73 ,
vbKeyJ = 74 ,
vbKeyK = 75 ,
vbKeyL = 76 ,
vbKeyM = 77 ,
vbKeyN = 78 ,
vbKeyO = 79 ,
vbKeyP = 80 ,
vbKeyQ = 81 ,
vbKeyR = 82 ,
vbKeyS = 83 ,
vbKeyT = 84 ,
vbKeyU = 85 ,
vbKeyV = 86 ,
vbKeyW = 87 ,
vbKeyX = 88 ,
vbKeyY = 89 ,
vbKeyZ = 90 ,
// 數字鍵盤:0 - 9
vbKey0 = 48 , // 0 鍵
vbKey1 = 49 , // 1 鍵
vbKey2 = 50 , // 2 鍵
vbKey3 = 51 , // 3 鍵
vbKey4 = 52 , // 4 鍵
vbKey5 = 53 , // 5 鍵
vbKey6 = 54 , // 6 鍵
vbKey7 = 55 , // 7 鍵
vbKey8 = 56 , // 8 鍵
vbKey9 = 57 , // 9 鍵
// 小鍵盤按鍵
vbKeyNumpad0 = 0x60 , // 0 鍵
vbKeyNumpad1 = 0x61 , // 1 鍵
vbKeyNumpad2 = 0x62 , // 2 鍵
vbKeyNumpad3 = 0x63 , // 3 鍵
vbKeyNumpad4 = 0x64 , // 4 鍵
vbKeyNumpad5 = 0x65 , // 5 鍵
vbKeyNumpad6 = 0x66 , // 6 鍵
vbKeyNumpad7 = 0x67 , // 7 鍵
vbKeyNumpad8 = 0x68 , // 8 鍵
vbKeyNumpad9 = 0x69 , // 9 鍵
vbKeyMultiply = 0x6A , // MULTIPLICATIONSIGN(*)鍵
vbKeyAdd = 0x6B , // PLUS SIGN(+) 鍵
vbKeySeparator = 0x6C , // ENTER 鍵
vbKeySubtract = 0x6D , // MINUS SIGN(-) 鍵
vbKeyDecimal = 0x6E , // DECIMAL POINT(.) 鍵
vbKeyDivide = 0x6F , // DIVISION SIGN(/) 鍵
// F1到F12按鍵
vbKeyF1 = 0x70 , // F1 鍵
vbKeyF2 = 0x71 , // F2 鍵
vbKeyF3 = 0x72 , // F3 鍵
vbKeyF4 = 0x73 , // F4 鍵
vbKeyF5 = 0x74 , // F5 鍵
vbKeyF6 = 0x75 , // F6 鍵
vbKeyF7 = 0x76 , // F7 鍵
vbKeyF8 = 0x77 , // F8 鍵
vbKeyF9 = 0x78 , // F9 鍵
vbKeyF10 = 0x79 , // F10 鍵
vbKeyF11 = 0x7A , // F11 鍵
vbKeyF12 = 0x7B , // F12 鍵
// 其他常用按鍵
vbKeyLButton = 0x1, // 鼠標左鍵
vbKeyRButton = 0x2, // 鼠標右鍵
vbKeyCancel = 0x3, // CANCEL 鍵
vbKeyMButton = 0x4, // 鼠標中鍵
vbKeyBack = 0x8, // BACKSPACE 鍵
vbKeyTab = 0x9, // TAB 鍵
vbKeyClear = 0xC, // CLEAR 鍵
vbKeyReturn = 0xD, // ENTER 鍵
vbKeyShift = 0x10, // SHIFT 鍵
vbKeyControl = 0x11, // CTRL 鍵
vbKeyAlt = 18, // Alt 鍵 (鍵碼18)
vbKeyMenu = 0x12, // MENU 鍵
vbKeyPause = 0x13, // PAUSE 鍵
vbKeyCapital = 0x14, // CAPS LOCK 鍵
vbKeyEscape = 0x1B, // ESC 鍵
vbKeySpace = 0x20, // SPACEBAR 鍵
vbKeyPageUp = 0x21, // PAGE UP 鍵
vbKeyEnd = 0x23, // End 鍵
vbKeyHome = 0x24, // HOME 鍵
vbKeyLeft = 0x25, // LEFT ARROW 鍵
vbKeyUp = 0x26, // UP ARROW 鍵
vbKeyRight = 0x27, // RIGHT ARROW 鍵
vbKeyDown = 0x28, // DOWN ARROW 鍵
vbKeySelect = 0x29, // Select 鍵
vbKeyPrint = 0x2A, // PRINT SCREEN 鍵
vbKeyExecute = 0x2B, // EXECUTE 鍵
vbKeySnapshot = 0x2C, // SNAPSHOT 鍵
vbKeyDelete = 0x2E, // Delete 鍵
vbKeyHelp = 0x2F, // HELP 鍵
vbKeyNumlock = 0x90 // NUM LOCK 鍵
}
2. 轉換方法
遍歷字符串的每個字符:
先把每個字符都轉換爲大寫:str[i].ToString().ToUpper()
再給字符加上前綴"vbKey":string.Concat(“vbKey”, str[i].ToString().ToUpper())
然後根據每個生成的字符串(比如“a”變成了“vbKeyA”)到枚舉類型KeyValueEnum中查找對應鍵碼:(byte)Enum.Parse(typeof(KeyValueEnum), str)
鍵碼添加到集合kvList:kvList.Add
最後返回包含了字符串中每個字符的鍵碼的集合kvList。
C#中如何將字符串string轉換成枚舉類型 – typeof()以及Enum.Parse()的用法
*另:try…catch之類的請先加在這個方法外部,檢測待轉換字符串內容的那些還是別放進來吧。
/// <summary>
/// 字符串轉換爲鍵碼值的集合
/// </summary>
/// <param name="str">待轉換的字符串</param>
/// <returns>返回鍵碼集合</returns>
public ArrayList GetKeyValues(string str)
{
ArrayList kvList = new ArrayList();
for (int i = 0; i < str.Length; i++ )
{
kvList.Add((byte)Enum.Parse(
typeof(KeyValueEnum), string.Concat("vbKey", str[i].ToString().ToUpper())));
}
return kvList;
}
3. 測試
在WPF使用,直接彈窗口查看查找到的鍵碼。在Form或其他使用的話請自己修改彈窗語句。
// 待轉換的字符串
string str = "ab123t";
// 遍歷字符串的每個字符
for (int i = 0; i < str.Length; i++)
{
MessageBox.Show(str[i] + ": " + GetKeyValues(str)[i].ToString());
}
4. 模擬鍵盤按鍵輸入
即代替手動按鍵盤按鍵。
string userName = "user123";
for (int i = 0; i < userName.Length; i++)
{
InputOneKey((byte)GetKeyValues(userName)[i]);
}
/// <summary>
/// 輸入鍵盤上的一個字符,即按下一次鍵盤上的一個按鍵
/// </summary>
/// <param name="keyValue">用鍵碼錶示</param>
public void InputOneKey(byte keyValue) {
// 按下
keybd_event(keyValue, 0, 0, 0);
// 釋放
keybd_event(keyValue, 0, 2, 0);
}
模擬鍵盤輸入API:keybd_event:
/// <summary>
/// 模擬鍵盤輸入API:keybd_event
/// </summary>
/// <param name="bVk">虛擬鍵值</param>
/// <param name="bScan">一般爲0</param>
/// <param name="dwFlags">整數類型:按下0,釋放2</param>
/// <param name="dwExtraInfo">整數類型:一般情況下設成爲0</param>
[DllImport("user32.dll", EntryPoint = "keybd_event")]
public static extern void keybd_event(
byte bVk, //虛擬鍵值
byte bScan, // 一般爲0
int dwFlags, //這裏是整數類型 0 爲按下,2爲釋放
int dwExtraInfo //這裏是整數類型 一般情況下設成爲 0
);
5. 附:按鍵鍵碼錶
網上的不夠完整,這裏加了剩下的符號按鍵進去(WIN鍵之類)。
微軟在線文檔:Keycode constants
微軟在線文檔:Virtual-Key Codes
#region 鍵碼 bVk參數 常量定義
/// <summary>
/// 鼠標左鍵
/// </summary>
public const byte vbKeyLButton = 0x1; // 鼠標左鍵
/// <summary>
/// 鼠標右鍵
/// </summary>
public const byte vbKeyRButton = 0x2; // 鼠標右鍵
/// <summary>
/// CANCEL 鍵
/// </summary>
public const byte vbKeyCancel = 0x3; // CANCEL 鍵
/// <summary>
/// 鼠標中鍵
/// </summary>
public const byte vbKeyMButton = 0x4; // 鼠標中鍵
/// <summary>
/// BACKSPACE 鍵
/// </summary>
public const byte vbKeyBack = 0x8; // BACKSPACE 鍵
/// <summary>
/// TAB 鍵
/// </summary>
public const byte vbKeyTab = 0x9; // TAB 鍵
public const byte vbKeyClear = 0xC; // CLEAR 鍵
/// <summary>
/// ENTER 鍵
/// </summary>
public const byte vbKeyReturn = 0xD; // ENTER 鍵
public const byte vbKeyShift = 0x10; // SHIFT 鍵
public const byte vbKeyControl = 0x11; // CTRL 鍵
public const byte vbKeyAlt = 18; // Alt 鍵 (鍵碼18)
public const byte vbKeyMenu = 0x12; // MENU 鍵
public const byte vbKeyPause = 0x13; // PAUSE 鍵
/// <summary>
/// CAPS LOCK 鍵
/// </summary>
public const byte vbKeyCapital = 0x14; // CAPS LOCK 鍵
public const byte vbKeyEscape = 0x1B; // ESC 鍵
public const byte vbKeySpace = 0x20; // SPACEBAR 鍵
public const byte vbKeyPageUp = 0x21; // PAGE UP 鍵
public const byte vbKeyEnd = 0x23; // End 鍵
public const byte vbKeyHome = 0x24; // HOME 鍵
public const byte vbKeyLeft = 0x25; // LEFT ARROW 鍵
public const byte vbKeyUp = 0x26; // UP ARROW 鍵
public const byte vbKeyRight = 0x27; // RIGHT ARROW 鍵
public const byte vbKeyDown = 0x28; // DOWN ARROW 鍵
public const byte vbKeySelect = 0x29; // Select 鍵
public const byte vbKeyPrint = 0x2A; // PRINT SCREEN 鍵
public const byte vbKeyExecute = 0x2B; // EXECUTE 鍵
public const byte vbKeySnapshot = 0x2C; // SNAPSHOT 鍵
public const byte vbKeyDelete = 0x2E; // Delete 鍵
public const byte vbKeyHelp = 0x2F; // HELP 鍵
public const byte vbKeyNumlock = 0x90; // NUM LOCK 鍵
/// <summary>
/// 左邊的 WIN 鍵
/// </summary>
public const byte vbKeyLWin = 0x91; // 左邊的 WIN 鍵
/// <summary>
/// 右邊的 WIN 鍵
/// </summary>
public const byte vbKeyRWin = 0x91; // 右邊的 WIN 鍵
/// <summary>
/// 右Ctrl左邊鍵,點擊相當於點擊鼠標右鍵,會彈出快捷菜單
/// </summary>
public const byte vbKeyApps = 0x93; // 右Ctrl左邊鍵,點擊相當於點擊鼠標右鍵,會彈出快捷菜單
/// <summary>
/// 分號 ;
/// </summary>
public const byte vbKeySemicolon = 0xBA; // ;(分號)
/// <summary>
/// 等號/加號 鍵
/// </summary>
public const byte vbKeyEqual = 0xBB; // 等號/加號鍵
// 常用鍵:字母鍵 A-Z
public const byte vbKeyA = 65;
public const byte vbKeyB = 66;
public const byte vbKeyC = 67;
public const byte vbKeyD = 68;
public const byte vbKeyE = 69;
public const byte vbKeyF = 70;
public const byte vbKeyG = 71;
public const byte vbKeyH = 72;
public const byte vbKeyI = 73;
public const byte vbKeyJ = 74;
public const byte vbKeyK = 75;
public const byte vbKeyL = 76;
public const byte vbKeyM = 77;
public const byte vbKeyN = 78;
public const byte vbKeyO = 79;
public const byte vbKeyP = 80;
public const byte vbKeyQ = 81;
public const byte vbKeyR = 82;
public const byte vbKeyS = 83;
public const byte vbKeyT = 84;
public const byte vbKeyU = 85;
public const byte vbKeyV = 86;
public const byte vbKeyW = 87;
public const byte vbKeyX = 88;
public const byte vbKeyY = 89;
public const byte vbKeyZ = 90;
// 數字鍵盤:0 - 9
public const byte vbKey0 = 48; // 0 鍵
public const byte vbKey1 = 49; // 1 鍵
public const byte vbKey2 = 50; // 2 鍵
public const byte vbKey3 = 51; // 3 鍵
public const byte vbKey4 = 52; // 4 鍵
public const byte vbKey5 = 53; // 5 鍵
public const byte vbKey6 = 54; // 6 鍵
public const byte vbKey7 = 55; // 7 鍵
public const byte vbKey8 = 56; // 8 鍵
public const byte vbKey9 = 57; // 9 鍵
// 小鍵盤
public const byte vbKeyNumpad0 = 0x60; //0 鍵
public const byte vbKeyNumpad1 = 0x61; //1 鍵
public const byte vbKeyNumpad2 = 0x62; //2 鍵
public const byte vbKeyNumpad3 = 0x63; //3 鍵
public const byte vbKeyNumpad4 = 0x64; //4 鍵
public const byte vbKeyNumpad5 = 0x65; //5 鍵
public const byte vbKeyNumpad6 = 0x66; //6 鍵
public const byte vbKeyNumpad7 = 0x67; //7 鍵
public const byte vbKeyNumpad8 = 0x68; //8 鍵
public const byte vbKeyNumpad9 = 0x69; //9 鍵
/// <summary>
/// 小鍵盤,MULTIPLICATIONSIGN(*)鍵
/// </summary>
public const byte vbKeyMultiply = 0x6A; // MULTIPLICATIONSIGN(*)鍵
/// <summary>
/// 小鍵盤,PLUS SIGN(+) 鍵
/// </summary>
public const byte vbKeyAdd = 0x6B; // PLUS SIGN(+) 鍵
/// <summary>
/// 小鍵盤,ENTER 鍵
/// </summary>
public const byte vbKeySeparator = 0x6C; // ENTER 鍵
/// <summary>
/// 小鍵盤,MINUS SIGN(-) 鍵
/// </summary>
public const byte vbKeySubtract = 0x6D; // MINUS SIGN(-) 鍵
/// <summary>
/// 小鍵盤,DECIMAL POINT(.) 鍵
/// </summary>
public const byte vbKeyDecimal = 0x6E; // DECIMAL POINT(.) 鍵
/// <summary>
/// 小鍵盤,DIVISION SIGN(/) 鍵
/// </summary>
public const byte vbKeyDivide = 0x6F; // DIVISION SIGN(/) 鍵
/// <summary>
/// ,鍵(逗號)
/// </summary>
public const byte vbKeyComma = 0xBC; // ,鍵(逗號)
/// <summary>
/// -鍵(減號)
/// </summary>
public const byte vbKeyMinus = 0xBD; // -鍵(減號)
/// <summary>
/// .鍵(句號)
/// </summary>
public const byte vbKeyPeriod = 0xBE; // .鍵(句號)
/// <summary>
/// 斜槓/和問號? 鍵
/// </summary>
public const byte vbKeySlash = 0xBF; // 斜槓/和問號? 鍵
/// <summary>
/// `鍵(Esc下面)
/// </summary>
public const byte vbKeyTilde = 0xC0; // `鍵(Esc下面)
/// <summary>
/// [ 鍵
/// </summary>
public const byte vbKeyLeftBracket = 0xDB; // [ 鍵
/// <summary>
/// ] 鍵
/// </summary>
public const byte vbKeyRightBracket = 0xDD; // ] 鍵
/// <summary>
/// 反斜槓\ 鍵
/// </summary>
public const byte vbKeyBackSlash = 0xDC; // 反斜槓\鍵
/// <summary>
/// 單/雙引號 ' " 鍵
/// </summary>
public const byte vbKeyQuote = 0xDE; // 單/雙引號 ' " 鍵
//F1到F12按鍵
public const byte vbKeyF1 = 0x70; //F1 鍵
public const byte vbKeyF2 = 0x71; //F2 鍵
public const byte vbKeyF3 = 0x72; //F3 鍵
public const byte vbKeyF4 = 0x73; //F4 鍵
public const byte vbKeyF5 = 0x74; //F5 鍵
public const byte vbKeyF6 = 0x75; //F6 鍵
public const byte vbKeyF7 = 0x76; //F7 鍵
public const byte vbKeyF8 = 0x77; //F8 鍵
public const byte vbKeyF9 = 0x78; //F9 鍵
public const byte vbKeyF10 = 0x79; //F10 鍵
public const byte vbKeyF11 = 0x7A; //F11 鍵
public const byte vbKeyF12 = 0x7B; //F12 鍵
#endregion