剪切板:系统维护的一个全局公共内存区域,每次只允许一个进程对其进行访问。
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);执行成功,返回数据句柄,否则返回NULL6.解除锁定BOOL GlobalUnlock(HGLOBAL hMem);将GlobalAlloc分配的属性为GMEM_MOVEABLE的内存对象计数器-1.7.关闭剪切板Bool CloseClipboard(void);必须关闭剪切板其他进程才能使用剪切板,且关闭后当前进程就不能写入数据。8.获取剪切板数据HANDLE GetClipboardData(UINT uFormat);执行成功,返回数据句柄,否则返回NULL数据格式,指定格式的数据的句柄