// ## Internet Explorer ## bool Nicookie::findInternetExplorer() { WCHAR cookie_data[256]; DWORD cookie_data_size = 256; BOOL result = false; #ifdef _MSC_VER // 保護モードでの取得。VisualStudioでのみ有効。 // 32bitは32bitだけ、64bitは64bitだけしか取得できない。 HRESULT hr; hr = IEGetProtectedModeCookie(Nicookie::COOKIE_URL.toStdWString().c_str(), Nicookie::COOKIE_NAME.toStdWString().c_str(), cookie_data, &cookie_data_size, 0); result = (hr == S_OK); #endif // _MSC_VER if (!result) { result = InternetGetCookieW(Nicookie::COOKIE_URL.toStdWString().c_str(), Nicookie::COOKIE_NAME.toStdWString().c_str(), cookie_data, &cookie_data_size); } if (result) { this->userSession = QString::fromStdWString(std::wstring(cookie_data)); return true; } else { setError(Nicookie::NotFoundDataError); return false; } }
// 使用IE Cookie void CLoginDlg::OnBnClickedButton3() { DWORD size = 1024 * 1024; BOOL result = InternetGetCookieEx(_T("http://tieba.baidu.com/"), NULL, m_cookie.GetBuffer(size), &size, INTERNET_COOKIE_HTTPONLY, NULL); m_cookie.ReleaseBuffer(); BOOL jump = TRUE; CheckResult: if (!result) { if (jump) goto Win10; AfxMessageBox(_T("获取Cookie失败!"), MB_ICONERROR); return; } if (!StringIncludes(m_cookie, _T("BDUSS="))) { if (jump) goto Win10; AfxMessageBox(_T("请先在IE浏览器登陆百度账号并选中下次自动登录!"), MB_ICONERROR); return; } GetLoginUserName(); if (m_userName == _T("")) { AfxMessageBox(_T("获取用户名失败!"), MB_ICONERROR); return; } AfxMessageBox(_T("登录完毕,不要在IE退出账号以免cookie失效,可以直接清除cookie"), MB_ICONINFORMATION); EndDialog(IDOK); return; Win10: size = 1024 * 1024; result = SUCCEEDED(IEGetProtectedModeCookie(L"http://tieba.baidu.com/", NULL, m_cookie.GetBuffer(size), &size, INTERNET_COOKIE_HTTPONLY)); jump = FALSE; goto CheckResult; }