windows每个进程都有自己的资源空间, 进程内线程之间互相共享资源非常简单,但是如果不在一个进程呢...很多人都会想到一种最简单的办法.利用系统的剪贴板进行数据交换.
要利用剪贴板首先要打开剪贴板:
1.OpenClipboard(HWND hWndNewOwner);
hWndNewOwner参数含义:是哪个窗口打开的剪贴板,如果为空,则自动关联当前任务.注意剪贴板同时不能被打开多次
2.利用剪贴版之前先清空剪贴板的内容:EmptyClipboard(VOID);
3.下面开始往剪贴板存放数据
HANDLE SetClipboardData(
UINT uFormat,
HANDLE hMem);
uFormat:剪贴板存放的数据格式
hMem:指定格式的数据句柄,如果这个句柄表示了内存数据,那么必须使用LocalAlloc来分配空间
4.HLOCAL LocalAlloc(
UINT uFlags,
UINT uBytes
);
uFlags:如何分配内存
uBytes:分配的大小
操作LocalAlloc分配的空间时候一定要在使用前LocalLock离开后LocalUnlock
5.最后一定记得关闭剪贴板CloseClipboard(void);
例子如下:
//将编辑框的数据发送到剪贴板
if(OpenClipboard())
{
EmptyClipboard();
CString text;
char* buf;
GetDlgItem(IDC_EDIT1)->GetWindowText(text);
HLOCAL hg = LocalAlloc(LMEM_ZEROINIT,text.GetLength()+1);
buf = (char*)LocalLock(hg);
strcpy(buf,text);
LocalUnlock(hg);
SetClipboardData(CF_TEXT,hg);
CloseClipboard();
}
// 接收
if(OpenClipboard())
{
if(IsClipboardFormatAvailable(CF_TEXT))//剪贴板里面有这种格式的数据吗?
{
char* buf;
HLOCAL hg;
hg = GetClipboardData(CF_TEXT);
buf = (char*)LocalLock(hg);
LocalUnlock(hg);
GetDlgItem(IDC_EDIT2)->SetWindowText(buf);
}
CloseClipboard();
}