gpt4 book ai didi

c++ - 在 C++ 中的 SetClipboardData() 之后粘贴不包括记事本的换行符

转载 作者:行者123 更新时间:2023-11-28 04:16:14 30 4
gpt4 key购买 nike

我正在开发一些软件,将一个大字符串复制到 Windows 剪贴板以粘贴到其他软件中。在其他软件中粘贴不成功,当我粘贴到记事本中时,初始字符串中的换行符消失了,这就是为什么在其他软件中粘贴失败的原因。我知道这一点,因为当我将换行符重新添加到记事本并进行复制时,粘贴然后在其他程序中工作。当我粘贴到写字板时,换行符神秘地在那里。

我在 C++ 中使用 SetClipboardData() 和 CF_TEXT 剪贴板格式类型。我试过使用 CF_OEMTEXT、CF_DSPTEXT,但这些都不起作用。我看到了一些关于电子表格的 CF_SYLK(符号链接(symbolic link))的文档,因为我粘贴的软件类似于电子表格,但我也无法让它工作。下面是我复制到剪贴板的代码。

void ClipBoardManager::CopyExcelStringToClipBoard(std::string excel_str)
{
OpenClipboard(nullptr);
EmptyClipboard();
HGLOBAL hg = GlobalAlloc(GMEM_MOVEABLE, excel_str.size() + 1);
if (!hg) {
CloseClipboard();
return;
}
memcpy(GlobalLock(hg), excel_str.c_str(), excel_str.size() + 1);
GlobalUnlock(hg);
SetClipboardData(CF_TEXT, hg);
CloseClipboard();
GlobalFree(hg);

}

感谢任何帮助。

最佳答案

excel_str 必须有 CRLF 行结尾。下面是将字符串转换为良好格式的示例代码:

string replaceAll(string in, string replaceIn, string replaceOut)
{
size_t pos = 0;
while(pos < in.size())
{
size_t pos2 = in.find(replaceIn, pos);
if(pos2 != string::npos)
{
in.replace(in.begin() + pos2, in.begin() + pos2 + replaceIn.size(), replaceOut);
pos = pos2 + replaceOut.size();
}
else
break;
}
return in;
}

关于c++ - 在 C++ 中的 SetClipboardData() 之后粘贴不包括记事本的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56547966/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com