bool IEView::mouseClick(POINT pt) { bool result = false; if (GetFocus() != hwnd) { getFocus = true; } IHTMLDocument2 *document = getDocument(); if (document != NULL) { IHTMLElement *element; if (SUCCEEDED(document->elementFromPoint( pt.x, pt.y, &element ))&& element!=NULL) { BSTR url = getHrefFromAnchor(element); if (url != NULL) { int i = wcslen(url); char *tTemp = new char[i+1]; WideCharToMultiByte(CP_ACP, 0, url, -1, tTemp, i+1, NULL, NULL); CallService(MS_UTILS_OPENURL, (WPARAM) 1, (LPARAM) tTemp); delete tTemp; free (url); result = true; } element->Release(); } document->Release(); } return result; }
BSTR IEView::getHrefFromAnchor(IHTMLElement *element) { if (element != NULL) { IHTMLAnchorElement * pAnchor; if (SUCCEEDED(element->QueryInterface(IID_IHTMLAnchorElement, (void**)&pAnchor)) && (pAnchor!=NULL)) { BSTR url; BSTR url2; pAnchor->get_href( &url ); if (url!=NULL) { url2 = wcsdup(url); SysFreeString(url); url = url2; } pAnchor->Release(); return url; } else { IHTMLElement * parent; if (SUCCEEDED(element->get_parentElement(&parent)) && (parent!=NULL)) { BSTR url = getHrefFromAnchor(parent); parent->Release(); return url; } } } return NULL; }
bool IEView::mouseClick(POINT pt) { bool result = false; if (GetFocus() != hwnd) { getFocus = true; } IHTMLDocument2 *document = getDocument(); if (document != NULL) { IHTMLElement *element; if (SUCCEEDED(document->elementFromPoint( pt.x, pt.y, &element ))&& element!=NULL) { // IHTMLAnchorElement * pAnchor; // if (SUCCEEDED(element->QueryInterface(IID_IHTMLAnchorElement, (void**)&pAnchor)) && (pAnchor!=NULL)) { // element->click(); // result = true; // pAnchor->Release(); // } BSTR url = getHrefFromAnchor(element); if (url != NULL) { if ((GetKeyState(VK_SHIFT) & 0x8000) && !(GetKeyState(VK_CONTROL) & 0x8000) && !(GetKeyState(VK_MENU) & 0x8000)) { SendMessage(GetParent(hwnd), WM_COMMAND, IDCANCEL, 0); } int i = wcslen(url); char *tTemp = new char[i+1]; WideCharToMultiByte(CP_ACP, 0, url, -1, tTemp, i+1, NULL, NULL); CallService(MS_UTILS_OPENURL, (WPARAM) 1, (LPARAM) tTemp); delete tTemp; delete url; result = true; } element->Release(); } document->Release(); } return result; }
/** * Returns the destination url (href) of the given anchor element (or parent anchor element) **/ BSTR IEView::getHrefFromAnchor(IHTMLElement *element) { if (element != NULL) { IHTMLAnchorElement * pAnchor; if (SUCCEEDED(element->QueryInterface(IID_IHTMLAnchorElement, (void**)&pAnchor)) && (pAnchor!=NULL)) { VARIANT variant; BSTR url; if (SUCCEEDED(element->getAttribute(L"href", 2, &variant) && variant.vt == VT_BSTR)) { url = Utils::dupString(variant.bstrVal); SysFreeString(variant.bstrVal); } //pAnchor->get_href( &url ); // if (url!=NULL) { // url2 = Utils::dupString(url); // SysFreeString(url); // url = url2; // } pAnchor->Release(); return url; } else { IHTMLElement * parent; if (SUCCEEDED(element->get_parentElement(&parent)) && (parent!=NULL)) { BSTR url = getHrefFromAnchor(parent); parent->Release(); return url; } } } return NULL; }
bool IEView::mouseClick(POINT pt) { bool result = false; if (GetFocus() != hwnd) { getFocus = true; } IHTMLDocument2 *document = getDocument(); if (document != NULL) { IHTMLElement *element; if (SUCCEEDED(document->elementFromPoint( pt.x, pt.y, &element ))&& element!=NULL) { // IHTMLAnchorElement * pAnchor; // if (SUCCEEDED(element->QueryInterface(IID_IHTMLAnchorElement, (void**)&pAnchor)) && (pAnchor!=NULL)) { // element->click(); // result = true; // pAnchor->Release(); // } BSTR url = getHrefFromAnchor(element); if (url != NULL) { if ((GetKeyState(VK_SHIFT) & 0x8000) && !(GetKeyState(VK_CONTROL) & 0x8000) && !(GetKeyState(VK_MENU) & 0x8000)) { SendMessage(GetParent(hwnd), WM_COMMAND, IDCANCEL, 0); } CallService(MS_UTILS_OPENURL, OUF_NEWWINDOW|OUF_TCHAR, (LPARAM) url); mir_free(url); result = true; } element->Release(); } document->Release(); } return result; }
/** * Returns the destination url (href) of the given anchor element (or parent anchor element) **/ WCHAR* IEView::getHrefFromAnchor(CComPtr<IHTMLElement> element) { if (element == NULL) return NULL; CComPtr<IHTMLAnchorElement> pAnchor; if (FAILED(element.QueryInterface(&pAnchor))) { VARIANT variant; WCHAR *url = NULL; if (SUCCEEDED(element->getAttribute(L"href", 2, &variant)) && variant.vt == VT_BSTR) { url = mir_wstrdup(variant.bstrVal); ::SysFreeString(variant.bstrVal); } return url; } CComPtr<IHTMLElement> parent; if (SUCCEEDED(element->get_parentElement(&parent)) && parent != NULL) return getHrefFromAnchor(parent); return NULL; }
bool IEView::mouseClick(POINT pt) { if (GetFocus() != hwnd) getFocus = true; CComPtr<IHTMLDocument2> document = getDocument(); if (document == NULL) return false; CComPtr<IHTMLElement> element; if (SUCCEEDED(document->elementFromPoint(pt.x, pt.y, &element)) && element != NULL) { ptrW url(getHrefFromAnchor(element)); if (url != NULL) { if ((GetKeyState(VK_SHIFT) & 0x8000) && !(GetKeyState(VK_CONTROL) & 0x8000) && !(GetKeyState(VK_MENU) & 0x8000)) SendMessage(GetParent(hwnd), WM_COMMAND, IDCANCEL, 0); Utils_OpenUrlT(url); return true; } } return false; }