如何将字符数组复制到剪贴板
How do I copy a character array to the clipboard?
我正在尝试让我的应用程序将字符数组复制到剪贴板,以便将其粘贴到IE地址栏中。我在工作时遇到问题。这是我正在使用的代码:
HGLOBAL glob = GlobalAlloc(GMEM_FIXED,32);
memcpy(glob,array,sizeof(array));
OpenClipboard(hDlg);
EmptyClipboard();
SetClipboardData(CF_UNICODETEXT,glob);
CloseClipboard();
数组声明为:
char array[500];
这将导致程序崩溃。但是,如果我用数字切换sizeof(array)
,那还可以,但是只有 8 个字符被复制到剪贴板。
谁能建议我如何解决这个问题?我直接针对Win32 API,而不是使用MFC。
您只分配了 32 字节的全局内存:
GlobalAlloc(GMEM_FIXED,32);
。然后尝试将 500 字节塞入 32 字节的包中:
memcpy(glob,array,sizeof(array));
将 GlobalAlloc 更改为:
GlobalAlloc(GMEM_FIXED,sizeof(array));
此外,您将数据粘贴为 Unicode 文本 ( CF_UNICODETEXT
),但它不是 Unicode 文本。 我想这会导致...问题。
改为将其粘贴为纯文本:
SetClipboardData(CF_TEXT,glob);
您正在将 500 个字符 ( sizeof(array)
) 复制到只有 32 个字符空间的缓冲区中。所有剩余的字符都会践踏随机数据并导致崩溃。
我创建了一个函数来保存和加载剪贴板。
#include <Windows.h>
char* LoadClipboard()
{
static HANDLE clip;
if(OpenClipboard(NULL))
{
clip = GetClipboardData(CF_TEXT);
CloseClipboard();
}
return (char*) clip;
}
void SaveClipboard(char* text)
{
HGLOBAL global = GlobalAlloc(GMEM_FIXED,strlen(text) + 1); //text size + character
memcpy(global,text,strlen(text)); //text size + character
if(OpenClipboard(NULL))
{
EmptyClipboard();
SetClipboardData(CF_TEXT,global);
CloseClipboard();
}
}
相关文章:
- C++剪贴板队列粘贴随机结果?
- 将缓冲区复制到剪贴板 [换行错误]
- wxWidgets mac剪贴板在3.1.3上坏了?
- 获取剪贴板数据(CF_HDROP)在剪切和粘贴中失败
- 将矢量复制到剪贴板
- Linux/C++ 将字符串复制到剪贴板
- 从表视图复制到剪贴板
- 无法将 HTML 格式的 unicode(wchar_t 使用)复制到剪贴板
- BitBlt从剪贴板复制位图会给出错误的颜色
- 将文本复制到 MFC 中的剪贴板
- 如何将字符数组复制到剪贴板
- 通过QT将(rtf)表复制到剪贴板(或:将QTextDocument写入剪贴板)
- 将 unicode 字符串复制到剪贴板不起作用
- 如何在qt的剪贴板上复制lineEdit的内容
- 复制和粘贴剪贴板从不同的应用程序
- 在c++中复制到剪贴板
- 如何在C++中从剪贴板复制/粘贴
- 将 QML 项目作为图像复制到剪贴板C++
- C++:如何将多个对象复制到剪贴板并在之后提取它们
- C++ WINAPI 按钮剪贴板 - 复制操作