C#模拟键盘事件

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        [DllImport("USER32.DLL")]
        public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);  //导入寻找windows窗体的方法
        [DllImport("USER32.DLL")]
        public static extern bool SetForegroundWindow(IntPtr hWnd);  //导入为windows窗体设置焦点的方法
        [DllImport("USER32.DLL")]
        public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);  //导入模拟键盘的方法


        private void button1_Click(object sender, EventArgs e)
        {
            IntPtr calculatorHandle = FindWindow(null, "aaa.txt - 记事本");
            //判断是否找到了该窗体
            if (calculatorHandle == IntPtr.Zero)
            {
                MessageBox.Show("Calculator is not running.");
                return;
            }
            Clipboard.SetText("第三方");

            SetForegroundWindow(calculatorHandle);          
            keybd_event(0x11, 0, 0, 0);
            keybd_event(86, 0, 0, 0);
            keybd_event(0x11, 0, 2, 0);
            keybd_event(86, 0, 2, 0);
        }
    }

 

keybd_event方法的第一个参数值有:(例如:keybd_event(0x11, 0, 0, 0)是CTRL 键 按下  keybd_event(0x11, 0, 2, 0)是CTRL 键 松开)

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 键  
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 键  
   
vbKeyA 65 A 键  
vbKeyB 66 B 键  
vbKeyC 67 C 键  
vbKeyD 68 D 键  
vbKeyE 69 E 键  
vbKeyF 70 F 键  
vbKeyG 71 G 键  
vbKeyH 72 H 键  
vbKeyI 73 I 键  
vbKeyJ 74 J 键  
vbKeyK 75 K 键  
vbKeyL 76 L 键  
vbKeyM 77 M 键  
vbKeyN 78 N 键  
vbKeyO 79 O 键  
vbKeyP 80 P 键  
vbKeyQ 81 Q 键  
vbKeyR 82 R 键  
vbKeyS 83 S 键  
vbKeyT 84 T 键  
vbKeyU 85 U 键  
vbKeyV 86 V 键  
vbKeyW 87 W 键  
vbKeyX 88 X 键  
vbKeyY 89 Y 键  
vbKeyZ 90 Z 键  
   
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 (/) 键  
   
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 键 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
模拟鼠标键盘 注意:不支持Windows 8 / 8.1。 Interceptor是Windows键盘驱动程序的包装器(包装http://oblita.com/Interception)。 使用驱动程序,Interceptor可以模拟按键鼠标点击... 使用DirectX的游戏,通常不接受使用SendInput()的击键 Windows的受保护区域,如Windows登录屏幕或UAC调暗屏幕 任何应用程序 因为驱动程序模拟击键和鼠标单击,所以目标窗口必须处于活动状态(即,在发送击键和鼠标点击时,不能在另一个窗口上执行多任务)。 如何使用 下载并构建此项目并在项目中引用其DLL。 下载'interception.dll',这是一个由驱动程序作者编写的独立库。将它放在与可执行文件相同的目录中。这是必需的。 从作者的网页下载并安装“install-interception.exe”。安装后重新启动计算机。 在您的代码中,要加载驱动程序,请调用(阅读下面的代码注释;您必须设过滤模式以捕获按键事件或发送按键操作!): Input input = new Input(); // Be sure to set your keyboard filter to be able to capture key presses and simulate key presses // KeyboardFilterMode.All captures all events; 'Down' only captures presses for non-special keys; 'Up' only captures releases for non-special keys; 'E0' and 'E1' capture presses/releases for special keys input.KeyboardFilterMode = KeyboardFilterMode.All; // You can set a MouseFilterMode as well, but you don't need to set a MouseFilterMode to simulate mouse clicks // Finally, load the driver input.Load(); 做你的东西。 input.MoveMouseTo(5, 5); // Please note this doesn't use the driver to move the mouse; it uses System.Windows.Forms.Cursor.Position input.MoveMouseBy(25, 25); // Same as above ^ input.SendLeftClick(); input.KeyDelay = 1; // See below for explanation; not necessary in non-game apps input.SendKeys(Keys.Enter); // Presses the ENTER key down and then up (this constitutes a key press) // Or you can do the same thing above using these two lines of code input.SendKeys(Keys.Enter, KeyState.Down); Thread.Sleep(1); // For use in games, be sure to sleep the thread so the game can capture all events. A lagging game cannot process input quickly, and you so you may have to adjust this to as much as 40 millisecond delay. Outside of a game, a delay of even 0 milliseconds can work (instant key presses). input.SendKeys(Keys.Enter, KeyState.Up); input.SendText("hello, I am typing!"); /* All these following characters / numbers / symbols work */ input.SendText("abcdefghijklmnopqrstuvwxyz"); input.SendText("1234567890"); input.SendText("!@#$%^&*()"); input.SendText("[]\\;',./"); input.SendText("{}|:\"?"); // And finally input.Unload(); 笔记: BadImageFormatException如果您没有为解决方案中的所有项目(包括此项目)使用正确的体系结构(x86或x64),则可能会获得。因此,您可能必须下载此项目的源代码才能将其重建为正确的体系结构。这应该很简单,构建过程应该没有错误。 您必须从http://oblita.com/Interception下载'interception.dll' 。 如果你已经完成了以上所有操作(正确安装了拦截驱动程序,将interception.dll放在你的项目文件夹中),你仍然无法发送击键: 驱动程序有一个限制,即它不能在不接收至少一次击键的情况下发送击键。这是因为驱动程序不知道键盘是哪个设备ID,因此它必须等待接收击键以从击键中推断出设备ID。 总之,在发送击键之前,请始终按键盘一次。点按任意键。然后你可以发送击键。这不适用于接收击键,因为通过接收击键,您当然已经按下了一个键。 MoveMouseTo()和MoveMouseBy()完全忽略键盘驱动程序。它使用System.Windows.Forms.Position来设和获取游标的位(它为下面的各个函数调用标准的Win32 API)。 原因是,在探索键盘驱动程序的鼠标移动功能时,我注意到它没有按像素单位移动光标,而是似乎通过加速移动光标。当我想将光标移动到某个位时,这会不断产生不一致的值。因为Win32游标设API通常不被游戏等阻止,所以我发现只需调用这些标准API即可,而无需使用驱动程序。请注意,这仅适用于设光标位。拦截光标仍然可以正常工作。例如,您可以使用Interceptor反转鼠标的x和y轴。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值