HRESULT WebBrowserEventSinker::SetCustomDocUIHandler(LPDISPATCH lpDisp) { if(lpDisp == NULL) return E_INVALIDARG; IWebBrowser2Ptr pWebBrowser2; HRESULT hr = lpDisp->QueryInterface(IID_IWebBrowser2, (void**)&pWebBrowser2); if(SUCCEEDED(hr) && pWebBrowser2) { IDispatchPtr pDoc; hr = pWebBrowser2->get_Document(&pDoc); if(SUCCEEDED(hr) && pDoc) { ICustomDocPtr pCustDoc; hr = pDoc->QueryInterface(IID_ICustomDoc, (void**)&pCustDoc); if(SUCCEEDED(hr) && pCustDoc != NULL) { IDocHostUIHandler* pUIHandler; CreateObjectInterface<CDocHostUIHandler, IDocHostUIHandler>(NULL, &pUIHandler); if (pUIHandler) pCustDoc->SetUIHandler(pUIHandler); pUIHandler->Release(); } } } return hr; }
HRESULT vmsDomHelper::GetWindowDocument(IHTMLWindow2* pWnd, IHTMLDocument2** ppDoc) { assert (pWnd != NULL && ppDoc != NULL); if (!ppDoc) return E_INVALIDARG; *ppDoc = NULL; if (!pWnd) return E_INVALIDARG; HRESULT hr = pWnd->get_document (ppDoc); if (*ppDoc) return hr; IWebBrowser2Ptr spWB; GetWebBrowser (pWnd, &spWB); if (spWB != NULL) { IDispatchPtr spdDoc; spWB->get_Document (&spdDoc); if (spdDoc != NULL) { spdDoc->QueryInterface (IID_IHTMLDocument2, (void**)ppDoc); if (*ppDoc) hr = S_OK; } } return hr; }
SolidEdgeConstants::ObjectType GetObjectType(IDispatchPtr pDispatch) { HRESULT hr = S_OK; if (pDispatch != NULL) { DISPID rgDispId = 0; OLECHAR *Names[1] = { L"Type" }; VARIANT varResult; VariantInit(&varResult); V_VT(&varResult) = VT_I4; DISPPARAMS disp = { NULL, NULL, 0, 0 }; // Get the DISPID of the 'Type' property. IfFailGo(pDispatch->GetIDsOfNames(IID_NULL, Names, 1, LOCALE_USER_DEFAULT, &rgDispId)); // Invoke the 'Type' property. IfFailGo(pDispatch->Invoke(rgDispId, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &disp, &varResult, NULL, NULL)); return (SolidEdgeConstants::ObjectType)(V_I4(&varResult)); } Error: return (SolidEdgeConstants::ObjectType)0; }
HRESULT GenericCLRLoader::CreateCOMObject(const ATL::CString& sAssemblyFile, const ATL::CString& sAssemblyName, const ATL::CString& sTypeName, IUnknown** ppIUnk, const ATL::CString& sConfigFile , const ATL::CString& sDomainName , int LocaleID ) { mscorlib::_ObjectHandlePtr spObjectHandle; HRESULT hr = GenericCLRLoader::TheInstance()->CreateObject(sAssemblyFile, sAssemblyName, sTypeName, &spObjectHandle, sConfigFile, sDomainName, LocaleID); if (SUCCEEDED(hr) && (spObjectHandle != NULL)) { CComVariant vUnwrapped; spObjectHandle->Unwrap(&vUnwrapped); if(vUnwrapped.vt == VT_DISPATCH) { IDispatchPtr pDisp = vUnwrapped.pdispVal; return pDisp->QueryInterface(IID_IUnknown, (void**)ppIUnk); } if (vUnwrapped.vt == VT_UNKNOWN) { *ppIUnk = vUnwrapped.punkVal; (*ppIUnk)->AddRef(); return S_OK; } return E_NOINTERFACE; } if (SUCCEEDED(hr) && spObjectHandle == NULL) return E_POINTER; return hr; }
HRESULT nsScriptablePeer::GetIDispatch(IDispatch **pdisp) { if (pdisp == NULL) { return E_INVALIDARG; } *pdisp = NULL; IUnknownPtr unk; HRESULT hr = mPlugin->pControlSite->GetControlUnknown(&unk); if (unk.GetInterfacePtr() == NULL) { return E_FAIL; } IDispatchPtr disp = unk; if (disp.GetInterfacePtr() == NULL) { return E_FAIL; } *pdisp = disp.GetInterfacePtr(); (*pdisp)->AddRef(); return S_OK; }
STDMETHODIMP_(void) CPdnWnd::NavigateComplete2(IDispatch *pDisp, VARIANT *URL) { IDispatchPtr pDocDisp; ICustomDoc* pCustomDoc; m_pBrowser->get_Document(&pDocDisp); pDocDisp->QueryInterface(IID_ICustomDoc, (LPVOID*) &pCustomDoc); HRESULT hr = pCustomDoc->SetUIHandler(dynamic_cast<IDocHostUIHandler*>(this)); pCustomDoc->Release(); }
const Interface * Reference::findInterfaceFromDispatch (IUnknown *pUnknown) { HRESULT hr; // See if the object implements IDispatch. IDispatchPtr pDispatch; hr = pUnknown->QueryInterface( IID_IDispatch, reinterpret_cast<void **>(&pDispatch)); if (FAILED(hr)) { return 0; } // Ask the IDispatch interface for type information. unsigned count; hr = pDispatch->GetTypeInfoCount(&count); if (hr == E_NOTIMPL) { return 0; } if (FAILED(hr)) { _com_issue_error(hr); } if (count == 0) { return 0; } ITypeInfoPtr pTypeInfo; hr = pDispatch->GetTypeInfo( 0, LOCALE_USER_DEFAULT, &pTypeInfo); if (FAILED(hr)) { _com_issue_error(hr); } // Get the interface description. TypeAttr typeAttr(pTypeInfo); if (IsEqualIID(typeAttr->guid, __uuidof(DotNetObject))) { // The .NET Framework implements IDispatch::GetTypeInfo for classes // declared with the attribute ClassInterface(ClassInterfaceType.None) // by returning a description of the _Object interface. return 0; } const Interface *pInterface = InterfaceManager::instance().newInterface(typeAttr->guid, pTypeInfo); if (pInterface->methods().empty() && pInterface->properties().empty()) { // No invokable methods or properties where found in the interface // description. return 0; } return pInterface; }
HRESULT CMObject::GetActiveObject(const CLSID clsid) { HRESULT hr; IDispatchPtr tmpobj; Release(); hr=tmpobj.GetActiveObject(clsid); if(SUCCEEDED(hr)) p=tmpobj.Detach(); return hr; }
HRESULT CMObject::CreateObject(const CLSID clsid) { HRESULT hr; IDispatchPtr tmpobj; Release(); hr=tmpobj.CreateInstance(clsid); if (SUCCEEDED(hr)) p=tmpobj.Detach(); return hr; }
void TestPowerPointControllerImpl::TestNewInstance() { IDispatchPtr spApplication(_T("PowerPoint.Application")); assertMessage(spApplication != NULL, _T("Failed to create an instance of [PowerPoint.Application]")); CControllerImplPtr spImplementor(CreateImplementor()); spImplementor->m_bUseExistingInstance = false; spImplementor->Initialize(); IDispatchPtr spHostApplication = spImplementor->GetApplication(); assertMessage(spHostApplication.GetInterfacePtr() != spApplication.GetInterfacePtr(), _T("CPowerPointControllerImpl::GetApplication did not create a new instance of PowerPoint.")); }
void TestPowerPointControllerImpl::TestUseExistingInstance() { IDispatchPtr spApplication(_T("PowerPoint.Application")); assertMessage(spApplication != NULL, _T("Failed to create an instance of [PowerPoint.Application]")); CControllerImplPtr spImplementor(CreateImplementor()); spImplementor->m_bUseExistingInstance = true; spImplementor->Initialize(); IDispatchPtr spHostApplication = spImplementor->GetApplication(); // There is a problem getting the current instance of PowerPoint 97; hence the instance returned will be nil. assertMessage(spHostApplication.GetInterfacePtr() != spApplication.GetInterfacePtr(), _T("CPowerPointControllerImpl::GetApplication should not return the existing instance of PowerPoint 97.")); }
HRESULT CMObject::GetActiveObject(LPCTSTR objName) { HRESULT hr; IDispatchPtr tmpobj; Release(); #ifdef _UNICODE hr=tmpobj.GetActiveObject((LPOLESTR)objName); #else hr=tmpobj.GetActiveObject(objName); #endif if(SUCCEEDED(hr)) p=tmpobj.Detach(); return hr; }
HRESULT CMObject::CreateObject(LPCTSTR objName) { HRESULT hr; IDispatchPtr tmpobj; Release(); #ifdef _UNICODE hr=tmpobj.CreateInstance( (LPOLESTR)objName); #else hr=tmpobj.CreateInstance((LPCSTR)objName); #endif if (SUCCEEDED(hr)) p=tmpobj.Detach(); return hr; }
void CNetRadioDlg::OnBnClickedTest() { CString strValue; IHTMLDocument2* pDoc = (IHTMLDocument2*)m_Browser.GetHtmlDocument(); HRESULT hr = S_FALSE; IHTMLElementCollection* pAllElem = NULL; IHTMLElementCollection* pAllScript = NULL; IHTMLElement* pElem = NULL; hr = pDoc->get_scripts(&pAllScript); if(SUCCEEDED(hr) && pAllScript != NULL) { IDispatchPtr pElemDisp = NULL; _variant_t varID(1); _variant_t varIdx(0); hr = pAllScript->item(varID, varIdx, &pElemDisp); if(SUCCEEDED(hr) && pElemDisp != NULL) { hr = pElemDisp->QueryInterface(IID_IHTMLElement,(void**)&pElem); if(SUCCEEDED(hr) && pElem != NULL) { BSTR bstrTagName; hr = pElem->get_outerHTML(&bstrTagName); hr = pElem->get_outerHTML(&bstrTagName); if(SUCCEEDED(hr)) { CString strTagName(bstrTagName); SysFreeString(bstrTagName); MessageBox(strTagName); } } } } hr = pDoc->get_all(&pAllElem); if(SUCCEEDED(hr) && pAllElem != NULL) { IDispatchPtr pElemDisp = NULL; _variant_t varID(_T("body")); _variant_t varIdx(0); hr = pAllElem->item(varID, varIdx, &pElemDisp); if(SUCCEEDED(hr) && pElemDisp != NULL) { MessageBox(_T("OK")); } } }
bool CExcelDOMStripperStrategy::Excel2007MarkedAsFinal(IDispatchPtr spDispWorkbook) { if (Excel2007(spDispWorkbook)) { DISPID dispid = 0; LPOLESTR propertyName = L"Final"; HRESULT hr = spDispWorkbook->GetIDsOfNames(IID_NULL, &propertyName, 1, LOCALE_SYSTEM_DEFAULT, &dispid); if(FAILED(hr)) { std::tostringstream msg; msg << _T("Failed to obtain the dispid of the [Final] property on the Workbook.") << std::ends; throw Workshare::Com::ComException(msg.str().c_str(), hr, spDispWorkbook); } short value = 0; hr = _com_dispatch_propget(spDispWorkbook, dispid, VT_BOOL, (void*)&value); if(FAILED(hr)) { std::tostringstream msg; msg << _T("Failed to obtain the [Final] property on the Workbook.") << std::ends; throw Workshare::Com::ComException(msg.str().c_str(), hr, spDispWorkbook); } if (value == -1) return true; } return false; }
bool vmsDomHelper::IsJSFunctionKnown(IHTMLDocument *pDoc, BSTR bsFuncName) { ATLASSERT (pDoc != NULL); if (!pDoc) return false; IDispatchPtr spScript; HRESULT hr = pDoc->get_Script (&spScript); if (spScript == NULL) return false; DISPID did = NULL; hr = spScript->GetIDsOfNames (IID_NULL, &bsFuncName, 1, LOCALE_SYSTEM_DEFAULT, &did); return SUCCEEDED (hr); }
bool CCOMDispatchHelper::DoesMethodExistOnInterface(const IDispatchPtr& spDisp, LPCTSTR lszMethodName) { USES_CONVERSION; DISPID rgDispId = 0; OLECHAR FAR* szMember = T2OLE(const_cast<LPTSTR>(lszMethodName)); HRESULT hr = spDisp->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_SYSTEM_DEFAULT, &rgDispId); return (S_OK == hr && -1 != rgDispId); }
void CWebWindow::TryLoadXML() { if(m_bQueryAttachXML&&m_AttachLoadXML.Length()) { HRESULT hr = S_OK; IUnknownPtr spUnk = m_browser.GetControlUnknown(); ///////// // Run Script //////// if(spUnk) { CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> spWB2(spUnk); if(spWB2) { IDispatchPtr spDispDoc = NULL; hr = spWB2->get_Document(&spDispDoc); if(spDispDoc) { CComQIPtr<IHTMLDocument, &IID_IHTMLDocument> spDoc(spDispDoc); if(spDoc) { IDispatchPtr spDispScript = NULL; hr = spDoc->get_Script(&spDispScript); if(spDispScript) { DISPID dispid = -1; OLECHAR FAR* szMember = L"LoadXML"; hr = spDispScript->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_SYSTEM_DEFAULT, &dispid); if(SUCCEEDED(hr)) { CComVariant* pvars = new CComVariant[1]; pvars[0] = CComVariant((BSTR)m_AttachLoadXML); DISPPARAMS params = { pvars, NULL, 1, 0 }; hr = spDispScript->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, ¶ms, NULL, NULL, NULL); delete []pvars; } } } } } } } }
CardVideoObjects::_UserPtr CCardVideoSystem::GetUser(LPCTSTR strCardNumber) { ASSERT(0 != m_pSystem); CardVideoObjects::_UserPtr pUser; IDispatchPtr pDispatch; pDispatch = m_pSystem->GetUserByCardNumber(_bstr_t(strCardNumber)); if (pDispatch) { pDispatch.QueryInterface(CardVideoObjects::IID__User,&pUser); pDispatch.Release(); if (0 != pUser) { return pUser; } } return (CardVideoObjects::_UserPtr)0; }
/* void setProperty (in string propertyName, in string propertyValue); */ NS_IMETHODIMP nsScriptablePeer::SetProperty(const char *propertyName, nsIVariant *propertyValue) { HRESULT hr; DISPID dispid; IDispatchPtr disp; if (FAILED(GetIDispatch(&disp))) { return NPERR_GENERIC_ERROR; } USES_CONVERSION; OLECHAR* szMember = A2OLE(propertyName); hr = disp->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_USER_DEFAULT, &dispid); if (FAILED(hr)) { return NPERR_GENERIC_ERROR; } _variant_t v; ConvertVariants(propertyValue, &v); DISPID dispIdPut = DISPID_PROPERTYPUT; DISPPARAMS functionArgs; _variant_t vResult; functionArgs.rgdispidNamedArgs = &dispIdPut; functionArgs.rgvarg = &v; functionArgs.cArgs = 1; functionArgs.cNamedArgs = 1; hr = disp->Invoke( dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPUT, &functionArgs, &vResult, NULL, NULL); if (FAILED(hr)) { return NPERR_GENERIC_ERROR; } return NS_OK; }
HRESULT vmsDomHelper::ExecJScript(IHTMLDocument *pDoc, BSTR bstrFuncName, const vector <CComVariant>& vArgs, CComVariant &vaResult) { ATLASSERT (pDoc != NULL); if (!pDoc) return E_INVALIDARG; IDispatchPtr spScript; HRESULT hr = pDoc->get_Script (&spScript); if (spScript == NULL) return hr; DISPID did = NULL; hr = spScript->GetIDsOfNames (IID_NULL, &bstrFuncName, 1, LOCALE_SYSTEM_DEFAULT, &did); if (FAILED (hr)) return hr; DISPPARAMS dparams; ZeroMemory (&dparams, sizeof (dparams)); dparams.cArgs = vArgs.size (); if (dparams.cArgs) dparams.rgvarg = new VARIANT [dparams.cArgs]; for (int i = 0; i < vArgs.size (); i++) { CComVariant vaTmp; vaTmp.Copy (&vArgs [vArgs.size () - i - 1]); VariantInit (&dparams.rgvarg [i]); vaTmp.Detach (&dparams.rgvarg [i]); } EXCEPINFO ei; ZeroMemory (&ei, sizeof (ei)); UINT nArgErr = (UINT)-1; hr = spScript->Invoke (did, IID_NULL, 0, DISPATCH_METHOD, &dparams, &vaResult, &ei, &nArgErr); if (dparams.rgvarg) { for (int i = 0; i < dparams.cArgs; i++) VariantClear (&dparams.rgvarg [i]); delete [] dparams.rgvarg; } return hr; }
HRESULT vmsDomHelper::GetParentDocument(IHTMLDocument2 *pDoc, IHTMLDocument2 **ppParentDoc) { *ppParentDoc = NULL; ATLASSERT (pDoc != NULL); if (!pDoc) return E_INVALIDARG; IHTMLWindow2Ptr spWnd; HRESULT hr = pDoc->get_parentWindow (&spWnd); if (FAILED (hr)) return hr; IHTMLWindow2Ptr spWndParent; hr = spWnd->get_parent (&spWndParent); if (FAILED (hr)) return hr; hr = spWndParent->get_document (ppParentDoc); if (hr == E_ACCESSDENIED) { IWebBrowser2Ptr spWB; hr = GetWebBrowser (spWndParent, &spWB); if (FAILED (hr)) return E_ACCESSDENIED; IDispatchPtr spdDoc; hr = spWB->get_Document (&spdDoc); if (FAILED (hr)) return hr; hr = spdDoc->QueryInterface (IID_IHTMLDocument2, (void**)ppParentDoc); } if (FAILED (hr)) return hr; IUnknownPtr spUnk1 (pDoc); IUnknownPtr spUnk2 (*ppParentDoc); if (pDoc == *ppParentDoc || spUnk1 == spUnk2) { (*ppParentDoc)->Release (); *ppParentDoc = NULL; } return S_OK; }
NS_IMETHODIMP nsScriptablePeer::GetProperty(const char *propertyName, nsIVariant **_retval) { HRESULT hr; DISPID dispid; IDispatchPtr disp; if (FAILED(GetIDispatch(&disp))) { return NPERR_GENERIC_ERROR; } USES_CONVERSION; OLECHAR* szMember = A2OLE(propertyName); hr = disp->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_USER_DEFAULT, &dispid); if (FAILED(hr)) { return NPERR_GENERIC_ERROR; } _variant_t vResult; DISPPARAMS dispparamsNoArgs = {NULL, NULL, 0, 0}; hr = disp->Invoke( dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &dispparamsNoArgs, &vResult, NULL, NULL); if (FAILED(hr)) { return NPERR_GENERIC_ERROR; } nsCOMPtr<nsIVariant> propertyValue; ConvertVariants(&vResult, getter_AddRefs(propertyValue)); *_retval = propertyValue; NS_IF_ADDREF(*_retval); return NS_OK; }
_bstr_t RunMatlab( char* strMFile ) { CoInitialize(NULL); _bstr_t ret; //ensure the smarter pointer is destroyed before CoUninitialize { IDispatchPtr spDisp; spDisp.CreateInstance( "Matlab.Application.Single" ); DIMLAppPtr spMatlabApp; spDisp.QueryInterface( __uuidof(spDisp), &spMatlabApp ); spDisp = NULL; spMatlabApp->Execute( _bstr_t("rand(seed, 999)") ); ret = spMatlabApp->Execute( _bstr_t(strMFile) ); } CoUninitialize(); return ret; }
HRESULT CCOMDispatchHelper::AutoWrap(int autoType, VARIANT* pvResult, const IDispatchPtr& spDisp, LPOLESTR ptName, int cArgs...) { if(spDisp == 0) return E_INVALIDARG; va_list marker; va_start(marker, cArgs); DISPPARAMS dp = { NULL, NULL, 0, 0 }; DISPID dispidNamed = DISPID_PROPERTYPUT; DISPID dispID; HRESULT hr; TCHAR szName[MAX_PATH]; WideCharToMultiByte(CP_ACP, 0, ptName, -1, (LPSTR)szName, 256, NULL, NULL); hr = spDisp->GetIDsOfNames(IID_NULL, &ptName, 1, LOCALE_USER_DEFAULT, &dispID); RETURN_FAILED(hr); VARIANT *pArgs = new VARIANT[cArgs+1]; for(int i=0; i<cArgs; i++) pArgs[i] = va_arg(marker, VARIANT); dp.cArgs = cArgs; dp.rgvarg = pArgs; if(autoType & DISPATCH_PROPERTYPUT) { dp.cNamedArgs = 1; dp.rgdispidNamedArgs = &dispidNamed; } hr = spDisp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, autoType, &dp, pvResult, NULL, NULL); va_end(marker); delete [] pArgs; return hr; }
NS_IMETHODIMP nsScriptablePeer::InternalInvoke(const char *aMethod, unsigned int aNumArgs, nsIVariant *aArgs[]) { HRESULT hr; DISPID dispid; IDispatchPtr disp; if (FAILED(GetIDispatch(&disp))) { return NPERR_GENERIC_ERROR; } USES_CONVERSION; OLECHAR* szMember = A2OLE(aMethod); hr = disp->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_USER_DEFAULT, &dispid); if (FAILED(hr)) { return NPERR_GENERIC_ERROR; } _variant_t *pArgs = NULL; if (aNumArgs > 0) { pArgs = new _variant_t[aNumArgs]; if (pArgs == NULL) { return NS_ERROR_OUT_OF_MEMORY; } for (unsigned int i = 0; i < aNumArgs; i++) { hr = ConvertVariants(aArgs[i], &pArgs[i]); if (FAILED(hr)) { delete []pArgs; return NS_ERROR_INVALID_ARG; } } } DISPPARAMS dispparams = {NULL, NULL, 0, 0}; _variant_t vResult; dispparams.cArgs = aNumArgs; dispparams.rgvarg = pArgs; hr = disp->Invoke( dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &dispparams, &vResult, NULL, NULL); if (pArgs) { delete []pArgs; } if (FAILED(hr)) { return NPERR_GENERIC_ERROR; } return NS_OK; }
HRESULT CSaveAsObject::PopulateContextItemsEx(IContextItemsPtr& pContextItems, DocProviderWorker* pWorker, IManDocumentPtr& pBaseDocument, long lFormatIndex, const CStdString& sFormatString, const CStdString& sDescription, IManSessionPtr& pSession, const CStdString& sFilename) { HRESULT hr = E_FAIL; try { hr = pContextItems.CreateInstance(__uuidof(ContextItems)); if(pContextItems == NULL) { LOG_WS_ERROR(_T("Context object is null")) ; return hr; } IManDatabasePtr pDatabase; if (NULL != pBaseDocument) { pDatabase = pBaseDocument->Database; } else { pDatabase = pSession->PreferredDatabase; } // Makes IW bring up supplemental dialog for .doc files if this line is omitted -> find out why IB/JC removed it _bstr_t bstrAppType = GetApplicationIDFromFileName(pDatabase, sFilename); PopulateContextItems(pContextItems, L"IManExt.Import.DocType", bstrAppType); if (!m_hWnd) { m_hWnd = GetDesktopWindow(); } hr = PopulateContextItems(pContextItems, L"ParentWindow", (long)m_hWnd); if (FAILED(hr)) { return hr; } IDispatchPtr pDMSDisp = pWorker->GetSessionsMgr()->GetNRTDMS().GetInterfacePtr(); if (pDMSDisp == NULL) { LOG_WS_ERROR(_T("QI for NRTDMS failed")); return S_FALSE; } hr = PopulateContextItems(pContextItems, L"IManDMS", pDMSDisp.GetInterfacePtr()); if (FAILED(hr)) { return hr; } hr = PopulateContextItems(pContextItems, L"IManExt.Import.DocDescription", (LPCTSTR) sDescription); if (FAILED(hr)) { return hr; } hr = PopulateContextItems(pContextItems, L"IManExt.Import.InheritSecurity", _T("True")); if (FAILED(hr)) { return hr; } if(IsAutoProfiling()) { hr = PopulateContextItems(pContextItems, L"IManExt.Import.DocAuthor", pSession->GetUserID()); if (FAILED(hr)) { return hr; } CStdString sDefaultDocClass = L"doc"; CStdString sAlternateFlagName = m_bConversion ? L"InterwovenUseConversionAlternateClassName" : L"InterwovenUseAlternateClassName"; CStdString sAlternateOptionClassName = m_bConversion ? L"InterwovenConversionAlternateClassName" : L"InterwovenAlternateClassName"; if (Workshare::OptionApi::GetBool(sAlternateFlagName)) { CStdString sClass = Workshare::OptionApi::GetString(sAlternateOptionClassName); if (!sClass.IsEmpty()) sDefaultDocClass = sClass; } hr = PopulateContextItems(pContextItems, L"IManExt.Import.DocClass", (LPCTSTR) sDefaultDocClass); if (FAILED(hr)) { return hr; } hr = PopulateContextItems(pContextItems, L"IManExt.Import.DocSubclass", (LPCTSTR) CIManageUtils::GetSubClassName(pDatabase, sDefaultDocClass)); if (FAILED(hr)) { return hr; } if ((pBaseDocument == NULL) && !m_sBaseFolderPath.IsEmpty()) { PopulateContextItems(pContextItems, L"IManExt2.DefaultLocation", m_sBaseFolderPath.c_str()); } } CSDSafeArray SDSafeArray; long lVectorIndex = CreateFileTypesSafeArray(sFormatString, SDSafeArray, lFormatIndex); hr = PopulateContextItems(pContextItems, L"IManExt.SaveAsOptionCmd.SaveAsTypesArray", SDSafeArray.AsVariant()); if (FAILED(hr)) { return hr; } PopulateContextItems(pContextItems, L"IManExt.SaveAsOptionCmd.SaveAsTypesIndex", lVectorIndex - 1L); } catch(_com_error& e) { CStdString sErr; sErr.Format(_T("Error %s. File description: %s."), e.ErrorMessage(), sDescription.c_str()); LOG_WS_ERROR(sErr.c_str()); return e.Error(); } return hr; // Set objCommand = New IMANEXTLib.ImportCmd //Set objContextItems = New IMANEXTLib.contextItems //objContextItems.Add "IManDestinationObject", db //objContextItems.Add "IManExt.Import.FileName", importPath //objContextItems.Add "IManExt.Import.DocAuthor", "jholehouse" //objContextItems.Add "IManExt.Import.DocOperator", sess.UserID //objContextItems.Add "IManExt.Import.DocDescription", importPath //objContextItems.Add "IManExt.Import.DocClass", "Delete" //objContextItems.Add "IManExt.Import.Custom2", "L10638" //objContextItems.Add "IManExt.Import.DocType", "WORD" //objContextItems.Add "IManExt.Import.Comment", "this is a test" //objContextItems.Add "IManExt.Import.InheritSecurity", True }
HRESULT STDMETHODCALLTYPE BrowserEvents2::Invoke( /* [in] */ DISPID dispId, /* [in] */ REFIID riid, /* [in] */ LCID lcid, /* [in] */ WORD wFlags, /* [out][in] */ DISPPARAMS *pDispParams, /* [out] */ VARIANT *pVarResult, /* [out] */ EXCEPINFO *pExcepInfo, /* [out] */ UINT *puArgErr) { // When returning a result, you must check whether pVarResult // is not NULL and initialize it using VariantInit(). If it's // NULL then it doesn't expect a result. if (riid != IID_NULL) return DISP_E_UNKNOWNINTERFACE; pExcepInfo = 0; puArgErr = 0; HRESULT hr; json_value* settings = GetApplicationSettings(); if (dispId == DISPID_NEWWINDOW3) { /* When calling window.open() you get an error "Class not registered". Before this error appears DWebBrowserEvents2::NewWindow3 event is dispatched, you need to create the popup window in this event and assign the dispatch interface of the new popup browser to the first parameter of NewWindow3. */ LOG_DEBUG << "BrowserEvents2::NewWindow3()"; if (pDispParams->cArgs != 5) { LOG_WARNING << "BrowserEvents2::NewWindow3() failed: " "Expected 5 arguments"; _ASSERT(false); return DISP_E_BADPARAMCOUNT; } // ppDisp _ASSERT(pDispParams->rgvarg[4].vt == (VT_DISPATCH | VT_BYREF)); // Cancel _ASSERT(pDispParams->rgvarg[3].vt == (VT_BOOL | VT_BYREF)); // dwFlags _ASSERT(pDispParams->rgvarg[2].vt == VT_I4); // bstrUrlContext _ASSERT(pDispParams->rgvarg[1].vt == VT_BSTR); // bstrUrl _ASSERT(pDispParams->rgvarg[0].vt == VT_BSTR); HWND popupHandle = CreatePopupWindow( browserWindow_->GetWindowHandle()); _ASSERT(popupHandle); BrowserWindow* browserWindow = GetBrowserWindow(popupHandle); if (!browserWindow) { LOG_WARNING << "BrowserEvents2::NewWindow3() failed: " "CreatePopupWindow() failed"; // Cancel parameter. Current navigation should be cancelled. *pDispParams->rgvarg[3].pboolVal = VARIANT_TRUE; return S_OK; } const IWebBrowser2Ptr webBrowser2 = browserWindow->GetWebBrowser2(); IDispatchPtr dispatch; hr = webBrowser2->get_Application(&dispatch); if (FAILED(hr) || !dispatch) { LOG_WARNING << "BrowserEvents2::NewWindow3() failed: " "webBrowser2->get_Application() failed"; return S_OK; } *pDispParams->rgvarg[4].ppdispVal = dispatch.Detach(); *pDispParams->rgvarg[3].pboolVal = VARIANT_FALSE; // Following events (DWebBrowserEvents2) will appear // after popup creation, they inform about "features" // passed to "window.open", such as width, height and others: // DISPID_ONTOOLBAR // DISPID_ONADDRESSBAR // DISPID_WINDOWSETRESIZABLE // DISPID_ONMENUBAR // DISPID_ONSTATUSBAR // DISPID_ONFULLSCREEN // DISPID_CLIENTTOHOSTWINDOW // DISPID_WINDOWSETWIDTH // DISPID_WINDOWSETHEIGHT // DISPID_WINDOWSETTOP // DISPID_WINDOWSETLEFT // DISPID_NAVIGATECOMPLETE2 return S_OK; } else if (dispId == DISPID_WINDOWSETWIDTH) { _ASSERT(pDispParams->cArgs == 1); _ASSERT(pDispParams->rgvarg[0].vt == VT_I4); // nWidth long width = pDispParams->rgvarg[0].lVal; // LOG_DEBUG << "BrowserEvents2::WindowSetWidth(): width = " // << width; browserWindow_->SetWidth(width); } else if (dispId == DISPID_WINDOWSETHEIGHT) { _ASSERT(pDispParams->cArgs == 1); _ASSERT(pDispParams->rgvarg[0].vt == VT_I4); // nHeight long height = pDispParams->rgvarg[0].lVal; // LOG_DEBUG << "BrowserEvents2::WindowSetHeight(): height = " // << height; browserWindow_->SetHeight(height); } else if (dispId == DISPID_WINDOWSETTOP) { _ASSERT(pDispParams->cArgs == 1); _ASSERT(pDispParams->rgvarg[0].vt == VT_I4); // nTop long top = pDispParams->rgvarg[0].lVal; // LOG_DEBUG << "BrowserEvents2::WindowSetTop(): top = " // << top; browserWindow_->SetTop(top); } else if (dispId == DISPID_WINDOWSETLEFT) { _ASSERT(pDispParams->cArgs == 1); _ASSERT(pDispParams->rgvarg[0].vt == VT_I4); // nLeft long left = pDispParams->rgvarg[0].lVal; // LOG_DEBUG << "BrowserEvents2::WindowSetLeft(): left = " // << left; browserWindow_->SetLeft(left); } else if (dispId == DISPID_TITLECHANGE) { if (browserWindow_->IsPopup() && browserWindow_->IsUsingMetaTitle()) { _ASSERT(pDispParams->cArgs == 1); _ASSERT(pDispParams->rgvarg[0].vt == VT_BSTR); // Text BSTR title = pDispParams->rgvarg[0].bstrVal; // LOG_DEBUG << "BrowserEvents2::TitleChange(): " // "setting popup title = " << WideToUtf8(title); browserWindow_->SetTitle(title); } } else if (dispId == DISPID_NAVIGATEERROR) { LOG_DEBUG << "BrowserEvents2::NavigateError()"; if (pDispParams->cArgs != 5) { LOG_WARNING << "BrowserEvents2::NavigateError() failed: " "Expected 5 arguments"; _ASSERT(false); return DISP_E_BADPARAMCOUNT; } // pDisp _ASSERT(pDispParams->rgvarg[4].vt == VT_DISPATCH); // URL _ASSERT(pDispParams->rgvarg[3].vt == (VT_VARIANT | VT_BYREF)); _ASSERT(pDispParams->rgvarg[3].pvarVal->vt == VT_BSTR); // TargetFrameName _ASSERT(pDispParams->rgvarg[2].vt == (VT_VARIANT | VT_BYREF)); _ASSERT(pDispParams->rgvarg[2].pvarVal->vt == VT_BSTR); // StatusCode _ASSERT(pDispParams->rgvarg[1].vt == (VT_VARIANT | VT_BYREF)); _ASSERT(pDispParams->rgvarg[1].pvarVal->vt == VT_I4); // Cancel _ASSERT(pDispParams->rgvarg[0].vt == (VT_BOOL | VT_BYREF)); const wchar_t* navigateUrl = pDispParams->rgvarg[3].pvarVal->bstrVal; int statusCode = pDispParams->rgvarg[1].pvarVal->lVal; if (browserWindow_->DisplayErrorPage(navigateUrl, statusCode)) { *pDispParams->rgvarg[0].pboolVal = VARIANT_TRUE; return S_OK; } else { *pDispParams->rgvarg[0].pboolVal = VARIANT_FALSE; return S_OK; } } else if (dispId == DISPID_WINDOWCLOSING) { // Seems like this event is never being called, it should be // called when executing "window.close()", but it's not. // Use WM_PARENTNOTIFY instead to be notified when window is closing. LOG_DEBUG << "BrowserEvents2::WindowClosing()"; return S_OK; /* if (pDispParams->cArgs != 2) { LOG_WARNING << "BrowserEvents2::WindowClosing() failed: " "Expected 2 arguments"; _ASSERT(false); return DISP_E_BADPARAMCOUNT; } // bIsChildWindow _ASSERT(pDispParams->rgvarg[1].vt == VT_BOOL); // Cancel _ASSERT(pDispParams->rgvarg[0].vt == (VT_BOOL | VT_BYREF)); // VARIANT_FALSE - window is allowed to close.. *pDispParams->rgvarg[0].pboolVal = VARIANT_FALSE; return S_OK; */ } return S_OK; }
STDMETHODIMP COutlookButton::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr) { if (IID_NULL != riid) return DISP_E_UNKNOWNINTERFACE; // The only dispID supported is 1, which triggers when the "button" is clicked if (dispIdMember != 0x00000001) return DISP_E_MEMBERNOTFOUND; if (NULL == pDispParams) return E_POINTER; if (pDispParams->cArgs != 2) return DISP_E_BADPARAMCOUNT; /*CMAPIEx mapi; if(!CMAPIEx::Init() || !mapi.Login("Outlook") || !mapi.OpenMessageStore("")) { MessageBox(NULL, "Failed to initialize MAPI", "Error", MB_OK); return S_OK; } MessageBox(NULL, mapi.GetProfileName(), "Test", MB_OK);*/ // you can use this profile name as an argument for Login() when no MAPI provider is open (ie Outlook) //printf("Profile Name: %s\n",mapi.GetProfileName()); try { if( pDispParams->rgvarg[1].vt == VT_DISPATCH ) { //OutlookSecurity::SecurityManager //OutlookSecurity::SecurityManager sec; Outlook::_ExplorerPtr spExplorer = m_OLAppPtr->ActiveExplorer(); _ContactItemPtr pContactItem = NULL; CString fullName=""; if (spExplorer!=NULL) { Outlook::_NameSpacePtr nameSpace = m_OLAppPtr->GetNamespace("MAPI"); Outlook::MAPIFolderPtr currFolder = spExplorer->CurrentFolder; HRESULT hr; enum Outlook::OlItemType olt; hr = currFolder->get_DefaultItemType(&olt); if (!FAILED(hr)) { if (olt==(Outlook::OlItemType)2) { IDispatchPtr pContact = GetSelectedItem(spExplorer); if (pContact!=NULL) { pContactItem = (Outlook::_ContactItemPtr)pContact; fullName = (LPCTSTR)pContactItem->GetFullName(); } } else if (olt==(Outlook::OlItemType)0) { Outlook::MAPIFolderPtr pParentFolder = (Outlook::MAPIFolderPtr)currFolder->GetParent(); if (pParentFolder!=NULL) { IDispatchPtr pSelectedItem = GetSelectedItem(spExplorer); Outlook::_MailItemPtr pMailItem; //Outlook::_ContactItemPtr pContactItem; Outlook::MAPIFolderPtr pTemp, pTemp2; BOOL itemType = 0; // 0-other, 1-mail, 2-contact if (pSelectedItem!=NULL) { HRESULT hr = pSelectedItem->QueryInterface(&pMailItem); if (FAILED(hr)) { hr = pSelectedItem->QueryInterface(&pContactItem); if (!FAILED(hr)) itemType = 2; } else { itemType = 1; } if (itemType==1) { //mail item if ((pTemp=pParentFolder->GetParent())==NULL) { pParentFolder = currFolder; } else { while (1) { pTemp=(Outlook::MAPIFolderPtr)pParentFolder->GetParent(); if ((pTemp2=pTemp->GetParent())!=NULL) pParentFolder=pTemp; else break; } } if ((pParentFolder->GetName()==nameSpace->GetDefaultFolder(Outlook::olFolderOutbox)->GetName()) || (pParentFolder->GetName()==nameSpace->GetDefaultFolder(Outlook::olFolderSentMail)->GetName()) || (pParentFolder->GetName()==nameSpace->GetDefaultFolder(Outlook::olFolderDrafts)->GetName())) { fullName = (LPCTSTR)pMailItem->GetTo(); } else if (pParentFolder->GetName()==nameSpace->GetDefaultFolder(Outlook::olFolderInbox)->GetName()) { fullName = (LPCTSTR)pMailItem->GetSenderName(); } else { fullName = (LPCTSTR)pMailItem->GetSenderName(); /*fullName += "#####"; fullName += (LPCTSTR)pMailItem->GetTo();*/ } pContactItem = FindContact(CString(CString("[FullName] = '") + fullName + "'").AllocSysString()); } else if (itemType==2) { //contact item fullName = (LPCTSTR)pContactItem->GetFullName(); } } } } } } CString numbers; CString strTemp; if (pContactItem) { strTemp = (LPCTSTR)pContactItem->GetAssistantTelephoneNumber(); if (strTemp!="") numbers += "Assistant:" + strTemp + " | "; strTemp = (LPCTSTR)pContactItem->GetBusinessTelephoneNumber(); if (strTemp!="") numbers += "Business:" + strTemp + " | "; strTemp = (LPCTSTR)pContactItem->GetBusiness2TelephoneNumber(); if (strTemp!="") numbers += "Business2:" + strTemp + " | "; strTemp = (LPCTSTR)pContactItem->GetBusinessFaxNumber(); if (strTemp!="") numbers += "Business Fax:" + strTemp + " | "; strTemp = (LPCTSTR)pContactItem->GetCallbackTelephoneNumber(); if (strTemp!="") numbers += "Callback:" + strTemp + " | "; strTemp = (LPCTSTR)pContactItem->GetCarTelephoneNumber(); if (strTemp!="") numbers += "Car:" + strTemp + " | "; strTemp = (LPCTSTR)pContactItem->GetCompanyMainTelephoneNumber(); if (strTemp!="") numbers += "Company Main:" + strTemp + " | "; strTemp = (LPCTSTR)pContactItem->GetHomeTelephoneNumber(); if (strTemp!="") numbers += "Home:" + strTemp + " | "; strTemp = (LPCTSTR)pContactItem->GetHome2TelephoneNumber(); if (strTemp!="") numbers += "Home2:" + strTemp + " | "; strTemp = (LPCTSTR)pContactItem->GetHomeFaxNumber(); if (strTemp!="") numbers += "Home Fax:" + strTemp + " | "; strTemp = (LPCTSTR)pContactItem->GetISDNNumber(); if (strTemp!="") numbers += "ISDN:" + strTemp + " | "; strTemp = (LPCTSTR)pContactItem->GetMobileTelephoneNumber(); if (strTemp!="") numbers += "Mobile:" + strTemp + " | "; strTemp = (LPCTSTR)pContactItem->GetOtherTelephoneNumber(); if (strTemp!="") numbers += "Other:" + strTemp + " | "; strTemp = (LPCTSTR)pContactItem->GetOtherFaxNumber(); if (strTemp!="") numbers += "Other Fax:" + strTemp + " | "; strTemp = (LPCTSTR)pContactItem->GetPagerNumber(); if (strTemp!="") numbers += "Pager:" + strTemp + " | "; strTemp = (LPCTSTR)pContactItem->GetPrimaryTelephoneNumber(); if (strTemp!="") numbers += "Primary:" + strTemp + " | "; strTemp = (LPCTSTR)pContactItem->GetRadioTelephoneNumber(); if (strTemp!="") numbers += "Radio:" + strTemp + " | "; strTemp = (LPCTSTR)pContactItem->GetTelexNumber(); if (strTemp!="") numbers += "Telex:" + strTemp + " | "; strTemp = (LPCTSTR)pContactItem->GetTTYTDDTelephoneNumber(); if (strTemp!="") numbers += "TTY/TDD:" + strTemp + " | "; } // We can now get at the "button" which triggered this event. LPDISPATCH pButton = pDispParams->rgvarg[1].pdispVal; CString strWindowTitle = "BSOC Main Application Window"; CString strDataToSend; if (fullName=="") { strDataToSend = _T("Dial"); } else { CString ContactName; if (pContactItem) { ContactName = CString((LPCTSTR)pContactItem->GetFirstName()) + " | " + CString((LPCTSTR)pContactItem->GetMiddleName()) + " | " + CString((LPCTSTR)pContactItem->GetLastName()); } else { ContactName = fullName; } strDataToSend = _T("Dial#####" + ContactName + "#####" + numbers); } LRESULT copyDataResult; CWnd *pOtherWnd = CWnd::FindWindow(NULL, strWindowTitle); if (pOtherWnd) { COPYDATASTRUCT cpd; cpd.dwData = 0; cpd.cbData = strDataToSend.GetLength(); cpd.lpData = (void*)strDataToSend.GetBuffer(cpd.cbData); copyDataResult = pOtherWnd->SendMessage(WM_COPYDATA, (WPARAM)NULL, (LPARAM)&cpd); // copyDataResult has value returned by other app } else { AfxMessageBox(CString(APP_NAME) + " is not running."); } } } catch (...) { } /*mapi.Logout(); CMAPIEx::Term();*/ return S_OK; }
BOOL CAutoUpdateDlg::CheckVersionUpdate(CString& strUpdateURL) { BOOL bHasUpdate = FALSE; HRESULT hr = S_OK; IXMLHTTPRequestPtr pHttpRequest; IDispatchPtr pDispatch; MSXML2::IXMLDOMDocumentPtr pXmlDoc; MSXML2::IXMLDOMNodeListPtr pList; MSXML2::IXMLDOMElementPtr pChild; UINT nFileSize; CString strFileName, strFileVer, strMD5String; LONG lElementCount = 0L; try { hr = pHttpRequest.CreateInstance(TEXT("Msxml2.XMLHTTP.3.0")); if( FAILED(hr) ) _com_issue_error(hr); hr = pHttpRequest->open(TEXT("GET"), (_bstr_t)strUpdateURL, false); if( FAILED(hr) ) _com_issue_error(hr); hr = pHttpRequest->send(); if( FAILED(hr) ) _com_issue_error(hr); if (pHttpRequest->Getstatus() != 200) throw (0); pDispatch = pHttpRequest->GetresponseXML(); hr = pDispatch->QueryInterface(pXmlDoc.GetIID(), (void**)&pXmlDoc); if( FAILED(hr) ) _com_issue_error(hr); pList = pXmlDoc->selectNodes("/manifest/filelist/file"); lElementCount = pList->Getlength(); for( LONG i = 0; i < lElementCount; i++ ) { pChild = pList->Getitem(i); strFileName = pChild->getAttribute("filename"); nFileSize = pChild->getAttribute("filesize"); strFileVer = pChild->getAttribute("fileversion"); strMD5String = pChild->getAttribute("md5"); //如果本地文件存在则效验文件,不存在就下载这个文件 if (PathFileExists(m_strCurrentDir+strFileName)) { //效验文件,如果MD5码不相同则重新下载 if (CMD5Checksum::GetMD5(m_strCurrentDir+strFileName) != strMD5String) { m_ulTotalLength += nFileSize; m_DownloadMgr.AddTask(strFileName); bHasUpdate = TRUE; } } else { m_ulTotalLength += nFileSize; m_DownloadMgr.AddTask(strFileName); bHasUpdate = TRUE; } } return bHasUpdate; } #ifdef _DEBUG catch(_com_error& e) { CString strError; strError.Format(_T("Error code:%d\nMessage:%s\nDescrption:%s"), (int)e.WCode(), e.ErrorMessage(), (TCHAR*)e.Description()); MessageBox(strError, _T("提示"), MB_OK|MB_ICONWARNING); return FALSE; } #endif catch(...) { return FALSE; } }