본문 바로가기

전체 글

IWebBrowser2 사용시 화면 갱신이 잘 되지 않는 경우 IWebBrowser2 사용 시 navigate 후 화면이 이전 화면 또는 흰색으로 표시되는 경우가 있다. 물론 해당 url은 이미 로딩이 완료된 상태이고 윈도우를 리사이즈하거나 액션을 통해 갱신을 하는 경우 제대로 표시가 된다. 위와 같은 이슈의 근본적인 원인은 찾아내지 못했다. 강제로 painting 처리를 해주고 메시지를 날려주고 별 짓을 다 했지만 정상처리가 되지 않았고 어렴풋이 원인으로 보이는 부분은 해당 url의 캐시가 남아 있는 경우 즉 처음 로딩하는 페이지가 아닌 경우 자주 발생했다. host window의 OnPaint 시점과 OnDocumentComplate 시점의 차이로 간주하고 OnDocumentComplete에서 강제로 UpdateWindow() 함수를 호출 하는 것으로 이슈는 마.. 더보기
PassThroughAPP에서 cookie 정보 얻어오기 PassThroughAPP 사용 시 HTTP 응답에 대한 cookie 정보를 얻을 수 있다. PassThroughAPP를 상속받아 HttpFilterSink를 구현 할 때 // IInternetProtocolSink STDMETHODIMP ReportProgress(/* [in] */ ULONG ulStatusCode, /* [in] */ LPCWSTR szStatusText); 해당 함수를 재정의 하여 처리한다. ReportProgress에서 ulStatusCode값이 다음과 같은 경우 BINDSTATUS_COOKIE_STATE_ACCEPT, BINDSTATUS_COOKIE_STATE_LEASH HTTP_QUERY_RAW_HEADERS로 헤더 정보를 얻어와 "Set-Cookie:" 로 쿠키 정보를 찾아.. 더보기
GetActiveElement() IWebBrowser2 사용 시 현재 포커스가 있는 Element를 얻어오는 코드 조각 HRESULT ClassName::GetActiveElement(IHTMLElement** element0) { if (!element0) return E_INVALIDARG; HRESULT hr = E_FAIL; if (*element0) *element0 = NULL; CComQIPtr dispatch; hr = (*this)->get_Document(&dispatch); if (SUCCEEDED(hr) && dispatch) { CComQIPtr document2(dispatch); dispatch.Release(); while (document2) { CComQIPtr element; hr = document2.. 더보기
Document로부터 favicon url 정보 추출하기 template struct CaseInsensitiveCompare { public: bool operator()(Char x, Char y) const { return tolower(x) == tolower(y); } }; std::wstring GetFaviconUrlFromDocument(IHTMLDocument2* doc2) { if (!doc2) { return std::wstring(); } static std::wstring const linktag = L"LINK"; CComPtr ielemCol; CComPtr lnkelem; if (FAILED(doc2->get_all(&ielemCol))) { return std::wstring(); } CComPtr displink; CComQIP.. 더보기
CMake로 PCRE static library 생성하기 http://gladtosee.tistory.com/archive/20090220 더보기
Image File Execution options 출처: byung.egloos.com/3572751 Debugging은 분석도 중요하지만, Crash Dump를 수집하거나 적절한 시점에 Debugger를 attach 하는 것도 중요합니다. 특히 이미 실행중인 Process에 WinDBG 를 attach 하거나 cdb.exe(w/ ADPLUS.vbs) 를 통해 Memory Dump를 수집하는 방법은 널리 사용되는 방법입니다만 Program이 Start 시에 Crash 를 발생하고 Terminated 되는 경우도 Debugging을 해야 할 때가 있습니다. 이 경우에는 Image File Execution options을 이용하면 유용합니다. 설정은 아래와 같이 합니다. 1. Regedit.exe 를 Open 합니다. 2. 다음의 Registry Key로.. 더보기
code page 와 charset int GetCharsetFromLang( LANGID langid ) { switch( PRIMARYLANGID(langid) ) { case LANG_JAPANESE: return SHIFTJIS_CHARSET; case LANG_KOREAN: return HANGEUL_CHARSET; case LANG_CHINESE: { switch( SUBLANGID(langid) ) { case SUBLANG_CHINESE_SIMPLIFIED: return GB2312_CHARSET; case SUBLANG_CHINESE_TRADITIONAL: return CHINESEBIG5_CHARSET; } } case LANG_GREEK: return GREEK_CHARSET; case LANG_TURKISH: retu.. 더보기
듀얼모니터의 가상좌표 얻어오기 싱글 모니터의 경우는 다음과 같이 얻어 올 수 있다. left = 0; top = 0; right = GetSystemMetrics(SM_CXSREEEN); bottom = GetSystemMetrics(SM_CYSCREEN); 듀얼모니터의 경우 각각의 모니터 좌표가 아닌 전체 두개이상의 모니터를 합친 전체 영역의 좌표를 구할 필요가 있다. left = GetSystemMetrics(SM_XVIRTUALSCREEN); top = GetSystemMetrics(SM_YVIRTUALSCREEN); right = left + GetSystemMetrics(SM_CXVIRTUALSCREEN); bottom = top + GetSystemMetrics(SM_CYVIRTUALSCREEN); 모니터의 배치와 기본 위.. 더보기