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

BPL*_*BPL 2 c++ unicode clipboard winapi 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);
}
Run Code Online (Sandbox Code Playgroud)

Jos*_*son 8

更改此部分:

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

WCHAR* pchData;
pchData = (WCHAR*)GlobalLock(hClipboardData);
wcscpy(pchData, strData);
GlobalUnlock(hClipboardData);
SetClipboardData(CF_UNICODETEXT, hClipboardData);
Run Code Online (Sandbox Code Playgroud)

为 分配2*字节数WCHAR。而不是char,使用WCHAR。而不是strcpy,使用wcscpy。而不是CF_TEXT,使用CF_UNICODETEXT

  • 我会使用 `sizeof(wchar_t)`(或者与你的答案 `sizeof(WCHAR)` 保持一致)而不是魔法常量 `2`,但这只是一种风格。 (2认同)