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