//重要函數(shù)
1、分配內(nèi)存:
GLOBALHANDLE hGlobal = GlobalReAlloc (hGlobal, dwSize, uiFlags) ;
uiFlags:
GMEM_FIXED //初始化每一位為0
#define GPTR (GMEM_FIXED | GMEM_ZEROINIT) //
#define GHND (GMEM_MOVEABLE | GMEM_ZEROINIT) //返回一個(gè)虛擬地址
2、訪問內(nèi)存塊:
int *p = (int *) GlobalLock (hGlobal) ;
解鎖內(nèi)存塊:GlobalUnlock (hGlobal) ;
釋放內(nèi)存;hGlobal = GlobalHandle (p) ;
3、把文本送到剪貼板
(1)、分配內(nèi)存,后面是以NULL結(jié)尾的,故要加一
hGlobal = GlobalAlloc (GHND | GMEM_SHARE, iLength + 1) ;
(2)、鎖定并獲得指針:
pGlobal = GlobalLock (hGlobal) ;
(3)、復(fù)制:
for (i = 0 ; i < wLength ; i++)
*pGlobal++ = *pString++ ;
(4)、由于不用hGlobal 了,可以解鎖:
GlobalUnlock (hGlobal); //可以防止泄漏
(5)、打開剪貼板并清空
OpenClipboard (hwnd) ;
EmptyClipboard () ;
(6)、設(shè)置剪貼板數(shù)據(jù),并關(guān)閉剪貼板:
SetClipboardData (CF_TEXT, hGlobal) ;
CloseClipboard () ;
//注意:不要將鎖定的句柄送給剪貼板。
//當(dāng)從程序讀出數(shù)據(jù)時(shí)需要鎖定hGlobal 句柄以訪問內(nèi)存
4、從剪貼板獲取文本:
(1)確定剪貼板是否含有數(shù)據(jù):bAvailable = IsClipboardFormatAvailable (CF_TEXT) ;
(2)、先打開剪貼板:OpenClipboard (hwnd) ;
(3)獲得句柄:hGlobal = GetClipboardData (CF_TEXT) ;
(4)把數(shù)據(jù)復(fù)制到程序前先分配內(nèi)存:pText = (char *) malloc (GlobalSize (hGlobal)) ;
獲得數(shù)據(jù)大小GlobalSize (hGlobal)
(5)、鎖定句柄獲取指向剪貼板的指針:pGlobal = GlobalLock (hGlobal) ;
(6)、復(fù)制數(shù)據(jù):strcpy (pText, pGlobal) ;或者while (*pText++ = *pGlobal++) ;
(7)、解鎖后關(guān)閉剪貼板
GlobalUnlock (hGlobal) ;
CloseClipboard ();
(5)、逐次獲得數(shù)據(jù)iFormat,
iFormat = 0 ;
OpenClipboard (hwnd) ;
while (iFormat = EnumClipboardFormats (iFormat))
{
//
}
CloseClipboard () ;
您剪貼板不同格式的個(gè)數(shù): //iCount = CountClipboardFormats () ;
//過程
一、寫入數(shù)據(jù)到剪貼板
1、打開
BOOL OpenClipboard( __in HWND hWndNewOwner ); 如果函數(shù)執(zhí)行成功,返回非零值. 如果函數(shù)執(zhí)行失敗,返回零,為了獲得更多的錯(cuò)誤信息,調(diào)用GetLastError.
2、清空
BOOL EmptyClipboard( VOID );該函數(shù)清空剪切板并釋放剪切板內(nèi)數(shù)據(jù)的句柄。函數(shù)在之后會(huì)將剪切板的所有權(quán)指派給當(dāng)前打開剪切板的窗口。
3、設(shè)置數(shù)據(jù)
HANDLE SetClipboardData(
UINT uFormat, //數(shù)據(jù)的格式
HANDLE hMem //數(shù)據(jù)指定的內(nèi)存形式
);
①、使用
HGLOBAL GlobalAlloc 分配內(nèi)存
( UINT uFlags, // 分配屬性(方式)
DWORD dwBytes // 分配的字節(jié)數(shù)
);
//注意要使用GMEM_MOVEABLE 標(biāo)志
②、鎖定 鎖定內(nèi)存中指定的內(nèi)存塊,并返回一個(gè)地址值,令其指向內(nèi)存塊的起始處
LPVOID GlobalLock( HGLOBAL hMem // handle to global memory object );
③解鎖
GlobalUnlock函數(shù)解除鎖定的內(nèi)存塊,使指向該內(nèi)存塊的指針無效,GlobalLock鎖定的內(nèi)存,一定要用GlobalUnlock解鎖。
4、關(guān)閉
BOOL CloseClipboard(VOID); //關(guān)閉剪貼板,這使其他窗口能訪問剪貼板。
二、讀取
1、打開 并檢查IsClipboardFormatAvailable_
2、獲取 GetClipboardData
注意使用
用GlobalLock鎖定剪貼板那內(nèi)存塊
GlobalSize可以用來獲取該內(nèi)存塊的大小
使用GlobalUnlock解除鎖定
3、關(guān)閉
posted on 2011-09-13 16:21
Yu_ 閱讀(461)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
Windows程序設(shè)計(jì)