公司网络考试很多,很多同事都苦于应付考试事,为了方便,就写了这个小软件,使用VC2010开发,监视剪贴板,从文本文件中查找相应内容,执行后始终浮于最上面,选择考试题目中关键内容后,按Ctrl_C,相应题库就显示出来了。只要有题库,考试不是难事了。
本项目为对话框软件,主要模块如下:
1、将本窗口注册到Clipboard Viewer Chain
HWND hwndNextViewer; //声明一全局窗口句柄,用于保存Clipboard Viewer Chain中下一个窗口的句柄
hwndNextViewer = ::SetClipboardViewer(m_hWnd); //在OnInitDialog中注册本窗口
2、注销
void CClipBoardDlg::OnDestroy()
{
CDialog::OnDestroy();
//从Clipboard Viewer Chain注销本窗口
::ChangeClipboardChain(m_hWnd, hwndNextViewer);
}
3、监听WM_DRAWCLIPBOARD和WM_CHANGECBCHAIN
消息说明:
WM_DRAWCLIPBOARD
当剪贴板的内容每次发生改变时,Windows都会向剪贴板观察链中所有的窗口发送WM_DRAWCLIPBOARD消息。
WM_CHANGECBCHAIN
当一个窗口从剪贴板观察链中移去时发送此消息给剪贴板观察链的第一个窗口。
afx_msg LRESULT OnDrawClipboard(WPARAM wParam, LPARAM lParam); //声明自定义的消息响应函数
afx_msg LRESULT OnChangeCbChain(WPARAM wParam, LPARAM lParam); //声明自定义的消息响应函数
BEGIN_MESSAGE_MAP(CClipBoardDlg, CDialog)
//{{AFX_MSG_MAP(CClipBoardDlg)
ON_WM_DESTROY()
ON_MESSAGE(WM_DRAWCLIPBOARD, OnDrawClipboard) //将消息和消息响应函数联系起来
ON_MESSAGE(WM_CHANGECBCHAIN, OnChangeCbChain) //将消息和消息响应函数联系起来
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
LRESULT CClipBoardDlg::OnDrawClipboard(WPARAM wParam, LPARAM lParam)
{
nFormat = GetPriorityClipboardFormat(auPriorityList,sizeof(auPriorityList));
if(nFormat == CF_TEXT)
{
::OpenClipboard(m_hWnd);
HGLOBAL hMem = GetClipboardData(nFormat);
LPTSTR lpstr = (LPTSTR)GlobalLock(hMem);
trace(lpstr);
//((CListBox*)GetDlgItem(IDC_LIST1))->InsertString(0,lpstr);
QueryAnswer(lpstr); //自己的处理过程
GlobalUnlock(hMem);
::CloseClipboard();
}
::SendMessage(hwndNextViewer, WM_DRAWCLIPBOARD, wParam, lParam);
return 0; //应该是return 0,
}
LRESULT CClipBoardDlg::OnChangeCbChain(WPARAM wParam, LPARAM lParam)
{
//如果注销的Clipboard Viewer窗口是本窗口的下一个窗口,
//则修改本窗口保存的下一个窗口句柄,
//否则将该消息传递到Clipboard Viewer Chain的下一个窗口
if ((HWND) wParam == hwndNextViewer)
hwndNextViewer = (HWND) lParam;
else if (hwndNextViewer != NULL)
::SendMessage(hwndNextViewer, WM_CHANGECBCHAIN, wParam, lParam);
return 0; //应该是return 0,
}
本项目源码:http://download.csdn.net/detail/zhoury/6383903