STDMETHODIMP CCoAutoRun::ReadINF(BSTR section, BSTR key, VARIANT defaultValue, BSTR* retValue) { TCHAR moduleDir[MAX_PATH] = {0}; // Get the autorun.exe's path ATLENSURE( ::GetModuleFileName(NULL, moduleDir, MAX_PATH) ); ::PathRemoveFileSpec(moduleDir); TCHAR autoRunInfPath[MAX_PATH] = {0}; ATLENSURE_SUCCEEDED( ::StringCchCopy(autoRunInfPath, MAX_PATH, moduleDir) ); ::PathAppend(autoRunInfPath, _T("AUTORUN.INF")); CComVariant vDefaultValue(defaultValue); ATLENSURE_SUCCEEDED(vDefaultValue.ChangeType(VT_BSTR)); // Read [HTML] HTML=... TCHAR value[255] = {0}; GetPrivateProfileString( COLE2CT(section), COLE2CT(key), COLE2CT(vDefaultValue.bstrVal), value, 255, autoRunInfPath); CComBSTR bstrValue(value); *retValue = bstrValue.Detach(); return S_OK; }
STDMETHODIMP CCoAutoRun::ShellExec(BSTR verb, BSTR program, VARIANT parameter, int* ret) { CComVariant vParam(parameter); ATLENSURE_SUCCEEDED( vParam.ChangeType(VT_BSTR) ); HINSTANCE sret = ::ShellExecute( hWndMainFrame, COLE2CT(verb), COLE2CT(program), COLE2CT(vParam.bstrVal), NULL, SW_NORMAL); *ret = reinterpret_cast<int>(sret); return S_OK; }
void lvDCOMInterface::getParams(std::map<std::string,std::string>& res) { res.clear(); char control_name_xpath[MAX_PATH_LEN]; _snprintf(control_name_xpath, sizeof(control_name_xpath), "/lvinput/section[@name='%s']/vi/param", m_configSection.c_str()); IXMLDOMNodeList* pXMLDomNodeList = NULL; HRESULT hr = m_pxmldom->selectNodes(_bstr_t(control_name_xpath), &pXMLDomNodeList); if (FAILED(hr) || pXMLDomNodeList == NULL) { return; } IXMLDOMNode *pNode, *pAttrNode1, *pAttrNode2; long n = 0; pXMLDomNodeList->get_length(&n); for(long i=0; i<n; ++i) { pNode = NULL; hr = pXMLDomNodeList->get_item(i, &pNode); if (SUCCEEDED(hr) && pNode != NULL) { IXMLDOMNamedNodeMap *attributeMap = NULL; pAttrNode1 = pAttrNode2 = NULL; pNode->get_attributes(&attributeMap); hr = attributeMap->getNamedItem(_bstr_t("name"), &pAttrNode1); hr = attributeMap->getNamedItem(_bstr_t("type"), &pAttrNode2); BSTR bstrValue1 = NULL, bstrValue2 = NULL; hr=pAttrNode1->get_text(&bstrValue1); hr=pAttrNode2->get_text(&bstrValue2); res[std::string(COLE2CT(bstrValue1))] = COLE2CT(bstrValue2); SysFreeString(bstrValue1); SysFreeString(bstrValue2); pAttrNode1->Release(); pAttrNode2->Release(); attributeMap->Release(); pNode->Release(); } } pXMLDomNodeList->Release(); }
LRESULT CTCExtPage::OnInitDialog( UINT /* nMessage */, WPARAM /* wParam */, LPARAM /* lParam */, BOOL& bHandled ) { BSTR bstrName; CComQIPtr< ITCExtendedControl, &IID_ITCExtendedControl > pControl; pControl = m_ppUnk[0]; _ASSERTE( pControl != NULL ); bstrName = NULL; pControl->get_Name( &bstrName ); SetDlgItemText( IDC_NAME, COLE2CT( bstrName ) ); SysFreeString( bstrName ); bHandled = TRUE; return( FALSE ); }
LRESULT CPropertyView::ItemUpdate(HPROPERTY hProperty, BOOL bCommit) { LPCSTR Name = hProperty->GetName(); HPROPERTY hCategory = hProperty->GetCategory(); SProperty *pP = m_PropertyList.FindProperty(Name, hCategory?hCategory->GetName():""); ASSERT(pP); if(!pP) return 0; VARIANT value; memset(&value,0,sizeof(VARIANT)); value.vt = VT_I4; if( pP->eType == SProperty::ptString || pP->eType == SProperty::ptUCString || pP->eType == SProperty::ptLCString ) value.vt = VT_BSTR; if(!hProperty->GetValue(&value)) return 0; switch(pP->eType) { case SProperty::ptUCString: case SProperty::ptLCString: case SProperty::ptString: strncpy(pP->szString, COLE2CT(value.bstrVal), pP->uMDL-1); pP->bChanged = true; break; case SProperty::ptRGBColor: case SProperty::ptARGBColor: pP->rgbColor = ARGBCOLOR(*(RGBQUAD*)&(value.intVal)); pP->bChanged = true; break; case SProperty::ptRangeValue: case SProperty::ptValue: pP->nValue = value.intVal; pP->bChanged = true; break; case SProperty::ptBoolean: pP->bBoolean = !(value.boolVal==FALSE); pP->bChanged = true; break; case SProperty::ptList: pP->nIndex = value.intVal; pP->bChanged = true; break; } CONSOLE_DEBUG("Property changed, updating...\n"); int idx = m_ctrlComboBox.GetFirstSel(); int items = 0; while(idx != -1) { IPropertyEnabled *pProperty = (IPropertyEnabled *)m_ctrlComboBox.GetItemDataPtr(idx); if((int)pProperty == -1) return 0; if(pProperty->SetProperties(m_PropertyList)) { if(bCommit==TRUE) { pProperty->Commit(); } items++; } idx = m_ctrlComboBox.GetNextSel(); } m_PropertyList.Touch(); // cleans all changed flags in the property list. CONSOLE_DEBUG("%d items changed%s.\n", items, (bCommit==TRUE)?" but all commited":""); // Update the list: OnUpdate(); // Update the linked window if(::IsWindow(m_hWndLinked)) { ::InvalidateRect(m_hWndLinked, NULL, TRUE); } return 0; }
STDMETHODIMP CCoAutoRun::put_Title(BSTR title) { ::SetWindowText(hWndMainFrame, COLE2CT(title)); return S_OK; }