如何用SendMessage()向Chrome/Edge浏览器发送Emoji表情?
解决向Chrome/Edge发送Emoji的问题
问题根源
你用char类型存储的是UTF-8编码的字符串,每个Emoji(比如😘)占3-4个字节,循环按单字节发送WM_UNICHAR时,相当于把每个字节当作独立字符传递,自然无法正确解析为Emoji。另外WM_UNICHAR需要Unicode(UTF-16)字符,而多字节转UTF-16的过程被你跳过了。
修复步骤
改用宽字符存储字符串
Windows中Unicode接口使用UTF-16编码,用wchar_t类型才能正确保存Emoji的代码单元(包括辅助平面Emoji的代理对):wchar_t buffer[256]; _snwprintf(buffer, _countof(buffer), L"\U00002764\U00002764 ++ \U0001F618\U0001F618");正确发送Unicode字符
使用SendMessageW(宽字符版本)发送WM_UNICHAR或WM_CHAR,遍历宽字符串的每个wchar_t单元:for (int i = 0; i < wcslen(buffer); i++) { // 发送WM_UNICHAR,WPARAM为UTF-16字符,LPARAM设为1表示发送字符 SendMessageW(hwnd, WM_UNICHAR, (WPARAM)buffer[i], (LPARAM)1); // 也可以用WM_CHAR:SendMessageW(hwnd, WM_CHAR, (WPARAM)buffer[i], 0); }确认目标窗口句柄
确保hwnd是Chrome/Edge中实际接收输入的控件句柄(比如地址栏、网页输入框),而不是浏览器主窗口——主窗口不会处理输入消息。
额外说明
- 辅助平面的Emoji(比如U+1F618)在UTF-16中会被拆分为两个代理对字符,循环发送这两个字符就能正确显示Emoji。
PostMessageW也可以用,但要注意消息队列的顺序问题,SendMessageW是同步发送,更适合确保输入顺序正确。
内容的提问来源于stack exchange,提问作者Erz
相关产品推荐
相关产品推荐

