weixin_46316659 2024-09-26 22:36 采纳率: 0%
浏览 0

写的一个小代码,是输出到微信的,输出的是乱码,但是在别人电脑上正常输出

img

img


#include <Windows.h>
#include <string>
#include <locale>
#include <iostream>
#include <codecvt>
#include <cmath>   
#include <stdlib.h>
#include <time.h>
using namespace std;

// 全局变量,用于存储窗口句柄
HWND hwnd = NULL;

// 初始化窗口句柄
void initializeWindow(const string& windowTitle) {
    hwnd = FindWindowA(NULL, windowTitle.c_str());
    if (hwnd == NULL) {
        MessageBoxA(NULL, "未找到指定窗口", "错误", MB_ICONERROR);
    }
}

// 模拟 Ctrl + Enter 发送换行
void sendCtrlEnter() {
    // 模拟按下 Ctrl 键
    keybd_event(VK_CONTROL, 0, 0, 0);
    
    // 模拟按下 Enter 键
    keybd_event(VK_RETURN, 0, 0, 0);

    // 模拟释放 Enter 键
    keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);

    // 模拟释放 Ctrl 键
    keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
}

// 发送字符串到全局变量指定的窗口
void sendText(const string& text) {

    if (hwnd == NULL) {
        MessageBoxA(NULL, "窗口句柄无效", "错误", MB_ICONERROR);
        return;
    }
        
    wstring_convert<codecvt_utf8_utf16<wchar_t>> converter;
    wstring wtext = converter.from_bytes(text);
    
    // 确保窗口在前台
    SetForegroundWindow(hwnd);
    SetFocus(hwnd);

    // 确保窗口处理时间
    Sleep(500); // 500毫秒

    // 发送每个字符
    for (wchar_t ch : wtext) {
        if (ch == L'\n') {
            // 模拟 Ctrl + Enter 换行
            sendCtrlEnter();
        } else {
            // 发送普通字符
            SendMessageW(hwnd, WM_CHAR, ch, 0);
        }
        Sleep(50); // 延迟,确保字符被处理
    }

    // 模拟按下回车键
    SendMessage(hwnd, WM_KEYDOWN, VK_RETURN, 0);
    SendMessage(hwnd, WM_KEYUP, VK_RETURN, 0);
}

int main() 
{
    srand(static_cast<unsigned int>(time(0)));

    char let1 = 'A' + rand() % 26;
    char let2 = 'A' + rand() % 26;

    int jueduizhi = std::abs(static_cast<int>(let1) - static_cast<int>(let2));

    initializeWindow("haha");
    
    string coki = "第一个随机字母为:" + string(1, let1) + " 第二个随机字母为: " + string(1, let2) + "\n两个随机的字母ASCII码的差值为: " + to_string(jueduizhi);
    
    cout<<coki<<endl;
    
    sendText(coki);
    
    return 0;
}

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-26 22:37
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    根据你提供的代码和描述,看起来你在一个特定的电脑上运行这段代码时遇到了乱码的问题,而在其他电脑上运行则没有问题。这个问题可能由以下几个原因引起:

    1. 编码问题:你的代码在处理字符串时使用了特定的编码(如UTF-8)。如果目标系统的默认编码不是UTF-8,可能会出现乱码。确保目标系统的编码设置与你的代码一致。
    2. 字符集问题:你使用了非ASCII字符,如果这些字符在你的系统上是有效的但在另一台电脑上不被识别,会导致乱码。检查目标系统是否支持这些字符。
    3. 操作系统或库的差异:不同的操作系统或库版本可能会导致行为差异。确保你的代码与目标系统的库和API兼容。
    4. 随机性问题:你的代码中使用了随机数生成器。虽然这可能是导致乱码的一个因素,但通常这种随机性不会导致乱码,除非它与特定的系统特性产生了冲突。

    针对这个问题,你可以尝试以下解决方案:

    • 检查系统编码设置:确保你的代码和系统使用相同的编码。
    • 检查目标系统的兼容性:确保目标系统支持你使用的所有字符和API。
    • 简化代码:尝试简化你的代码,特别是与发送文本和窗口操作相关的部分,看是否可以解决问题。
    • 查看详细的错误消息:调试时查看控制台输出的任何错误消息,这可能会提供有关问题的线索。
    • 使用跨平台的库或工具:考虑使用跨平台的库或工具来确保代码在所有系统上都能正确运行。

    由于你没有提供关于目标系统的详细信息(如操作系统版本、使用的库版本等),因此很难确定确切的问题所在。如果可能的话,提供更多关于目标系统的信息将有助于更准确地诊断问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月26日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?