VC Webbrowser 작업 전체 해제(3)
3988 단어 webbrowservc++
(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 popup0은 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) 시간 컨트롤(미완성)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
delphi 웹 브라우저 htmldocument 조작, 웹 인터페이스 조작텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.