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;

};


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部