//重要函数
1、分配内存:
GLOBALHANDLE hGlobal = GlobalReAlloc (hGlobal, dwSize, uiFlags) ;
uiFlags:
GMEM_FIXED //初始化每一位为0
#define GPTR (GMEM_FIXED | GMEM_ZEROINIT) //
#define GHND (GMEM_MOVEABLE | GMEM_ZEROINIT) //返回一个虚拟地址
2、访问内存块:
int *p = (int *) GlobalLock (hGlobal) ;
解锁内存块:GlobalUnlock (hGlobal) ;
释放内存;hGlobal = GlobalHandle (p) ;
3、把文本送到剪贴板
(1)、分配内存,后面是以NULL结尾的,故要加一
hGlobal = GlobalAlloc (GHND | GMEM_SHARE, iLength + 1) ;
(2)、锁定并获得指针:
pGlobal = GlobalLock (hGlobal) ;
(3)、复制:
for (i = 0 ; i < wLength ; i++)
*pGlobal++ = *pString++ ;
(4)、由于不用hGlobal 了,可以解锁:
GlobalUnlock (hGlobal); //可以防止泄漏
(5)、打开剪贴板并清空
OpenClipboard (hwnd) ;
EmptyClipboard () ;
(6)、设置剪贴板数据,并关闭剪贴板:
SetClipboardData (CF_TEXT, hGlobal) ;
CloseClipboard () ;
//注意:不要将锁定的句柄送给剪贴板。
//当从程序读出数据时需要锁定hGlobal 句柄以访问内存
4、从剪贴板获取文本:
(1)确定剪贴板是否含有数据:bAvailable = IsClipboardFormatAvailable (CF_TEXT) ;
(2)、先打开剪贴板:OpenClipboard (hwnd) ;
(3)获得句柄:hGlobal = GetClipboardData (CF_TEXT) ;
(4)把数据复制到程序前先分配内存:pText = (char *) malloc (GlobalSize (hGlobal)) ;
获得数据大小GlobalSize (hGlobal)
(5)、锁定句柄获取指向剪贴板的指针:pGlobal = GlobalLock (hGlobal) ;
(6)、复制数据:strcpy (pText, pGlobal) ;或者while (*pText++ = *pGlobal++) ;
(7)、解锁后关闭剪贴板
GlobalUnlock (hGlobal) ;
CloseClipboard ();
(5)、逐次获得数据iFormat,
iFormat = 0 ;
OpenClipboard (hwnd) ;
while (iFormat = EnumClipboardFormats (iFormat))
{
//
}
CloseClipboard () ;
您剪贴板不同格式的个数: //iCount = CountClipboardFormats () ;
//过程
一、写入数据到剪贴板
1、打开
BOOL OpenClipboard( __in HWND hWndNewOwner ); 如果函数执行成功,返回非零值. 如果函数执行失败,返回零,为了获得更多的错误信息,调用GetLastError.
2、清空
BOOL EmptyClipboard( VOID );该函数清空剪切板并释放剪切板内数据的句柄。函数在之后会将剪切板的所有权指派给当前打开剪切板的窗口。
3、设置数据
HANDLE SetClipboardData(
UINT uFormat, //数据的格式
HANDLE hMem //数据指定的内存形式
);
①、使用
HGLOBAL GlobalAlloc 分配内存
( UINT uFlags, // 分配属性(方式)
DWORD dwBytes // 分配的字节数
);
//注意要使用GMEM_MOVEABLE 标志
②、锁定 锁定内存中指定的内存块,并返回一个地址值,令其指向内存块的起始处
LPVOID GlobalLock( HGLOBAL hMem // handle to global memory object );
③解锁
GlobalUnlock函数解除锁定的内存块,使指向该内存块的指针无效,GlobalLock锁定的内存,一定要用GlobalUnlock解锁。
4、关闭
BOOL CloseClipboard(VOID); //关闭剪贴板,这使其他窗口能访问剪贴板。
二、读取
1、打开 并检查IsClipboardFormatAvailable_
2、获取 GetClipboardData
注意使用
用GlobalLock锁定剪贴板那内存块
GlobalSize可以用来获取该内存块的大小
使用GlobalUnlock解除锁定
3、关闭
posted on 2011-09-13 16:21
Yu_ 阅读(420)
评论(0) 编辑 收藏 引用 所属分类:
Windows程序设计