qqkey获取原理_获取QQKEY源码[C++版]
前几天有个人找我用E源码转成C++的 现在共享给大家。
原理很简单 我也是照着别人给我的E源码改的 就是利用IWebBrowser2没什么难度
GetQQkeyDlg 用QQKEY的结构体 里面有QQ和KEY信息
核心代码
typedef struct _QQKey
{
CString QQ;
CString Key;
}QQkey;
BOOL CGetQQkeyDlg::GetQQkeyDlg(CArray *pArray)
{
::CoInitialize(NULL);
HMODULE hModule = LoadLibrary(L"atl");
void *FunAddr = GetProcAddress(hModule, "AtlAxWinInit");
_asm call FunAddr;
TCHAR szUrl[255] = L"http://xui.ptlogin2.qq.com/cgi-bin/qlogin?domain=qq.com&lang=2052&qtarget=0&jumpname=&ptcss=¶m=u1%253Dhttp%25253A%25252F%25252Fwww.qq.com%25252Fqq2012%25252FloginSuccess.htm&css=&mibao_css=&low_login=0";
HWND hWnd = CreateWindowEx(512, L"AtlAxWin", szUrl, 107374182, 10, 10, 300, 100, 0, 0, 0, 0);
if (NULL == hWnd)
{
::CoUninitialize();
return FALSE;
}
CComPtr pIunknown = NULL;
int ppIunknown = (int)&pIunknown;
HRESULT hRESULT;
FunAddr = GetProcAddress(hModule, "AtlAxGetControl");
_asm push ppIunknown;
_asm push hWnd;
_asm call FunAddr;
_asm mov hRESULT, eax;
if (!SUCCEEDED(hRESULT))
{
pIunknown.Release();
pIunknown = NULL;
::CoUninitialize();
return FALSE;
}
CComPtr pWebBrowser2 = NULL;
pIunknown->QueryInterface(IID_IWebBrowser2, (void **)&pWebBrowser2);
pWebBrowser2->put_Silent(TRUE);
READYSTATE rEADYSTATE;
do
{
pWebBrowser2->get_ReadyState(&rEADYSTATE);
ProcessMessagesx();
} while (READYSTATE_COMPLETE != rEADYSTATE);
CComPtr pIDispatch = NULL;
pWebBrowser2->get_Document(&pIDispatch);
CComPtr pIHTMLDocument2 = NULL;
pIDispatch->QueryInterface(IID_IHTMLDocument2, (void **)&pIHTMLDocument2);
CComPtr pHTMLWindow2 = NULL;
pIHTMLDocument2->get_parentWindow(&pHTMLWindow2);
CString strJs = L"javascript:for(var C=0;C
VARIANT ret = { 0 };
ret.vt = VT_EMPTY;
pHTMLWindow2->execScript(CComBSTR(strJs), L"JavaScript", &ret);
CComPtr pHTMLElement = NULL;
pIHTMLDocument2->get_body(&pHTMLElement);
CComBSTR cComBstr;
pHTMLElement->get_innerHTML(&cComBstr);
CString strText, strTempText;
strText = cComBstr;
QQkey SubKey = { 0 };
int nPos, nSubPos;
do
{
nPos = strText.Find(L"[分]");
strTempText = strText.Mid(0, nPos);
if (!strTempText.IsEmpty())
{
nSubPos = strTempText.Find(L",");
SubKey.QQ = strTempText.Left(nSubPos);
SubKey.Key = strTempText.Mid(nSubPos + 1, strTempText.GetLength() - nSubPos);
pArray->Add(SubKey);
}
strText.Delete(0, nPos + wcslen(L"[分]"));
} while (-1 != strText.Find(L"[分]"));
pHTMLElement = NULL;
pHTMLWindow2 = NULL;
pIHTMLDocument2 = NULL;
pIDispatch = NULL;
pWebBrowser2 = NULL;
pIunknown = NULL;
::SendMessage(hWnd, WM_CLOSE, 0, 0);
::CoUninitialize();
return TRUE;
}
BOOL CGetQQkeyDlg::ProcessMessagesx(void)
{
MSG Msg;
BOOL wm_quit = FALSE;
while (::PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE))
{
if ((Msg.message == WM_QUIT) || (Msg.message == WM_CLOSE))
{
wm_quit = TRUE;
break;
}
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return wm_quit;
};
qqkey获取原理_获取QQKEY源码[C++版]相关推荐
- @transactional注解原理_《Spring源码解析(十二)》深入理解Spring事务原理,告别面试一问三不知的尴尬...
本文将带领大家领略Spring事务的风采,Spring事务是我们在日常开发中经常会遇到的,也是各种大小面试中的高频题,希望通过本文,能让大家对Spring事务有个深入的了解,无论开发还是面试,都不会让 ...
- VC++获取磁盘剩余空间(附源码)
VC++开发常用功能一系列文章 (欢迎订阅,持续更新...) 第23章:VC++获取磁盘剩余空间(附源码) 源代码demo已上传到百度网盘:永久生效 ,代码实现了获取任一磁盘的剩余空间,返回MB ...
- 获取整个网页的html源码
#region 获取整个网页的html源码 public static string GetStringByUrl(string strUrl,string strEncode) ...
- php天气源码_PHP获取城市天气API接口源码
PHP获取城市天气API接口源码,接口调用的是微鲤的接口,2020年9月1日 10:11:07测试接口还可以正常使用. API查询接口代码<?php function tian(){ $city ...
- 只需两步获取任何微信小程序源码
只需两步获取任何微信小程序源码 kedwan关注 12018.09.15 09:32:43字数 2,428阅读 3,946 转载自百家号作者:不忘初心lucy 第一次在掘金这样高大上的社区写文章,忐忑 ...
- 易语言免登录获取QQ/昵称/头像/在线状态源码
易语言免登陆获取q资料卡的源码. 例子: 取得登录q 获取状态:在线 昵称 x7st 获取本人描述等 没有调用第三方接口,纯QQpost稳定,需要的可以下载查看 下载地址:https://6yunp ...
- 使用Python获取数字货币价格(附完整源码)
使用Python获取数字货币价格(附完整源码) 如果你想要及时了解到加密货币的价格变化,你可以使用Python获取数字货币的实时价格.本文将介绍如何使用Python和CoinGecko API获取数字 ...
- mvcc原理_MVCC原理探究及MySQL源码实现分析
沃趣科技数据库专家 董红禹 MVCC原理探究及MySQL源码实现分析 数据库多版本读场景 session 1 session 2 select a from test; return a = 10 ...
- ❤️缓存集合(一级缓存、二级缓存、缓存原理以及自定义缓存—源码+图文分析,建议收藏) ❤️
❤️缓存集合(一级缓存.二级缓存.缓存原理以及自定义缓存-源码+图文分析,建议收藏) ❤️ 查询 : 连接数据库 ,耗资源!一次查询的结果,给他暂存在一个可以直接取到的地方!--> 内存 : 缓 ...
最新文章
- 在linux上配置oracle9,ORACLE_9安装与删除( linux下)
- Leetcode51 n皇后 DFS+回溯(模板题)
- mysql 自后向前截取函数_【转载】Sqlserver使用Right函数从最右边向前截取固定长度字符串...
- 整数快速幂(原理+模板)
- 渴望成为架构师的你,或许需要与这些大咖来一场面基
- Oralce数据库计算工作日(处理假期及加班)
- JSP技术:表单及 POST 方法提交参数
- SCRUM敏捷开发教程
- base64编码将字符串转换为图片
- 电商分析需要重点关注的核心指标
- 【苹果鼠标滑轮失灵】解决办法
- 2010年中国十大网络电视排行榜(转)
- Ubuntu 编译XCB源码
- python爬虫记录
- 使用USBCAN通讯(转载)
- 【Unity3D】sRGB伽马(gamma)空间和sRGB Frame Buffer线性空间的简单介绍
- geany配置python_Geany配置python教程解析
- c语言用递归求奇数和,奇数正整数和的递归算法
- TabLayout 设置指示器宽度问题
- 【静态时序分析】如何寻找时序分析的起点与终点
热门文章
- 关于STM中SPI运用的NSS引脚解读
- Linux快捷键及文件和目录的操作
- java通过按钮打开新窗口_如何在java程序中,当点击一个按钮后,关闭当前窗口,开启一个新的窗口。...
- markdown语法中的空格_Markdown语法简明教程
- python定时发送邮件_Python3实现带附件的定时发送邮件功能
- python 3.5opencv 环境搭建_Python3.5+openCv进行人脸识别的环境搭建(Windows下)
- Kruskal+LCA【p2245】 星际导航
- Linux进入单用户模式(passwd root修改密码)
- 0728pm 控制器
- Beyond Compare 3 设置自动换行