公司網絡考試很多,很多同事都苦於應付考試事,爲了方便,就寫了這個小軟件,使用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