VC Webbrowser操作全解(三)
3900 ワード
この章では、Webbrowserがユーザーのアップロードファイルをシミュレートする方法について説明します.
(8)アナログアップロードファイル
まず、ユーザーがアップロードボタンをクリックしてClickButtonメソッドを呼び出すことをシミュレートします.
URLロード完了メッセージでロード完了したURLを判断します.WebbrowserはUIホストプログラムと同じスレッドを共有しているので、判断が終わったらタイマーでブラウズボタンを呼び出すことができます.
タイマー:
アップロードファイル実装操作:アップロードインタフェースのiFrame要素ノード(以下コードのifr_popup 0はiFrame要素iD)を取得し、対応するブラウズボタンを取得し、選択ファイルをシミュレートした後、アップロード操作をクリックする
ブラウズファイルウィンドウの検出コード:
(9)時間コントロール(未完待機)
(8)アナログアップロードファイル
まず、ユーザーがアップロードボタンをクリックしてClickButtonメソッドを呼び出すことをシミュレートします.
nRet = ClickButton(_T("load_file('/fileWtWindow.jsp',' ')"), _T("input"), _T("onclick"), _T("myframe"));
URLロード完了メッセージでロード完了したURLを判断します.WebbrowserはUIホストプログラムと同じスレッドを共有しているので、判断が終わったらタイマーでブラウズボタンを呼び出すことができます.
BOOL OnUrlCompleteEvent(void* pParam)
{
std::wstring strURL = (wchar_t*)pParam;
DUI__Trace(_T("URL Finish:%s"), strURL.c_str());
//
if (strURL.find(_T("/fileWtWindow.jsp")) != std::string::npos)
{
//
SetTimer(m_hWnd, 0x107, 5000,NULL);
}
else if (strURL.find(_T("/fileUpload_returnFileResult.xhtml")) != std::string::npos)
{
SetTimer(m_hWnd, 0x11E, 5000, NULL);
}
return TRUE;
}
タイマー:
else if (wParam == 0x107)
{
KillTimer(m_hWnd, 0x107);
UploadFile( _T("fileWt"), _T("file_submit"), _T("G:\\trademark\\ .jpg"), _T("myframe"), UPLOAD_FILE_TYPE_AGENT);
}
アップロードファイル実装操作:アップロードインタフェースのiFrame要素ノード(以下コードのifr_popup 0はiFrame要素iD)を取得し、対応するブラウズボタンを取得し、選択ファイルをシミュレートした後、アップロード操作をクリックする
xny::Integer UploadFile(LPCTSTR lpEditName, LPCTSTR lpFunName, LPCTSTR lpFilePath, LPCTSTR lpParentName, UPLOAD_FILE_TYPE type)
{
xny::Integer nRet = nsny::eProbeErr::NYERR_FAIL;
do
{
//
//
CComPtrpElement = NULL;
CComPtr pIFrame = (IHTMLIFrameElement*)m_pWebBrowserEx->GetElementByName(_T("ifr_popup0"), lpParentName, IID_IHTMLIFrameElement);
if (pIFrame)
{
pElement = (IHTMLInputFileElement *)m_pWebBrowserEx->GetElementByName(lpEditName, pIFrame, IID_IHTMLInputFileElement);
}
if (pElement == 0) break;
//
m_strPath = lpFilePath;
m_upLoadFileType = type;
// ,
SetTimer(m_hWnd, 0x200, 2000, NULL);
VARIANT params[10];
VARIANT ret;
CWebBrowserEx::InvokeMethod(pElement, _T("click"), &ret, params, 0);
DUI__Trace(_T(" "));
//
ClickButton(_T("laodBut"), NULL, NULL, lpParentName, _T("ifr_popup0"));
//
} while (0);
return nRet;
}
ブラウズファイルウィンドウの検出コード:
//
else if (wParam == 0x200)
{
KillTimer(m_hWnd, 0x200);
//
HWND hWnd = FindWindow(L"#32770", L" ");
if (hWnd != NULL)
{
HWND hEdit = hWnd;
EnumChildWindows(hWnd, EnumEditProc, (LPARAM)m_strPath.c_str());
}
}
//
BOOL CALLBACK EnumEditProc(
HWND hWnd, // handle to child window
LPARAM lParam // application-defined value
)
{
TCHAR szClassName[256] = { 0 };
std::wstring strText = (LPCTSTR)lParam;
do
{
GetClassName(hWnd, szClassName, 256);
std::wstring strClassName = szClassName;
if (strClassName == L"Edit")
{
::SetWindowText(hWnd, strText.c_str());
LPTSTR lpszProgress = new TCHAR[strText.size() + 1];
_tcscpy_s(lpszProgress, strText.size() + 1, strText.c_str());
HRESULT hRet = ::SendMessage(hWnd, WM_SETTEXT, NULL, (LPARAM)lpszProgress);
if (hRet == CB_ERRSPACE)
{
DUI__Trace(_T("SetText Faild"));
}
delete[] lpszProgress;
lpszProgress = NULL;
}
else if (strClassName == L"Button")
{
TCHAR szWndText[256] = { 0 };
GetWindowText(hWnd, szWndText, 256);
std::wstring strWndText = szWndText;
if (strWndText.find(L" ") != -1 || strWndText.find(L"Open") != -1)
{
HRESULT hRet = ::SendMessage(hWnd, WM_LBUTTONDOWN, NULL, MAKELPARAM(50, 17));
hRet = ::SendMessage(hWnd, WM_LBUTTONUP, NULL, MAKELPARAM(50, 17));
if (hRet == 0)
{
DUI__Trace(_T(" "));
}
}
}
} while (0);
return true;
}
(9)時間コントロール(未完待機)