using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace WQ
{
/// <summary>
/// 键盘
/// </summary>
public class Keyboard
{
// https://spidersharp.com/?p=137
// https://learn.microsoft.com/zh-cn/windows/win32/inputdev/virtual-key-codes
// https://learn.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-keybd_event?redirectedfrom=MSDN
/// <summary>
///
/// </summary>
/// <param name="bVk">虚拟键码。</param>
/// <param name="bScan"></param>
/// <param name="dwFlags"></param>
/// <param name="dwExtraInfo"></param>
[DllImport("user32.dll")]
private extern static void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
// https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getkeystate
/// <summary>
/// 获取虚拟键的状态。
/// </summary>
/// <param name="nVirtKey">虚拟键码。</param>
/// <returns>虚拟键的状态。</returns>
[DllImport("user32.dll")]
private extern static int GetKeyState(int nVirtKey);
/// <summary>
/// 全选,然后删除。
/// </summary>
public static void CtrlA_Delete()
{
keybd_event(17, 0, 0, 0); // 按下ctrl键
keybd_event(65, 0, 0, 0); // 按下A键
keybd_event(65, 0, 2, 0); // 松开A键
keybd_event(17, 0, 2, 0); // 松开ctrl键
keybd_event(46, 0, 0, 0); // delete
keybd_event(46, 0, 2, 0);
}
/// <summary>
/// 退格。
/// </summary>
/// <param name="count">按退格键的次数。</param>
public static void Backspace(byte count)
{
for (byte m = 0; m < count; m++)
{
keybd_event(8, 0, 0, 0); // backspace
keybd_event(8, 0, 2, 0);
}
}
/// <summary>
/// 删除。
/// </summary>
/// <param name="count">按删除键的次数。</param>
public static void Delete(byte count)
{
for (byte m = 0; m < count; m++)
{
keybd_event(46, 0, 0, 0); // delete
keybd_event(46, 0, 2, 0);
}
}
/// <summary>
/// 回车。
/// </summary>
public static void Enter()
{
keybd_event(13, 0, 0, 0); // enter
keybd_event(13, 0, 2, 0);
}
/// <summary>
/// 大写锁定。
/// </summary>
public static void Capslock()
{
if (GetKeyState(20) == 0) // 判断大写锁定键状态
{
keybd_event(20, 0, 0, 0); // capslock
keybd_event(20, 0, 2, 0);
}
}
/// <summary>
/// 取消大写锁定。
/// </summary>
public static void Capslock_Cancel()
{
if (GetKeyState(20) == 1) // 判断大写锁定键状态
{
keybd_event(20, 0, 0, 0); // capslock
keybd_event(20, 0, 2, 0);
}
}
/// <summary>
/// 输入。仅支持:英文字母、英文符号、数字。
/// </summary>
/// <param name="str">要输入的内容。</param>
public static void Input(string str)
{
for (uint m=0;m<str.Length;m++)
{
char ch = str.ToCharArray()[m];
Capslock(); // 大写锁定
if (97 <= ch && ch <= 122) // 小写字母:97≤ch≤122
Capslock_Cancel();
if (65 <= ch && ch <= 90) // 大写字母:65≤ch≤90
ch = char.ToLower(ch);
switch (ch)
{
case 'a':
keybd_event(65, 0, 0, 0);
keybd_event(65, 0, 2, 0);
break;
case 'b':
keybd_event(66, 0, 0, 0);
keybd_event(66, 0, 2, 0);
break;
case 'c':
keybd_event(67, 0, 0, 0);
keybd_event(67, 0, 2, 0);
break;
case 'd':
keybd_event(68, 0, 0, 0);
keybd_event(68, 0, 2, 0);
break;
case 'e':
keybd_event(69, 0, 0, 0);
keybd_event(69, 0, 2, 0);
break;
case 'f':
keybd_event(70, 0, 0, 0);
keybd_event(70, 0, 2, 0);
break;
case 'g':
keybd_event(71, 0, 0, 0);
keybd_event(71, 0, 2, 0);
break;
case 'h':
keybd_event(72, 0, 0, 0);
keybd_event(72, 0, 2, 0);
break;
case 'i':
keybd_event(73, 0, 0, 0);
keybd_event(73, 0, 2, 0);
break;
case 'j':
keybd_event(74, 0, 0, 0);
keybd_event(74, 0, 2, 0);
break;
case 'k':
keybd_event(75, 0, 0, 0);
keybd_event(75, 0, 2, 0);
break;
case 'l':
keybd_event(76, 0, 0, 0);
keybd_event(76, 0, 2, 0);
break;
case 'm':
keybd_event(77, 0, 0, 0);
keybd_event(77, 0, 2, 0);
break;
case 'n':
keybd_event(78, 0, 0, 0);
keybd_event(78, 0, 2, 0);
break;
case 'o':
keybd_event(79, 0, 0, 0);
keybd_event(79, 0, 2, 0);
break;
case 'p':
keybd_event(80, 0, 0, 0);
keybd_event(80, 0, 2, 0);
break;
case 'q':
keybd_event(81, 0, 0, 0);
keybd_event(81, 0, 2, 0);
break;
case 'r':
keybd_event(82, 0, 0, 0);
keybd_event(82, 0, 2, 0);
break;
case 's':
keybd_event(83, 0, 0, 0);
keybd_event(83, 0, 2, 0);
break;
case 't':
keybd_event(84, 0, 0, 0);
keybd_event(84, 0, 2, 0);
break;
case 'u':
keybd_event(85, 0, 0, 0);
keybd_event(85, 0, 2, 0);
break;
case 'v':
keybd_event(86, 0, 0, 0);
keybd_event(86, 0, 2, 0);
break;
case 'w':
keybd_event(87, 0, 0, 0);
keybd_event(87, 0, 2, 0);
break;
case 'x':
keybd_event(88, 0, 0, 0);
keybd_event(88, 0, 2, 0);
break;
case 'y':
keybd_event(89, 0, 0, 0);
keybd_event(89, 0, 2, 0);
break;
case 'z':
keybd_event(90, 0, 0, 0);
keybd_event(90, 0, 2, 0);
break;
case '0':
keybd_event(96, 0, 0, 0);
keybd_event(96, 0, 2, 0);
break;
case '1':
keybd_event(97, 0, 0, 0);
keybd_event(97, 0, 2, 0);
break;
case '2':
keybd_event(98, 0, 0, 0);
keybd_event(98, 0, 2, 0);
break;
case '3':
keybd_event(99, 0, 0, 0);
keybd_event(99, 0, 2, 0);
break;
case '4':
keybd_event(100, 0, 0, 0);
keybd_event(100, 0, 2, 0);
break;
case '5':
keybd_event(101, 0, 0, 0);
keybd_event(101, 0, 2, 0);
break;
case '6':
keybd_event(102, 0, 0, 0);
keybd_event(102, 0, 2, 0);
break;
case '7':
keybd_event(103, 0, 0, 0);
keybd_event(103, 0, 2, 0);
break;
case '8':
keybd_event(104, 0, 0, 0);
keybd_event(104, 0, 2, 0);
break;
case '9':
keybd_event(105, 0, 0, 0);
keybd_event(105, 0, 2, 0);
break;
case '*':
keybd_event(106, 0, 0, 0);
keybd_event(106, 0, 2, 0);
break;
case '+':
keybd_event(107, 0, 0, 0);
keybd_event(107, 0, 2, 0);
break;
case '-':
keybd_event(109, 0, 0, 0);
keybd_event(109, 0, 2, 0);
break;
case '.':
keybd_event(110, 0, 0, 0);
keybd_event(110, 0, 2, 0);
break;
case '/':
keybd_event(111, 0, 0, 0);
keybd_event(111, 0, 2, 0);
break;
case '=':
keybd_event(187, 0, 0, 0);
keybd_event(187, 0, 2, 0);
break;
case '~':
keybd_event(16, 0, 0, 0); // 按下shift键
keybd_event(192, 0, 0, 0); // 按下~键
keybd_event(192, 0, 2, 0); // 松开~键
keybd_event(16, 0, 2, 0); // 松开shift键
break;
case '!':
keybd_event(16, 0, 0, 0);
keybd_event(49, 0, 0, 0);
keybd_event(49, 0, 2, 0);
keybd_event(16, 0, 2, 0);
break;
case '@':
keybd_event(16, 0, 0, 0);
keybd_event(50, 0, 0, 0);
keybd_event(50, 0, 2, 0);
keybd_event(16, 0, 2, 0);
break;
case '#':
keybd_event(16, 0, 0, 0);
keybd_event(51, 0, 0, 0);
keybd_event(51, 0, 2, 0);
keybd_event(16, 0, 2, 0);
break;
case '$':
keybd_event(16, 0, 0, 0);
keybd_event(52, 0, 0, 0);
keybd_event(52, 0, 2, 0);
keybd_event(16, 0, 2, 0);
break;
case '%':
keybd_event(16, 0, 0, 0);
keybd_event(53, 0, 0, 0);
keybd_event(53, 0, 2, 0);
keybd_event(16, 0, 2, 0);
break;
case '^':
keybd_event(16, 0, 0, 0);
keybd_event(54, 0, 0, 0);
keybd_event(54, 0, 2, 0);
keybd_event(16, 0, 2, 0);
break;
case '&':
keybd_event(16, 0, 0, 0);
keybd_event(55, 0, 0, 0);
keybd_event(55, 0, 2, 0);
keybd_event(16, 0, 2, 0);
break;
case '(':
keybd_event(16, 0, 0, 0);
keybd_event(57, 0, 0, 0);
keybd_event(57, 0, 2, 0);
keybd_event(16, 0, 2, 0);
break;
case ')':
keybd_event(16, 0, 0, 0);
keybd_event(48, 0, 0, 0);
keybd_event(48, 0, 2, 0);
keybd_event(16, 0, 2, 0);
break;
case '_':
keybd_event(16, 0, 0, 0);
keybd_event(189, 0, 0, 0);
keybd_event(189, 0, 2, 0);
keybd_event(16, 0, 2, 0);
break;
case '[':
keybd_event(219, 0, 0, 0);
keybd_event(219, 0, 2, 0);
break;
case ']':
keybd_event(221, 0, 0, 0);
keybd_event(221, 0, 2, 0);
break;
case '\\':
keybd_event(220, 0, 0, 0);
keybd_event(220, 0, 2, 0);
break;
case '{':
keybd_event(16, 0, 0, 0);
keybd_event(219, 0, 0, 0);
keybd_event(219, 0, 2, 0);
keybd_event(16, 0, 2, 0);
break;
case '}':
keybd_event(16, 0, 0, 0);
keybd_event(221, 0, 0, 0);
keybd_event(221, 0, 2, 0);
keybd_event(16, 0, 2, 0);
break;
case '|':
keybd_event(16, 0, 0, 0);
keybd_event(220, 0, 0, 0);
keybd_event(220, 0, 2, 0);
keybd_event(16, 0, 2, 0);
break;
case ';':
keybd_event(186, 0, 0, 0);
keybd_event(186, 0, 2, 0);
break;
case '\'':
keybd_event(222, 0, 0, 0);
keybd_event(222, 0, 2, 0);
break;
case ':':
keybd_event(16, 0, 0, 0);
keybd_event(186, 0, 0, 0);
keybd_event(186, 0, 2, 0);
keybd_event(16, 0, 2, 0);
break;
case '"':
keybd_event(16, 0, 0, 0);
keybd_event(222, 0, 0, 0);
keybd_event(222, 0, 2, 0);
keybd_event(16, 0, 2, 0);
break;
case ',':
keybd_event(188, 0, 0, 0);
keybd_event(188, 0, 2, 0);
break;
case '<':
keybd_event(16, 0, 0, 0);
keybd_event(188, 0, 0, 0);
keybd_event(188, 0, 2, 0);
keybd_event(16, 0, 2, 0);
break;
case '>':
keybd_event(16, 0, 0, 0);
keybd_event(190, 0, 0, 0);
keybd_event(190, 0, 2, 0);
keybd_event(16, 0, 2, 0);
break;
case '?':
keybd_event(16, 0, 0, 0);
keybd_event(191, 0, 0, 0);
keybd_event(191, 0, 2, 0);
keybd_event(16, 0, 2, 0);
break;
}
}
}
}
}
C#键盘控制
最新推荐文章于 2024-07-25 22:54:09 发布