剪切板使用详解
剪切板:系统维护的一个全局公共内存区域,每次只允许一个进程对其进行访问。
1.打开剪切板
Bool OpenClipboard(HWND hWndNewOwner);
指定关联到打开剪切板的窗口句柄,传入NULL表示关联到当前任务。每次只允许一个进程打开并访问,每一次打开就要关闭,否则其他的进程无法访问剪切板。
2.清空剪切板
Bool EmptryClipboard(void)
写入前必须先清空,得到剪切板占有权。
3.分配内存
HGLOBAL GlobalAlloc(UNIT uFlags,SIZE_T dwBytes);
在堆上动态分配以字节为单位的内存区域,成功则指向该内存,失败NULL,参数:1.分配内存属性,2.分配的大小
4.锁定内存
LPVOID FlobalLock(HGLOBAL hMem);
锁定由GlobalAlloc分配的内存,并将内存对象的锁定计数器+1,成功返回指向内存对象起始地址的指针。失败NULL,系统为每个全局内存对象维护一个锁定计数器,初始为0,GlobalLock使计数器+1,GlobalUnLock计数器-1.一旦计数器值大于0,这块内存区域将不允许被移动或删除,只有当为0时,才解除对这块内存的锁定。如果分配时GMEM_FIXED属性,计数器一直为0。
5.设置剪切板
HANDLE SetClipboardData(UINT uFormat, HANDLE hMem);
执行成功,返回数据句柄,否则返回NULL
6.解除锁定
BOOL GlobalUnlock(HGLOBAL hMem);
将GlobalAlloc分配的属性为GMEM_MOVEABLE的内存对象计数器-1.
7.关闭剪切板
Bool CloseClipboard(void);
必须关闭剪切板其他进程才能使用剪切板,且关闭后当前进程就不能写入数据。
8.获取剪切板数据
HANDLE GetClipboardData(UINT uFormat);
执行成功,返回数据句柄,否则返回NULL数据格式,指定格式的数据的句柄