介绍:

  该程序本意是为了在彩六里打中文用的,现整理出来供大家复制粘贴。(源程序已开源至GitHub - 彩六中文输入

  主要使用SendInput函数,与c语言中用法一致。(部分代码来自网络)

命名空间部分

using static System.Threading.Thread;
using System.Runtime.InteropServices;

结构体和函数声明部分

[StructLayout(LayoutKind.Explicit)]
public struct INPUT
{
[FieldOffset(0)]
public int type;
[FieldOffset(4)]
public KEYBDINPUT ki;
[FieldOffset(4)]
public MOUSEINPUT mi;
[FieldOffset(4)]
public HARDWAREINPUT hi;
}
public struct MOUSEINPUT
{
public int dx;
public int dy;
public int mouseData;
public int dwFlags;
public int time;
public IntPtr dwExtraInfo;
}
public struct KEYBDINPUT
{
public short wVk;
public short wScan;
public int dwFlags;
public int time;
public IntPtr dwExtraInfo;
}
public struct HARDWAREINPUT
{
public int uMsg;
public short wParamL;
public short wParamH;
} [DllImport("user32")]
public static extern uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize);

自定义函数封装部分

public void SimulateInputString(char c)
{
INPUT[] input = new INPUT[2]; input[0].type = 1;
input[0].ki.wVk = 0;//dwFlags 为KEYEVENTF_UNICODE 即4时,wVk必须为0
input[0].ki.wScan = (short)c;
input[0].ki.dwFlags = 4;//输入UNICODE字符
input[0].ki.time = 0;
input[0].ki.dwExtraInfo = IntPtr.Zero;
input[1].type = 1;
input[1].ki.wVk = 0;
input[1].ki.wScan = (short)c;
input[1].ki.dwFlags = 6;
input[1].ki.time = 0;
input[1].ki.dwExtraInfo = IntPtr.Zero;
SendInput(2u, input, Marshal.SizeOf((object)default(INPUT))); } public void SimulateInputKey(int key)
{
INPUT[] input = new INPUT[1]; input[0].type = 1;//模拟键盘
input[0].ki.wVk = (short)key;
input[0].ki.dwFlags = 0;//按下
SendInput(1u, input, Marshal.SizeOf((object)default(INPUT)));
Sleep(50); input[0].type = 1;//模拟键盘
input[0].ki.wVk = (short)key;
input[0].ki.dwFlags = 2;//抬起
SendInput(1u, input, Marshal.SizeOf((object)default(INPUT)));
Sleep(50);
}

说明:

SimulateInputString为发送单个字符文本;

SimulateInputKey为模拟按键按下和抬起,参数key为虚拟键码;
关于键码的列表,可以查看微软文档:https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes

c# SendInput模拟输入字符和按键的更多相关文章

  1. js之按键总结

    js 实现键盘记录 兼容FireFox和IE 2009-01-07 11:43 作者:羽殇仁 转载请注明出处,谢谢. 本篇文章是我的第一百篇blog文章,恭喜一下! 这两天突然想弄弄js的键盘记录,所 ...

  2. 关于Java按键事件KeyEvent重点几步

    按键事件可以利用键盘来控制和执行一些动作,或者从键盘上获取输入,只要按下,释放一个键或者在一个组件上敲击,就会触发按键事件.KeyEvent对象描述事件的特性(按下,放开,或者敲击一个键)和对应的值. ...

  3. Java按键事件KeyEvent

    按键事件可以利用键盘来控制和执行一些动作,或者从键盘上获取输入,只要按下,释放一个键或者在一个组件上敲击,就会触发按键事件.KeyEvent对象描述事件的特性(按下,放开,或者敲击一个键)和对应的值. ...

  4. Vue学习笔记十一:按键修饰符和自定义指令(钩子函数)

    目录 padStart:补位 按键修饰符 Vue提供的按键修饰符 自定义按键修饰符 自定义指令 自定义指令的使用 钩子函数 钩子函数参数 使用钩子函数的bingding参数 私有自定义指令 钩子函数的 ...

  5. PyQt学习随笔:PyQt中捕获键盘事件后获取具体按键值的方法

    在PyQt中,如果要捕获键盘事件的具体按键,可以通过重写组件对象的keyPressEvent方法或event方法来捕获具体的按键,推荐使用keyPressEvent方法,因为event方法是一个通用事 ...

  6. C# 模拟键盘操作--SendKey(),SendKeys()

    模拟键盘输入就是使用以下2个语法实现的.SendKeys.Send(string keys);  //模拟汉字(文本)输入SendKeys.SendWait(string keys); //模拟按键输 ...

  7. C# 模拟键盘操作SendKey(),SendKeys()

    模拟键盘输入就是使用以下2个语法实现的. SendKeys.Send(string keys);  //模拟汉字(文本)输入SendKeys.SendWait(string keys); //模拟按键 ...

  8. adb常用命令(golang版)及输入中文

    package main import ( "crypto/md5" "fmt" "image/png" "io/ioutil&q ...

  9. 使用C#模拟键盘输入、鼠标移动和点击、设置光标位置及控制应用程序的显示

    1.模拟键盘输入(SendKeys) 功能:将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样. 语法:SendKeys.Send(string keys);SendKeys.SendWa ...

随机推荐

  1. Tensorflow安装教程(Anaconda)

    写在最前: 在安装过程中遇到很多坑,一开始自己从官网下载了Python3.6.3或者Python3.6.5或者Python3.7.1等多个版本,然后直接pip install tensorflow或者 ...

  2. 微信小程序 MinUI 组件库系列之 price 价格组件

    MinUI 是基于微信小程序自定义组件特性开发而成的一套简洁.易用.高效的组件库,适用场景广,覆盖小程序原生框架.小程序组件化框架等,并且提供了高效的命令行工具.MinUI 组件库包含了很多基础的组件 ...

  3. 理解Android Framework

    一 . Android 系统架构 Android是一个包括操作系统,中间件和关键应用的移动设备软件堆: 作为一个开源的软件,android包含了众多的功能和庞大的代码,他的代码基于linux. 1. ...

  4. 93. 复原 IP 地址

    做题思路or感想 这种字符串切割的问题都可以用回溯法来解决 递归三部曲: 递归参数 因为要切割字符串,所以要用一个startIndex来控制子串的开头位置,即是会切割出一个范围是[startIndex ...

  5. Coursera 学习笔记|Machine Learning by Standford University - 吴恩达

    / 20220404 Week 1 - 2 / Chapter 1 - Introduction 1.1 Definition Arthur Samuel The field of study tha ...

  6. pip——重新安装

    原因 没有用管理员的权限安装.导致失败. 并且pip还被卸载了. 使用环境 win10 重新安装pip python -m ensurepip 更新pip 管理员打开cmd python -m pip ...

  7. JavaWeb知识梳理(可收藏)

    **JavaWeb相关知识 ** 1.Servlet 1.1 Status Code(Http状态码) 1.1xx 请求信息 Http状态码 Http Status Code Http状态码含义中文说 ...

  8. 小白文-Git-版本控制

    推荐阅读 Git学习-图文并茂还有游戏玩! Git版本控制 注意:开始学习之前,确保自己的网络可以畅通的连接Github:https://github.com,这个是一个国外网站,连起来特别卡,至于用 ...

  9. Cookie与Session、CBV添加装饰器

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  10. 如何满足一个前端对 Mock 的全部幻想

    ​ 前端的痛苦 作为前端,最痛苦的是什么时候? 每个迭代,需求文档跟设计稿都出来了,静态页面唰唰两天就做完了.可是做前端又不是简单地把后端吐出来的数据放到页面上就完了,还有各种前端处理逻辑啊. 后端接 ...