OpenClipboard函数
多个软件之间进行数据共享是非常重要的,难以想像编辑软件没有CTRL+C,CTRL+V的功能,是多么的不方便。很多的操作,就是拷贝的动作,就是为了数据共享。剪贴板共享是Windows里比较重要的功能,比如很多采集数据的软件为了方便导数据到excel里面,就可以使用剪贴板的功能。还有即见即所得的界面导到word里面,也可以使用剪贴板的功能。
函数OpenClipboard声明如下:
WINUSERAPI
BOOL
WINAPI
OpenClipboard(
__in_opt HWND hWndNewOwner);
hWndNewOwner是前贴板所属于的窗口。
调用函数的例子如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| //拷贝数据到剪贴板。 //蔡军生 2007/12/09 [qq](http://tech.ddvip.com/qq/index.html):9073204 深圳 void TestClipBoard(void) { //打开剪贴板并清空。 if (OpenClipboard(m_hWnd) && EmptyClipboard()) { HGLOBAL hMem; std::wstring strText(_T("拷贝数据到剪贴板")); //分配全局内存。 hMem = GlobalAlloc(GMEM_MOVEABLE, (strText.length() + 1) * sizeof(TCHAR)); if (hMem == NULL) { CloseClipboard(); return; }
//拷贝数据到剪贴板内存。 LPTSTR lpStr = (LPTSTR)GlobalLock(hMem); memcpy(lpStr, strText.c_str(), strText.length() * sizeof(TCHAR)); lpStr[strText.length()] = (TCHAR) 0; GlobalUnlock(hMem);
//设置数据到剪贴板 SetClipboardData(CF_UNICODETEXT, hMem);
//关闭剪贴板。 CloseClipboard(); } }
|
GetClipboardData
前面介绍怎么样把数据放到剪贴板里面,那么又是怎么样从剪贴板里面获取数据出来呢?当然还是需要使用其它的API函数来获取剪贴板里的数据。获取剪贴板里的数据时,是不知道当前剪贴板里是否有数据的,也不知道剪贴板里的数据格式是什么。那么下面就来解决这两个问题,先使用函数IsClipboardFormatAvailable来获取剪贴板里的格式是否可以处理,接着使用函数OpenClipboard打开剪贴板,然后使用函数GetClipboardData来获取剪贴板数据。
函数GetClipboardData声明如下:
WINUSERAPI
HANDLE
WINAPI
GetClipboardData(
__in UINT uFormat);
uFormat是剪贴板的格式。
调用函数的例子如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| //获取剪贴板的数据。 //蔡军生 2007/12/10 [qq](http://tech.ddvip.com/qq/index.html):9073204 深圳 void TestGetClipBoard(void) { //判断剪贴板的数据格式是否可以处理。 if (!IsClipboardFormatAvailable(CF_UNICODETEXT)) { return; }
//打开剪贴板。 if (!OpenClipboard(m_hWnd)) { return; }
//获取UNICODE的数据。 HGLOBAL hMem = GetClipboardData(CF_UNICODETEXT); if (hMem != NULL) {
//获取UNICODE的字符串。 LPTSTR lpStr = (LPTSTR)GlobalLock(hMem); if (lpStr != NULL) {
//显示输出。 OutputDebugString(lpStr);
//释放锁内存。 GlobalUnlock(hMem); } }
//关闭剪贴板。 CloseClipboard(); }
|