前几天有个人找我用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=&param=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++版]相关推荐

  1. @transactional注解原理_《Spring源码解析(十二)》深入理解Spring事务原理,告别面试一问三不知的尴尬...

    本文将带领大家领略Spring事务的风采,Spring事务是我们在日常开发中经常会遇到的,也是各种大小面试中的高频题,希望通过本文,能让大家对Spring事务有个深入的了解,无论开发还是面试,都不会让 ...

  2. VC++获取磁盘剩余空间(附源码)

      VC++开发常用功能一系列文章 (欢迎订阅,持续更新...) 第23章:VC++获取磁盘剩余空间(附源码) 源代码demo已上传到百度网盘:永久生效  ,代码实现了获取任一磁盘的剩余空间,返回MB ...

  3. 获取整个网页的html源码

    #region 获取整个网页的html源码         public static string GetStringByUrl(string strUrl,string strEncode)   ...

  4. php天气源码_PHP获取城市天气API接口源码

    PHP获取城市天气API接口源码,接口调用的是微鲤的接口,2020年9月1日 10:11:07测试接口还可以正常使用. API查询接口代码<?php function tian(){ $city ...

  5. 只需两步获取任何微信小程序源码

    只需两步获取任何微信小程序源码 kedwan关注 12018.09.15 09:32:43字数 2,428阅读 3,946 转载自百家号作者:不忘初心lucy 第一次在掘金这样高大上的社区写文章,忐忑 ...

  6. 易语言免登录获取QQ/昵称/头像/在线状态源码

    易语言免登陆获取q资料卡的源码. 例子: 取得登录q  获取状态:在线 昵称 x7st 获取本人描述等 没有调用第三方接口,纯QQpost稳定,需要的可以下载查看 下载地址:https://6yunp ...

  7. 使用Python获取数字货币价格(附完整源码)

    使用Python获取数字货币价格(附完整源码) 如果你想要及时了解到加密货币的价格变化,你可以使用Python获取数字货币的实时价格.本文将介绍如何使用Python和CoinGecko API获取数字 ...

  8. mvcc原理_MVCC原理探究及MySQL源码实现分析

    沃趣科技数据库专家  董红禹 MVCC原理探究及MySQL源码实现分析 数据库多版本读场景 session 1 session 2 select a from test; return a = 10 ...

  9. ❤️缓存集合(一级缓存、二级缓存、缓存原理以及自定义缓存—源码+图文分析,建议收藏) ❤️

    ❤️缓存集合(一级缓存.二级缓存.缓存原理以及自定义缓存-源码+图文分析,建议收藏) ❤️ 查询 : 连接数据库 ,耗资源!一次查询的结果,给他暂存在一个可以直接取到的地方!--> 内存 : 缓 ...

最新文章

  1. 在linux上配置oracle9,ORACLE_9安装与删除( linux下)
  2. Leetcode51 n皇后 DFS+回溯(模板题)
  3. mysql 自后向前截取函数_【转载】Sqlserver使用Right函数从最右边向前截取固定长度字符串...
  4. 整数快速幂(原理+模板)
  5. 渴望成为架构师的你,或许需要与这些大咖来一场面基
  6. Oralce数据库计算工作日(处理假期及加班)
  7. JSP技术:表单及 POST 方法提交参数
  8. SCRUM敏捷开发教程
  9. base64编码将字符串转换为图片
  10. 电商分析需要重点关注的核心指标
  11. 【苹果鼠标滑轮失灵】解决办法
  12. 2010年中国十大网络电视排行榜(转)
  13. Ubuntu 编译XCB源码
  14. python爬虫记录
  15. 使用USBCAN通讯(转载)
  16. 【Unity3D】sRGB伽马(gamma)空间和sRGB Frame Buffer线性空间的简单介绍
  17. geany配置python_Geany配置python教程解析
  18. c语言用递归求奇数和,奇数正整数和的递归算法
  19. TabLayout 设置指示器宽度问题
  20. 【静态时序分析】如何寻找时序分析的起点与终点

热门文章

  1. 关于STM中SPI运用的NSS引脚解读
  2. Linux快捷键及文件和目录的操作
  3. java通过按钮打开新窗口_如何在java程序中,当点击一个按钮后,关闭当前窗口,开启一个新的窗口。...
  4. markdown语法中的空格_Markdown语法简明教程
  5. python定时发送邮件_Python3实现带附件的定时发送邮件功能
  6. python 3.5opencv 环境搭建_Python3.5+openCv进行人脸识别的环境搭建(Windows下)
  7. Kruskal+LCA【p2245】 星际导航
  8. Linux进入单用户模式(passwd root修改密码)
  9. 0728pm 控制器
  10. Beyond Compare 3 设置自动换行