using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; namespace POSV.Utils { public class InputSimulatorUtils { const uint KEYEVENTF_EXTENDEDKEY = 0x1; const uint KEYEVENTF_KEYUP = 0x2; [DllImport("user32.dll")] static extern short GetKeyState(int nVirtKey); [DllImport("user32.dll")] static extern void keybd_event(byte bVk , byte bScan , uint dwFlags , uint dwExtraInfo); public enum VirtualKeys : byte { VK_NUMLOCK = 0x90, //数字锁定键 VK_SCROLL = 0x91, //滚动锁定 VK_CAPITAL = 0x14, //大小写锁定 VK_A = 62 } public static bool GetState(VirtualKeys Key) { return (GetKeyState((int)Key) == 1); } public static void SetState(VirtualKeys Key , bool State) { if (State != GetState(Key)) { keybd_event((byte)Key , 0x45 , KEYEVENTF_EXTENDEDKEY | 0 , 0); keybd_event((byte)Key , 0x45 , KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP , 0); } } //开启键盘大写 SetState(VirtualKeys.VK_CAPITAL, true); //关闭键盘大写 SetState(VirtualKeys.VK_CAPITAL, false); //开启键盘滚动锁定 SetState(VirtualKeys.VK_SCROLL, true); //关闭键盘滚动锁定 SetState(VirtualKeys.VK_SCROLL, false); //开启键盘数字锁定键 SetState(VirtualKeys.VK_NUMLOCK, true); //关闭键盘数字锁定键 SetState(VirtualKeys.VK_NUMLOCK, false); public static void SendKey(VirtualKeyCode key) { keybd_event((byte)key , 0 , KEYEVENTF_EXTENDEDKEY | 0 , 0);//按下 keybd_event((byte)key , 0 , KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP , 0);//释放 } public const byte vbKeyControl = 0x11; // CTRL 键 public const byte vbKeyShift = 0x10; // SHIFT 键 public static void SendCtrlShift() { //模拟按下ctrl键 keybd_event(vbKeyControl , 0 , 0 , 0); //模拟按下shift键 keybd_event(vbKeyShift , 0 , 0 , 0); //松开按键ctrl keybd_event(vbKeyControl , 0 , 2 , 0); //松开按键shift keybd_event(vbKeyShift , 0 , 2 , 0); } public static void SendClear(int length = 0) { if (length != 0) { for (int i = 0; i < length; i++) { //模拟按下back键 keybd_event((byte)VirtualKeyCode.BACK, 0, 0, 0); //松开按键back键 keybd_event((byte)VirtualKeyCode.BACK, 0, 2, 0); } } else { //模拟按下ctrl键 keybd_event(vbKeyControl, 0, 0, 0); //模拟按下A键 keybd_event((byte)VirtualKeyCode.VK_A, 0, 0, 0); //松开按键ctrl keybd_event(vbKeyControl, 0, 2, 0); //松开按键A keybd_event((byte)VirtualKeyCode.VK_A, 0, 2, 0); //模拟按下back键 keybd_event((byte)VirtualKeyCode.BACK, 0, 0, 0); //松开按键back键 keybd_event((byte)VirtualKeyCode.BACK, 0, 2, 0); } } } }