posts - 34,comments - 2,trackbacks - 0

//重要函数
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_ 阅读(405) 评论(0)  编辑 收藏 引用 所属分类: Windows程序设计

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理