//重要函數
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_ 閱讀(438)
評論(0) 編輯 收藏 引用 所屬分類:
Windows程序設計