220上位机VC MFC监控与获取系统剪切板内容
220上位机VC MFC监控与获取系统剪切板内容 功能展示 我们操作电脑时,用鼠标复制内容,再到别处粘贴,复制的内容就会被粘上,那么这复制的内容用代码如何获取呢?我们当前例程就来编写代码获取用户复制的的内容,效果如图,当用户用鼠标复制了内容,内容就会被我们编写的程序获取,并显示在我们例程的编辑框中; 要点提示 系统有一套剪贴板观察器链,我们只要调用函数SetClipboardViewer(),系统的剪切板内容发生变化时,都会通过消息WM_DRAWCLIPBOARD,向我们窗口传递剪切板内容;所以我们映射此函数便可获得剪切板内容;如例程关联的函数为OnDrawClipboard()在函数体内调用函数GetPriorityClipboardFormat ()OpenClipboard () GetClipboardData () GlobalUnlock () CloseClipboard (),获得具体剪切板内容; int GetPriorityClipboardFormat( UINT* paFormatPriorityList, //指向一组剪贴板格式的无符号整数 int cFormats // paFormatPriorityList包含的数量 ); OpenClipboard() CloseClipboard ()用于打开与关闭剪切板, GetClipboardData ()用于获取剪切板内容 实现功能 1.新建基于对话框的应用程序 2.拖拽一编辑框ID为IDC_EDIT1,用于显示获得的剪切板内容; 添加变量HWND m_hView;用于剪切板链内当前窗口句柄的保存; 在OnInitDialog()初始化m_hView=SetClipboardViewer(); //将本窗口注册到Clipboard Viewer Chain 中,并保存链中下一窗口句柄 3.在程序退出函数OnDestroy()内删除剪切板链本窗口: ChangeClipboardChain(m_hView);//从Clipboard Viewer Chain 中注销本窗口 4.关联消息WM_CHANGECBCHAIN, WM_DRAWCLIPBOARD - void CGkbc8Dlg::OnChangeCbChain(HWND hWndRemove, HWND hWndAfter) //clipboard viewer注销时
- {
- CDialog::OnChangeCbChain(hWndRemove, hWndAfter);
- //<>如果注销的窗口是本窗口下一窗口,则修改本窗口保存的下一窗口句柄
- if((HWND)hWndRemove == m_hView )
- m_hView = hWndAfter;
- }
- void CGkbc8Dlg::OnDrawClipboard() //剪切析内容变化时
- {
- CString sText;
- HGLOBAL hMem;
- LPTSTR lpStr;
- UINT nFormats[]={CF_BITMAP,CF_DSPBITMAP,CF_TEXT};//根据需要添加监控类型
- int nFormat= GetPriorityClipboardFormat(nFormats,sizeof(nFormats));
- switch(nFormat)//罗列的类型根据需要处理
- {
- case CF_TEXT://是文件类型时
- OpenClipboard();
- hMem = GetClipboardData(CF_TEXT);
复制代码- lpStr =(LPTSTR)GlobalLock(hMem);
- SetDlgItemText(IDC_EDIT1,lpStr);//在编程框中显示剪切板内容
- sText.Format("%s",lpStr);
- if( sText.Right(sText.GetLength()-sText.ReverseFind('.')) ==".com")//额外功能-直接打开网址
- {
- if(sText.Left(sText.Find('.')+1)!="www.")
- sText.Insert(0,"www.");
- ShellExecute(m_hWnd,"open",sText,NULL,NULL,SW_SHOW);
- }
-
- GlobalUnlock(hMem);
- CloseClipboard();
- break;
- default:
- break;
- }
- CDialog::OnDrawClipboard();
- }
复制代码我们来演示下功能实现的整个过程
|