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相关推荐

  1. 游戏修改器制作教程二:键盘鼠标钩子

    本教程面向有C\C++基础的人,最好还要懂一些Windows编程知识 代码一律用Visual Studio 2013编译,如果你还在用VC6请趁早丢掉它... 写这个教程只是为了让玩家更好地体验所爱的 ...

  2. keybd_event 被 SendInput 替代

    keybd_event 函数功能:该函数合成一次击键事件.系统可使用这种合成的击键事件来产生WM_KEYUP或WM_KEYDOWN消息,键盘驱动程序的中断处理程序调用keybd_event函数.在Wi ...

  3. keybd_event、SendInput笔记

    void keybd_event(BYTE bVk, BYTE bScan, DWORD dwFlags, ULONG_PTR dwExtraInfo); bVk:虚拟键码 bScan:键的硬件扫描码 ...

  4. 玩转keybd_event

    模拟键盘平时不是很常用, 但是当调用某些快捷键执行某项功能时, 它真的是那么的方便呀.  你不信?  看看下面的实现, 你就会大呼: 为什么不早点告诉我?  呵呵,  原来没有blog呀,  都靠这些 ...

  5. keybd_event()使用方法

    keybd_event()使用方法 函数说明 函数功能:keybd_event函数模拟一次击键事件.系统可使用这种模拟的击键事件来产生WM_KEYUP或WM_KEYDOWN消息,键盘驱动程序的中断处理 ...

  6. 模拟键盘、鼠标 mouse_event keybd_event

    MSDN 讲解:http://msdn.microsoft.com/en-us/library/ms646304(v=vs.85).aspx 中文讲解:http://dev.firnow.com/co ...

  7. C#模拟PrtScn实现截屏预备知识--keybd_event使用方法

    Windows提供了一个模拟键盘API函数Keybd_event(),使用该函数可以相应的屏蔽键盘的动作.Keybd_event()函数能触发一个按键事件,也就是说会产生一个WM_KEYDOWN或WM ...

  8. keybd_event 使用方法

    Windows 提供了一个模拟键盘 API 函数 Keybd_event(),使用该函数可以相应的屏蔽键盘的动作.Keybd_event()函数能触发一个按键事件,也就是说会产生一个 WM_KEYDO ...

  9. C/C++使用keybd_event模拟键盘按键

    1 #include <stdio.h> 2 #include <Windows.h> 3 4 /* 5 设置键盘大小写状态 6 big:为TRUE则切换大写状态,否则切换小写 ...

最新文章

  1. 【ACM】杭电OJ 2020(排序)
  2. 3.4.2 停止等待协议
  3. svn update 报错,必须先cleanup,然后cleanup失败解决方法
  4. poj1961Period(next数组)
  5. 排队接水pascal程序
  6. pythontime模块计算时长_用python的time模块查看你出生多长时间了
  7. Java的五子棋实现,java开发面试笔试题
  8. Sharepoint 2010 解决DFWP - Unable to display this Web Part 的问题
  9. 基于阿里云上实现全站https
  10. string数组转换成int数组,数组转字符串,字符串转list,list集合转字符串,删除数组中为空的元素,list转数组 数组转list
  11. Jquery实战视频教程学习
  12. 安装labelImg(Ubuntu / Linux)
  13. 我的世界java凋零_我的世界:玩家还原Java版已“消失”的三个结构,造型让人难忘?...
  14. 找工作么?会坐牢的那种。
  15. 英语口语练习六十二之9种英语表达“后悔”
  16. 数模补充(4)灵敏度分析
  17. 黑马程序员-java-String
  18. 【每天一个Linux命令】09. Linux中chown的用法
  19. Python中计时,看这一篇就够了
  20. 网络云存储技术Windows server 2012 (项目十一 NAS服务器磁盘配额的配置与管理)

热门文章

  1. 《ASP.Net MVC5 框架揭密》学习笔记
  2. Docker进阶-容器监控cAdvisor+InfluxDB+Granfana
  3. win10被微软流氓更新后编译基于visual Studio的web项目报[ArgumentOutOfRangeException: 指定的参数已超出有效值的范围...
  4. Hadoop系统架构
  5. jquery json学习
  6. 将 GridView 中的内容导出到 Excel 中多个工作表(Sheet) 的方法
  7. 360不用卸,照样上你QQ
  8. cisco 《连接网络》实验wan综合实验_GNS3实验环境优化与安装
  9. SwiftUI之深入解析布局如何自定义AlignmentGuides
  10. 【数据结构与算法】之判断字符是否唯一