c++ - 将 unicode 字符串复制到剪贴板不起作用

标签 c++ winapi unicode clipboard ollydbg

我不知道为什么这段代码不能正常工作:

#define UNICODE

#include <iostream>
#include <sstream>
#include <windows.h>

void main(void)
{
    wchar_t* strData = L"CreateWindowExA";

    MessageBox(NULL, strData, L"Warning", MB_OK);

    if (OpenClipboard(0)) {
        EmptyClipboard();
        HGLOBAL hClipboardData;
        hClipboardData = GlobalAlloc(GMEM_DDESHARE,
                                     wcslen(strData) + 1);
        char* pchData;
        pchData = (char*)GlobalLock(hClipboardData);
        strcpy(pchData, LPCSTR(strData));
        GlobalUnlock(hClipboardData);
        SetClipboardData(CF_TEXT, hClipboardData);
        CloseClipboard();
    }

    MessageBox(NULL, L"Copied to Clipboard", L"Title", MB_OK);
}

最佳答案

更改此部分:

hClipboardData = GlobalAlloc(GMEM_DDESHARE, sizeof(WCHAR) * (wcslen(strData) + 1));

WCHAR* pchData;
pchData = (WCHAR*)GlobalLock(hClipboardData);
wcscpy(pchData, strData);
GlobalUnlock(hClipboardData);
SetClipboardData(CF_UNICODETEXT, hClipboardData);

WCHAR 分配 2* 个字节。使用 WCHAR 而不是 char。代替 strcpy,使用 wcscpy。使用 CF_UNICODETEXT 而不是 CF_TEXT

关于c++ - 将 unicode 字符串复制到剪贴板不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40664890/

相关文章:

c++ - 如何正确链接到CMake中的库(使用Boehm GC)?

unicode - 不同语言的最小 Unicode 编码?

python - 解释从mp3文件对象中读取的unicode数据

c++ - 如何捕捉键盘和鼠标事件?

c# - 模拟内存泄漏

c - 指定 RIDEV_NOLEGACY 时,Win32 原始输入会阻止输入区域设置切换

unicode - UCS-2 中最长的 UTF-8 编码字符(以字节为单位)是多少?

c++ - static_cast<std::u16string> 的 GCC 问题

c++ - 同时拥有复制构​​造函数和析构函数会导致段错误,但只有一个或另一个不会

AWS lambda 中的 C++ 错误?