監視剪貼板,查找文本文件中相關內容

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

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