监视剪贴板,查找文本文件中相关内容

公司网络考试很多,很多同事都苦于应付考试事,为了方便,就写了这个小软件,使用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值