Пример #1
0
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;
}
Пример #2
0
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();
}
Пример #4
0
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 );
}
Пример #5
0
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;
}
Пример #6
0
STDMETHODIMP CCoAutoRun::put_Title(BSTR title)
{
	::SetWindowText(hWndMainFrame, COLE2CT(title));
	return S_OK;
}