SendInput代替了keybd_event
SendInput比keybd_event要方便多了,可以支持发送中文。
#include <atlconv.h> #pragma comment(lib,"User32.lib")
#pragma comment(lib,"shlwapi.lib")void SendAscii(wchar_t data, BOOL shift)
{INPUT input[2];memset(input, 0, 2 * sizeof(INPUT));if (shift){input[0].type = INPUT_KEYBOARD;input[0].ki.wVk = VK_SHIFT;SendInput(1, input, sizeof(INPUT));}input[0].type = INPUT_KEYBOARD;input[0].ki.wVk = data;input[1].type = INPUT_KEYBOARD;input[1].ki.wVk = data;input[1].ki.dwFlags = KEYEVENTF_KEYUP;SendInput(2, input, sizeof(INPUT));if (shift){input[0].type = INPUT_KEYBOARD;input[0].ki.wVk = VK_SHIFT;input[0].ki.dwFlags = KEYEVENTF_KEYUP;SendInput(1, input, sizeof(INPUT)); }
}void SendUnicode(wchar_t data)
{INPUT input[2];memset(input, 0, 2 * sizeof(INPUT));input[0].type = INPUT_KEYBOARD;input[0].ki.wVk = 0;input[0].ki.wScan = data;input[0].ki.dwFlags = 0x4;//KEYEVENTF_UNICODE;input[1].type = INPUT_KEYBOARD;input[1].ki.wVk = 0;input[1].ki.wScan = data;input[1].ki.dwFlags = KEYEVENTF_KEYUP | 0x4;//KEYEVENTF_UNICODE;SendInput(2, input, sizeof(INPUT));
}//为方便使用,下面这个函数包装了前两个函数。
void SendKeys(TCHAR *strMsg)
{short vk;BOOL shift;USES_CONVERSION;wchar_t* data = T2W(strMsg);int len = wcslen(data);for(int i=0;i<len;i++){if (data[i]>=0 && data[i]<256) //ascii字符{vk = VkKeyScanW(data[i]);if (vk == -1){SendUnicode(data[i]);}else{if (vk < 0){vk = ~vk + 0x1;}shift = vk >> 8 & 0x1;if (GetKeyState(VK_CAPITAL) & 0x1){if (data[i]>='a' && data[i]<='z' || data[i]>='A' && data[i]<='Z'){shift = !shift;}}SendAscii(vk & 0xFF, shift);}}else //unicode字符{SendUnicode(data[i]);}}
}int _tmain(int argc, _TCHAR* argv[])
{Sleep(5000);SendKeys(L"Sysprogram 测试中文");return 0;
}
SendInput代替了keybd_event相关推荐
- 游戏修改器制作教程二:键盘鼠标钩子
本教程面向有C\C++基础的人,最好还要懂一些Windows编程知识 代码一律用Visual Studio 2013编译,如果你还在用VC6请趁早丢掉它... 写这个教程只是为了让玩家更好地体验所爱的 ...
- keybd_event 被 SendInput 替代
keybd_event 函数功能:该函数合成一次击键事件.系统可使用这种合成的击键事件来产生WM_KEYUP或WM_KEYDOWN消息,键盘驱动程序的中断处理程序调用keybd_event函数.在Wi ...
- keybd_event、SendInput笔记
void keybd_event(BYTE bVk, BYTE bScan, DWORD dwFlags, ULONG_PTR dwExtraInfo); bVk:虚拟键码 bScan:键的硬件扫描码 ...
- 玩转keybd_event
模拟键盘平时不是很常用, 但是当调用某些快捷键执行某项功能时, 它真的是那么的方便呀. 你不信? 看看下面的实现, 你就会大呼: 为什么不早点告诉我? 呵呵, 原来没有blog呀, 都靠这些 ...
- keybd_event()使用方法
keybd_event()使用方法 函数说明 函数功能:keybd_event函数模拟一次击键事件.系统可使用这种模拟的击键事件来产生WM_KEYUP或WM_KEYDOWN消息,键盘驱动程序的中断处理 ...
- 模拟键盘、鼠标 mouse_event keybd_event
MSDN 讲解:http://msdn.microsoft.com/en-us/library/ms646304(v=vs.85).aspx 中文讲解:http://dev.firnow.com/co ...
- C#模拟PrtScn实现截屏预备知识--keybd_event使用方法
Windows提供了一个模拟键盘API函数Keybd_event(),使用该函数可以相应的屏蔽键盘的动作.Keybd_event()函数能触发一个按键事件,也就是说会产生一个WM_KEYDOWN或WM ...
- keybd_event 使用方法
Windows 提供了一个模拟键盘 API 函数 Keybd_event(),使用该函数可以相应的屏蔽键盘的动作.Keybd_event()函数能触发一个按键事件,也就是说会产生一个 WM_KEYDO ...
- C/C++使用keybd_event模拟键盘按键
1 #include <stdio.h> 2 #include <Windows.h> 3 4 /* 5 设置键盘大小写状态 6 big:为TRUE则切换大写状态,否则切换小写 ...
最新文章
- 【ACM】杭电OJ 2020(排序)
- 3.4.2 停止等待协议
- svn update 报错,必须先cleanup,然后cleanup失败解决方法
- poj1961Period(next数组)
- 排队接水pascal程序
- pythontime模块计算时长_用python的time模块查看你出生多长时间了
- Java的五子棋实现,java开发面试笔试题
- Sharepoint 2010 解决DFWP - Unable to display this Web Part 的问题
- 基于阿里云上实现全站https
- string数组转换成int数组,数组转字符串,字符串转list,list集合转字符串,删除数组中为空的元素,list转数组 数组转list
- Jquery实战视频教程学习
- 安装labelImg(Ubuntu / Linux)
- 我的世界java凋零_我的世界:玩家还原Java版已“消失”的三个结构,造型让人难忘?...
- 找工作么?会坐牢的那种。
- 英语口语练习六十二之9种英语表达“后悔”
- 数模补充(4)灵敏度分析
- 黑马程序员-java-String
- 【每天一个Linux命令】09. Linux中chown的用法
- Python中计时,看这一篇就够了
- 网络云存储技术Windows server 2012 (项目十一 NAS服务器磁盘配额的配置与管理)
热门文章
- 《ASP.Net MVC5 框架揭密》学习笔记
- Docker进阶-容器监控cAdvisor+InfluxDB+Granfana
- win10被微软流氓更新后编译基于visual Studio的web项目报[ArgumentOutOfRangeException: 指定的参数已超出有效值的范围...
- Hadoop系统架构
- jquery json学习
- 将 GridView 中的内容导出到 Excel 中多个工作表(Sheet) 的方法
- 360不用卸,照样上你QQ
- cisco 《连接网络》实验wan综合实验_GNS3实验环境优化与安装
- SwiftUI之深入解析布局如何自定义AlignmentGuides
- 【数据结构与算法】之判断字符是否唯一