获取网页ed2k链接桌面程序实现
使用boost libcurl win32sdk
Thread Regex LibcURL
唉,挫得要死....最后发现VeryCD竟然有复制链接功能.
不过记录下来吧.也很有用
- #define WIN32_LEAN_AND_MEAN
- #include <windows.h>
- #include <boost/thread.hpp>
- #include <boost/regex.hpp>
- #include <boost/lambda/lambda.hpp>
- #include <algorithm>
- #include <cstring>
- #include <cstdlib>
- #include <string>
- #include <iostream>
- #include <vector>
- #include <curl/curl.h>
- #include "resource.h"
- #define SAMPLE_URL "http://www.verycd.com/topics/146220/"
- #define WM_PARSE_COMPLETE WM_USER+1
- HINSTANCE hInst;
- HWND main_hwnd;
- HWND result_text;
- CURL * main_curl;
- typedef struct downloadData
- {
- int size;
- void * pData;
- }DOWNLOADDATA,*LPDOWNLOADDATA;
- DOWNLOADDATA data;
- char url[512];
- std::vector<std::string> ed2klinks;
- boost::thread * pThread;
- size_t write_callback( void *ptr, size_t size, size_t nmemb, void *userdata);
- void start_getting_links();
- BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- switch(uMsg)
- {
- case WM_INITDIALOG:
- /*
- * TODO: Add code to initialize the dialog.
- */
- return TRUE;
- case WM_PARSE_COMPLETE:
- {
- std::string all;
- std::for_each(
- ed2klinks.begin(),
- ed2klinks.end(),
- all+=boost::lambda::_1
- );
- HWND hBT = ::GetDlgItem(main_hwnd,IDC_BTN_START);
- ::EnableWindow(hBT,TRUE);
- ::SetWindowText(result_text,all.c_str());
- }
- ed2klinks.clear();
- ::MessageBox(NULL,"获取完毕!","提示",MB_OK);
- break;
- case WM_CLOSE:
- PostQuitMessage(0);
- return TRUE;
- case WM_COMMAND:
- switch(LOWORD(wParam))
- {
- /*
- * TODO: Add more control ID's, when needed.
- */
- case IDC_BTN_QUIT:
- ::PostQuitMessage(0);
- return TRUE;
- case IDC_BTN_START:
- ::GetDlgItemText(main_hwnd,IDC_EDIT_URL,url,512);
- boost::regex url_expression("http://.*");
- char * begin = url;
- char * end = url+strlen(url);
- boost::match_results<char *> result;
- if( ! boost::regex_match(begin,end,result,url_expression,boost::match_default))
- {
- ::MessageBox(NULL,"地址不合法","错误",MB_OK);
- return TRUE;
- }
- pThread = new boost::thread(&start_getting_links);
- pThread->timed_join(boost::posix_time::milliseconds(1));
- printf("start");
- //printf((char *)data.pData);
- //MessageBox(hwndDlg, "You clicked \"Test\" button!", "Information", MB_ICONINFORMATION);
- return TRUE;
- }
- }
- return FALSE;
- }
- int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
- {
- hInst = hInstance;
- MSG messages;
- // The user interface is a modal dialog box
- main_hwnd = ::CreateDialog(hInstance, MAKEINTRESOURCE(DLG_MAIN), NULL, (DLGPROC)DialogProc);
- result_text = ::GetDlgItem(main_hwnd,IDC_EDIT_RESULT);
- ::SetWindowText(::GetDlgItem(main_hwnd,IDC_EDIT_URL),"http://www.verycd.com/topics/67240/");
- ::ShowWindow(main_hwnd,SW_NORMAL);
- ::SendMessage(main_hwnd, WM_SETICON, ICON_SMALL, (LPARAM)::LoadImage(
- hInst,
- MAKEINTRESOURCE(IDI_MAIN),
- IMAGE_ICON,
- GetSystemMetrics(SM_CXSMICON),
- GetSystemMetrics(SM_CYSMICON),
- LR_DEFAULTCOLOR));
- ::SendMessage(main_hwnd, WM_SETICON, ICON_BIG, (LPARAM)::LoadImage(
- hInst,
- MAKEINTRESOURCE(IDI_MAIN),
- IMAGE_ICON,
- GetSystemMetrics(SM_CXSMICON),
- GetSystemMetrics(SM_CYSMICON),
- LR_DEFAULTCOLOR));
- while (GetMessage (&messages, NULL, 0, 0))
- {
- /* Translate virtual-key messages into character messages */
- TranslateMessage(&messages);
- /* Send message to WindowProcedure */
- DispatchMessage(&messages);
- }
- return 0;
- //return DialogBox(hInstance, MAKEINTRESOURCE(DLG_MAIN), NULL, (DLGPROC)DialogProc);
- }
- size_t write_callback( void *ptr, size_t size, size_t nmemb, void *userdata)
- {
- size_t data_size = size * nmemb;
- DOWNLOADDATA * pData = (LPDOWNLOADDATA)userdata;
- pData->pData = realloc(pData->pData,pData->size + data_size + 1);
- memcpy(pData->pData + pData->size,ptr,data_size);
- pData->size += data_size;
- ((char *)pData->pData)[pData->size] = 0;
- return data_size;
- }
- void start_getting_links()
- {
- HWND hBT = ::GetDlgItem(main_hwnd,IDC_BTN_START);
- ::EnableWindow(hBT,FALSE);
- main_curl = curl_easy_init();
- if(!main_curl)
- {
- printf("curl init error!\n");
- }
- curl_easy_setopt(main_curl,CURLOPT_URL,url);
- curl_easy_setopt(main_curl,CURLOPT_WRITEDATA,&data);
- memset(&data,0,sizeof(DOWNLOADDATA));
- curl_easy_setopt(main_curl,CURLOPT_WRITEFUNCTION,&write_callback);
- curl_easy_perform(main_curl);
- boost::regex ed2k_expression = boost::regex("(?<link>ed2k://\\\|file\\\|[^\\\">]*\\\|/)");
- char * begin = (char*)data.pData;
- char * end = (char*)data.pData + data.size;
- boost::match_results< char* > result;
- while(boost::regex_search(begin,end,result,ed2k_expression,boost::match_default))
- {
- std::string temp(result[0].first,result[0].second);
- temp+="\r\r\n";
- if(!ed2klinks.empty())
- {
- if(temp.compare(ed2klinks[ed2klinks.size()-1]) != 0)
- {
- ed2klinks.push_back(temp);
- }
- }
- else
- {
- ed2klinks.push_back(temp);
- }
- begin = result[0].second;
- }
- free(data.pData);
- data.pData = NULL;
- data.size = 0;
- PostMessage(main_hwnd,WM_PARSE_COMPLETE,NULL,NULL);
- return;
- }
转载于:https://blog.51cto.com/bhlzlx/940083
获取网页ed2k链接桌面程序实现相关推荐
- Android 使用JS注入获取网页视频链接
Android 使用JS注入获取网页视频链接 思路: 1.通过js注入获取整个网页html. 2.通过jsoup分析获取video播放器的数据源. 一.开启webviewjs功能,注入js回调 mWe ...
- php 页面生成外部链接,php 获取网页外部链接正则表达式
代码如下 复制代码 preg_match_all("//i",$webContent,$link); $urls =array(); foreach($link[0] as $v ...
- header python 环境信息_python获取网页header头部信息(python小白学习笔记二)
方法一:代码查看 通过python获取网页的链接url,返回码,以及相关的信息 #对反爬虫网页,可以设置一些headers信息,模拟成浏览器取访问网站 import urllib.request ur ...
- web网页浏览器唤起wpf,winform exe桌面程序,并跳转到指定页面
背景案例 我们看到网页上打开百度网盘,下载的时候会通过浏览器唤起百度网盘桌面端,并进入到指定页面,我们要做的,就是达到类似的效果 实现流程 1.写注册表 在桌面软件首次启动的时候,像注册表中写入程序的 ...
- .NET 桌面程序集成Web网页多种解决方案
前言 B/S架构的Web程序几乎占据了应用软件的绝大多数市场,但是C/S架构的WinForm.WPF客户端程序依然具有很实用的价值,如设计类软件 AutoCAD与Autodesk Revit.WPS. ...
- 如何在网页中打开一个本地桌面程序
如何在网页中打开一个本地桌面程序 转载 2015年11月26日 20:30:14 1473 通过网页链接打开本地本地程序,想到最多的方法就是通过activex控件,但这里介绍一个通过注册新协议来打开本 ...
- 批量采集html软件,在线批量获取网页链接工具 浏览器插件版-♚付涛纪实阁♚
这两天在弄网站蜜蜂采集的时候,发现原来收藏的一个[在线批量获取网页链接工具]工具对应的网站已经不知道什么原因打不开了:在百度里面通过这个词去一搜索,一初搜索,看到百度结果里面拥有大量的匹配信息,但是经 ...
- Nativefier 网页转桌面程序 app
Nativefier 网页转桌面程序 Nativefier简介 Nativefier是一个命令行工具,仅仅通过一行代码就可以轻松地为任何的网站创建桌面应用程序,应用程序通过Electron打包成系统可 ...
- 如何用php获取网页表格,PHP获取网页上任意表格中内容的通用程序的制作
在工作中,经常需要对网页上的表格内容进行处理,但是,由于表格内容制作过程中的随意性,跨行跨列经常发生,所以我作了这几个函数,以获取表格的内容,程序中重要的地方已作了注解,所以在此不再重复说明,经过测试 ...
最新文章
- @老板:别开视频会议了,效率低没人care,斯坦福、微软都可以作证
- linux修改ip地址方法如何保存_修改电脑IP地址方法
- 条码软件调用ERP系统
- 像Java这样的C ++具有低延迟
- Spring3.1+Quertz1.8实现多个计划任务
- Web前端笔记-2D图形平面内平移定位(two.js)
- 深入理解SpringBoot(1)
- oc c语言,OC之C语言的基础知识
- python 近期用到的基础知识汇总(六)
- centos7开启网卡命令_centos7如何启动网卡
- java 期刊杂志参考_各系列普刊期刊的推荐,大家可供参考
- 2005/2006/2007/2008/2009/2010/2012/2013/2014/2015/2016/2017/2018/2019/2020高德poi一级类别 二级类别 三级类别
- MCU之芯唐ARM9(转)
- 数据分析处理之词频统计
- ajax dojo deferred,Dojo学习-14:Ajax with dojo/request
- 初中学考英语听说计算机考试,2018中考英语听说计算机考试工作重要通知
- php tdd,用phpUnit入门TDD
- UG/NX二次开发 单位化向量 UF_VEC3_unitize
- [硬件选型] 工业镜头之参数和选型
- U3d 实现 邮箱发送
热门文章
- 物理机搭建黑群晖DSM6.2
- python实现朋友圈跟发_用Python发一个高逼格的朋友圈「附代码」
- 当Myelipse遇上Git(旺旺篇)
- 跨桌面端Web容器演进
- RStudio下载与安装
- #python注释代码对吗,以下Python注释代码不正确的是()。A.()#()Python注释代码()B.()#Python...
- jq循环判断input框
- 小程序销毁页面的方法
- oracle 读写分离 DG,数据库读写分离解决方案--DG实施方案范文
- 如何将mkv视频转换成mpg视频格式