進程間通信之剪貼板clipboard

Windows剪貼板是一種比較簡單就能實現,也是一種開銷比較小的IPC機制,其原理就是利用系統預留的一塊全局共享內存,用來暫存各個進程之間進行交換的數據。

其中用的幾個關鍵函數分別如下。

BOOL OpenClipboard();//打開剪貼板;

BOOL CloseClipboard();//關閉剪貼板;

BOOL EmptyClipboard();//清空剪貼板,並將所有權分配給打開剪貼板的進程;

HANDLE SetClipboardData(UINT nFormat,HANDLE hMem);

//按指定數據格式放置剪貼板數據,使用之前必須使用OpenClipboard()函數;

BOOL IsClipboardFormatAvailable(UINT nFormat);//檢測數據是否已被包含;

HANDLE GetClipboardData(UINT nFormat);//獲取指定剪貼板數據;

以下是主要源代碼。

發送函數:

void CClipboardDlg::OnBtnSend()
{
// TODO: Add your control notification handler code here
if(OpenClipboard())
{
CString str;
HANDLE hClip;
char *pBuf;
EmptyClipboard();
GetDlgItemText(IDC_EDIT_SEND,str);
hClip=GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1);
pBuf=(char*)GlobalLock(hClip);
strcpy(pBuf,str);
GlobalUnlock(hClip);
SetClipboardData(CF_TEXT,hClip);
CloseClipboard();
}
}

接收函數:

void CClipboardDlg::OnBtnRecv()
{
// TODO: Add your control notification handler code here
if(OpenClipboard())
{
if(IsClipboardFormatAvailable(CF_TEXT))
{
HANDLE hClip;
char *pBuf;
hClip=GetClipboardData(CF_TEXT);
pBuf=(char*)GlobalLock(hClip);
GlobalUnlock(hClip);
SetDlgItemText(IDC_EDIT_RECV,pBuf);
CloseClipboard();
}
}
}

效果:

from:http://www.limou.net/755.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章