|
실행 프로그램 내부에 브라우저 콘트롤을 포함해서 사용하는 것이 아니라
실행 프로그램의 버튼 글릭시 익스플로러 실행 파일이 실행되면서
get 방식이 아닌 post 방식으로 로그인 시킬려고 합니다.
VC++에서는 COM으로 아래 소스 함수를 사용하여 구현했었는데
C++ Builder 초보라 C++ Builder에서 사용하는 방법을 잘 모르겠네요.
C++ Builder에서 아래 함수와 같은 함수를 만들어 주시면 감사하겠습니다.
void CPOSTDlg::ExecuteExplorer(CString url, CString parameter)
{
// TODO: Add your command handler code here
COleVariant varEmpty;
HRESULT hr;
IWebBrowserApp * pWBApp = NULL;
BSTR bstrURL = NULL, bstrHeaders = NULL;
VARIANT vFlags = {0},
vTargetFrameName = {0},
vPostData = {0},
vHeaders = {0};
LPSAFEARRAY psa;
UINT cElems;
LPSTR pPostData;
LPCTSTR cszPostData;
CString strDate;
CString PostData;
if (FAILED(hr = CoInitialize(NULL)))
{
goto Error;
}
if (FAILED(hr = CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_SERVER, IID_IWebBrowserApp, (LPVOID*) &pWBApp)))
{
goto Error;
}
bstrURL = SysAllocString(_bstr_t(url));
if (!bstrURL)
{
goto Error;
}
bstrHeaders = SysAllocString(L"Content-Type: application/x-www-form-urlencoded\r\n");
if (!bstrHeaders)
{
goto Error;
}
V_VT(&vHeaders) = VT_BSTR;
V_BSTR(&vHeaders) = bstrHeaders;
// GetPostData 부분(아이디나 패스워드 등 있으면 여기 추가시켜주면 되겠죠)
PostData = parameter;
cszPostData = PostData;
cElems = lstrlen(cszPostData);
if (!&vPostData)
{
goto Error;
}
VariantInit(&vPostData);
psa = SafeArrayCreateVector(VT_UI1, 0, cElems);
if (!psa)
{
goto Error;
}
hr = SafeArrayAccessData(psa, (LPVOID*) &pPostData);
memcpy(pPostData, cszPostData, cElems);
hr = SafeArrayUnaccessData(psa);
V_VT(&vPostData) = VT_ARRAY | VT_UI1;
V_ARRAY(&vPostData) = psa;
//네비게이트 함수 호출 뒤에.. Visible을 같이 써줘야 창이 보이네여
pWBApp->Navigate(bstrURL, &vFlags, &vTargetFrameName, &vPostData, &vHeaders);
pWBApp->put_Visible(VARIANT_TRUE);
Error:
if (bstrURL) SysFreeString(bstrURL);
if (bstrHeaders) SysFreeString(bstrHeaders);
VariantClear(&vPostData);
if (pWBApp) pWBApp->Release();
CoUninitialize();
}
|