剪贴板监视保存器
来源:互联网 发布:生产工艺制作软件 编辑:程序博客网 时间:2024/05/21 14:52
// GetClipboardDlg.h : 头文件//#pragma once#include "afxwin.h"// CGetClipboardDlg 对话框class CGetClipboardDlg : public CDialog{// 构造public:CGetClipboardDlg(CWnd* pParent = NULL);// 标准构造函数// 对话框数据enum { IDD = IDD_GETCLIPBOARD_DIALOG };protected:virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV 支持// 实现protected:HICON m_hIcon;// 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public:afx_msg void OnBnClickedButton1();FILE *fp;BOOL bStart;afx_msg void OnBnClickedButton2();CListBox m_list;CButton m_start;CEdit m_file;CButton m_choice;int WriteFile(char * szBuf);void StartListenClipBoard(void);afx_msg void OnDrawClipboard();private:CString strPreMsg;public:afx_msg void OnChangeCbChain(HWND hWndRemove, HWND hWndAfter);HWND hNextWnd;afx_msg void OnDestroy();afx_msg void OnBnClickedButton4();CButton m_clear;};
直接代码吧,不想写点文字的,懒。
// GetClipboardDlg.cpp : 实现文件//#include "stdafx.h"#include "GetClipboard.h"#include "GetClipboardDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#endif// 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialog{public:CAboutDlg();// 对话框数据enum { IDD = IDD_ABOUTBOX };protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 实现protected:DECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()// CGetClipboardDlg 对话框CGetClipboardDlg::CGetClipboardDlg(CWnd* pParent /*=NULL*/): CDialog(CGetClipboardDlg::IDD, pParent){m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CGetClipboardDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);DDX_Control(pDX, IDC_LIST2, m_list);DDX_Control(pDX, IDC_BUTTON2, m_start);DDX_Control(pDX, IDC_EDIT1, m_file);DDX_Control(pDX, IDC_BUTTON1, m_choice);DDX_Control(pDX, IDC_BUTTON4, m_clear);}BEGIN_MESSAGE_MAP(CGetClipboardDlg, CDialog)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()//}}AFX_MSG_MAPON_BN_CLICKED(IDC_BUTTON1, &CGetClipboardDlg::OnBnClickedButton1)ON_BN_CLICKED(IDC_BUTTON2, &CGetClipboardDlg::OnBnClickedButton2)ON_WM_DRAWCLIPBOARD()ON_WM_CHANGECBCHAIN()ON_WM_DESTROY()ON_BN_CLICKED(IDC_BUTTON4, &CGetClipboardDlg::OnBnClickedButton4)END_MESSAGE_MAP()// CGetClipboardDlg 消息处理程序BOOL CGetClipboardDlg::OnInitDialog(){CDialog::OnInitDialog();// 将“关于...”菜单项添加到系统菜单中。// IDM_ABOUTBOX 必须在系统命令范围内。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动// 执行此操作SetIcon(m_hIcon, TRUE);// 设置大图标SetIcon(m_hIcon, FALSE);// 设置小图标// TODO: 在此添加额外的初始化代码bStart = FALSE;fp = NULL;m_start.EnableWindow(FALSE);m_clear.EnableWindow(FALSE);hNextWnd = NULL;return TRUE; // 除非将焦点设置到控件,否则返回 TRUE}void CGetClipboardDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}// 如果向对话框添加最小化按钮,则需要下面的代码// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,// 这将由框架自动完成。void CGetClipboardDlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// 绘制图标dc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}}//当用户拖动最小化窗口时系统调用此函数取得光标//显示。HCURSOR CGetClipboardDlg::OnQueryDragIcon(){return static_cast<HCURSOR>(m_hIcon);}void CGetClipboardDlg::OnBnClickedButton1(){// TODO: 在此添加控件通知处理程序代码CFileDialog dlg(TRUE);if( dlg.DoModal() ){CEdit *pFile = (CEdit*)GetDlgItem(IDC_EDIT1);pFile->SetWindowText( dlg.GetPathName() );m_list.ResetContent();m_start.EnableWindow(TRUE);}}void CGetClipboardDlg::OnBnClickedButton2(){// TODO: 在此添加控件通知处理程序代码if( FALSE==bStart ){CString str;char szFileName[256];GetDlgItem(IDC_EDIT1)->GetWindowText(szFileName,256);if( NULL==(fp=fopen(szFileName,"a+")) ){MessageBox( "打开文件失败","", MB_ICONWARNING );return;}m_list.ResetContent();char c, szBuf[1024];int i = 0;while( (c=fgetc(fp))!=EOF ){if( c=='\n' ){szBuf[i] = '\0';m_list.AddString(szBuf);i = 0;}else szBuf[i++] = c;}fseek(fp, 0, SEEK_END );SYSTEMTIME t;GetLocalTime(&t);sprintf( szBuf, "----------------------------------------------------------------------\n%d-%d-%d %d:%d:%d", t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond );WriteFile( szBuf );m_start.SetWindowText("停止");m_file.SetReadOnly(TRUE);m_choice.EnableWindow(FALSE);bStart = TRUE;m_clear.EnableWindow(TRUE);StartListenClipBoard();}else{char szBuf[1024];SYSTEMTIME t;GetLocalTime(&t);sprintf( szBuf, "\n\n%d-%d-%d %d:%d:%d\n----------------------------------------------------------------------", t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond );WriteFile( szBuf );fclose(fp);fp = NULL;m_start.SetWindowText("开始");m_file.SetReadOnly(FALSE);m_choice.EnableWindow(TRUE);m_start.EnableWindow(FALSE);m_clear.EnableWindow(FALSE);bStart = FALSE;}}int CGetClipboardDlg::WriteFile(char * szBuf){if( bStart==TRUE ){fprintf( fp, "%s\r\n",szBuf );return 1;}return 0;}void CGetClipboardDlg::StartListenClipBoard(void){hNextWnd = this->SetClipboardViewer();//设置本窗口到剪贴板监视链}void CGetClipboardDlg::OnDrawClipboard()//响应剪贴板内容变化事件{CDialog::OnDrawClipboard();unsigned int anFormats[] = {CF_TEXT};unsigned int nFormat =GetPriorityClipboardFormat(anFormats,sizeof(anFormats)); if(nFormat == CF_TEXT){HGLOBAL hMem;OpenClipboard();if(hMem = ::GetClipboardData(CF_TEXT)){LPTSTR lpszText = (LPTSTR) GlobalLock(hMem);GlobalUnlock(hMem);CString str1=lpszText;str1.Trim();this->strPreMsg.Trim();if( this->strPreMsg!=str1 ){this->WriteFile( lpszText);this->strPreMsg = lpszText;m_list.AddString( lpszText );}}}CloseClipboard();}void CGetClipboardDlg::OnChangeCbChain(HWND hWndRemove, HWND hWndAfter){CDialog::OnChangeCbChain(hWndRemove, hWndAfter);// TODO: 在此处添加消息处理程序代码//if( hWndRemove==hNextWnd ) }void CGetClipboardDlg::OnDestroy(){CDialog::OnDestroy();// TODO: 在此处添加消息处理程序代码if( hNextWnd!=NULL )this->ChangeClipboardChain(hNextWnd);}void CGetClipboardDlg::OnBnClickedButton4(){// TODO: 在此添加控件通知处理程序代码if( bStart!=TRUE ) return;fclose(fp);char szFileName[MAX_PATH];m_file.GetWindowText( szFileName, MAX_PATH );if( (fp=fopen( szFileName, "w+" ))==NULL ){MessageBox( "清空文件失败" );return;}else {char szBuf[1024];m_list.ResetContent();SYSTEMTIME t;GetLocalTime(&t);sprintf( szBuf, "----------------------------------------------------------------------\n%d-%d-%d %d:%d:%d", t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond );WriteFile( szBuf );m_list.AddString( "----------------------------------------------------------------------" );sprintf( szBuf, "%d-%d-%d %d:%d:%d", t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond );m_list.AddString( szBuf );}}
效果图:
主要问题是剪贴板的,之前没接触过。具体操作是:
现需要执行this->SetClipboardViewer();//设置本窗口到剪贴板监视链
然后响应WM_OnDrawClipboard消息,之后还有些善后处理的等等..
有些迅雷连续剧资源不是做成一起的,需要一集一集的复制地址,之后会弹出一个迅雷下载框,下载40集,弹个40个。
蛋都碎了,这个可以直接把资源地址保存到文件,之后直接把所有地址复制,然后新建一个迅雷任务就可以下载所有资源了,也算比较方便吧。
- 剪贴板监视保存器
- 监视剪贴板内容
- 监视剪贴板内容
- Java监视系统剪贴板
- 示例:WPF监视剪贴板
- 剪贴板操作——设置获取文本/UNICODE文本/HTML/BITMAP等等 监视剪贴板 保存BITMAP到文件
- 如何监视系统剪贴板变化?
- 关于C#监视剪贴板信息
- VC 监视剪贴板的变化和内容监视
- 实现网络蚂蚁的实时监视剪贴板功能
- 用java实现windows剪贴板监视
- 在java中实现windows剪贴板监视
- 用 C# 监视剪贴板的活动状态
- 编程实现对剪贴板的监视
- 在C#中监视剪贴板的变化
- 使用API SetClipboardViewer来监视剪贴板
- WIN7下使用.net(C#)监视剪贴板
- 监视剪贴板,查找文本文件中相关内容
- [C语言项目]防止头文件和全局变量重复定义
- 超链接的href和onclick并存困惑 ---收集
- Android UI设计 SeekBar拖动条用法
- 常见电脑的屏幕比例和分辨率详谈
- Android开发FAQ
- 剪贴板监视保存器
- 链接所打开页面的位置,相关参数
- 好的silverlight博客
- 数据结构 E 开还是关,这是一个问题
- C语言深度解剖 笔记2
- 横竖屏切换事件
- Form 利用模板开发步骤
- 11种php编程典型安全隐患及处理
- MyEclipse使用经验总结 1