qqkey获取原理_获取QQKEY源码[C++版]
前幾天有個人找我用E源碼轉(zhuǎn)成C++的? ?現(xiàn)在共享給大家。
原理很簡單??我也是照著別人給我的E源碼改的??就是利用IWebBrowser2沒什么難度
GetQQkeyDlg??用QQKEY的結(jié)構(gòu)體??里面有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;
};
總結(jié)
以上是生活随笔為你收集整理的qqkey获取原理_获取QQKEY源码[C++版]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图纸管理软件_图纸文件管理操作繁琐?巧用
- 下一篇: 数据包格式_理解MQTT协议数据包结构