You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SendMessage()向Chrome/Edge浏览器发送Emoji表情?

解决向Chrome/Edge发送Emoji的问题

问题根源

你用char类型存储的是UTF-8编码的字符串,每个Emoji(比如😘)占3-4个字节,循环按单字节发送WM_UNICHAR时,相当于把每个字节当作独立字符传递,自然无法正确解析为Emoji。另外WM_UNICHAR需要Unicode(UTF-16)字符,而多字节转UTF-16的过程被你跳过了。

修复步骤

  1. 改用宽字符存储字符串
    Windows中Unicode接口使用UTF-16编码,用wchar_t类型才能正确保存Emoji的代码单元(包括辅助平面Emoji的代理对):

    wchar_t buffer[256];
    _snwprintf(buffer, _countof(buffer), L"\U00002764\U00002764 ++ \U0001F618\U0001F618");
    
  2. 正确发送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);
    }
    
  3. 确认目标窗口句柄
    确保hwnd是Chrome/Edge中实际接收输入的控件句柄(比如地址栏、网页输入框),而不是浏览器主窗口——主窗口不会处理输入消息。

额外说明

  • 辅助平面的Emoji(比如U+1F618)在UTF-16中会被拆分为两个代理对字符,循环发送这两个字符就能正确显示Emoji。
  • PostMessageW也可以用,但要注意消息队列的顺序问题,SendMessageW是同步发送,更适合确保输入顺序正确。

内容的提问来源于stack exchange,提问作者Erz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 10:37:10