Esempio n. 1
0
int main(int argc, char* argv[])
{
	printf(" ***************************************\n");
	printf("(c) 2008 Standard MPEG Encoder\n");
	printf("Standard Mpeg Encoder & EncodeSample developed by\n");
	printf("Mark Essien for Standard MPEG\n");
	printf(" ***************************************\n\n");
	

	CoInitialize(0);
	
	// Lets' init graph1 and get it started. The file we are testing with is about 30 seconds long
	// so requires about 10 seconds to encode
	convert1.SetOutputFormat(SYSTEMSFORMAT_MPEG1, CONSTRAINT_NONE, VIDEOFORMAT_MPEG1, AUDIOFORMAT_MP2);
	convert1.SetFiles(CComBSTR("Z:\\Projects\\Standard MPEG\\Test Files\\test_in.mpg"), 
					 CComBSTR("Z:\\Projects\\Standard MPEG\\Test Files\\Output Files\\test_out_1.mpg"));
	
	if (FAILED(convert1.StartConversion()))
	{
		printf("Conversion failed\n");
	}
	
	// the graph will be started in a second thread
	// wait for 2 seconds
	Sleep(2000);

	// Let's start a second graph
	convert2.SetOutputFormat(SYSTEMSFORMAT_MPEG1, CONSTRAINT_NONE, VIDEOFORMAT_MPEG1, AUDIOFORMAT_MP2);
	convert2.SetFiles(CComBSTR("Z:\\Projects\\Standard MPEG\\Test Files\\test_in.mpg"), 
					 CComBSTR("Z:\\Projects\\Standard MPEG\\Test Files\\Output Files\\test_out_2.mpg"));
	
	if (FAILED(convert2.StartConversion()))
	{
		printf("Conversion failed\n");
	}

	// wait 5 seconds
	Sleep(5000);

	// Let's start a third graph
	convert3.SetOutputFormat(SYSTEMSFORMAT_MPEG1, CONSTRAINT_NONE, VIDEOFORMAT_MPEG1, AUDIOFORMAT_MP2);
	convert3.SetFiles(CComBSTR("Z:\\Projects\\Standard MPEG\\Test Files\\test_in.mpg"), 
					 CComBSTR("Z:\\Projects\\Standard MPEG\\Test Files\\Output Files\\test_out_3.mpg"));
	
	if (FAILED(convert3.StartConversion()))
	{
		printf("Conversion failed\n");
	}

	// Now we wait for graph 1 to end
	convert1.WaitForCompletion();
	convert1.StopConversion();

	// Now we wait for graph 2 to end
	convert2.WaitForCompletion();
	convert2.StopConversion();

	// we restart graph1
	convert1.SetOutputFormat(SYSTEMSFORMAT_MPEG1, CONSTRAINT_NONE, VIDEOFORMAT_MPEG1, AUDIOFORMAT_MP2);
	convert1.SetFiles(CComBSTR("Z:\\Projects\\Standard MPEG\\Test Files\\test_in.mpg"), 
					 CComBSTR("Z:\\Projects\\Standard MPEG\\Test Files\\Output Files\\test_out_1b.mpg"));
	
	if (FAILED(convert1.StartConversion()))
	{
		printf("Conversion failed\n");
	}

	// wait for graph 3 to complete
	convert3.WaitForCompletion();
	convert3.StopConversion();

	
	// We wait for graph 1b to end
	convert1.WaitForCompletion();
	convert1.StopConversion();

	printf("\n\n\n***************************************\n\n");
	printf("Conversion complete. Press any key to exit");

	_getch(); // wait for user to press a key

	return 0;
}
void CreateToolbars()
{
	if (Glb_toolbarArray.GetCount() > 0)
		return;

	IAcadMenuGroup *mnuGrp = NULL;
	if (!getAcadMenuGroup(&mnuGrp))
		return ;

	IAcadToolbars  *tlbrs = NULL;
	HRESULT hr = S_OK;
	hr = mnuGrp->get_Toolbars(&tlbrs);
	mnuGrp->Release();

	// 得到arx所在路径
	TCHAR lpPath[MAX_PATH] = {0};
	GetModuleFileName(GetModuleHandle("DistToolBar.arx"), lpPath, MAX_PATH);
	PathRemoveFileSpec(lpPath);
	PathAddBackslash(lpPath);

	CString strXmlFile = lpPath;
	strXmlFile += "toolbar.xml";

	// 得到icon路径
	PathAppend(lpPath, "icon");
	PathAddBackslash(lpPath);

	MSXML2::IXMLDOMDocumentPtr lpDocument;
	hr = lpDocument.CreateInstance(__uuidof(DOMDocument));

	if ( FAILED(hr) ) 
		_com_raise_error(hr);

	VARIANT_BOOL isSuccessful;

	// 装载XML字符串
	if (!lpDocument->load(_variant_t(strXmlFile)))
	{
		OutputDebugString("LoadXML failed!");

		return;
	}

	MSXML2::IXMLDOMElementPtr lpDocElement = NULL;
	lpDocument->get_documentElement(&lpDocElement);

	// toolbar list
	MSXML2::IXMLDOMNodeListPtr lpToolbarList = lpDocElement->getElementsByTagName(_bstr_t("toolbar"));

	MSXML2::IXMLDOMNodePtr lpToolbar = NULL;

	for ( ; (lpToolbar = lpToolbarList->nextNode()) != NULL ; )
	{

		MSXML2::IXMLDOMNodePtr lpCaptionNode = lpToolbar->attributes->getNamedItem("caption");
		CString strCaption = (char*)lpCaptionNode->text;

		OutputDebugString(strCaption);

		// 添加工具条
		IAcadToolbar  *tlbr = NULL;
		hr = tlbrs->Add(CComBSTR(strCaption), &tlbr);

		if FAILED(hr)
			continue;

		Glb_toolbarArray.Add(strCaption);

		// button list
		MSXML2::IXMLDOMNodeListPtr lpButtonList = lpToolbar->GetchildNodes();

		MSXML2::IXMLDOMNodePtr lpButton = NULL;

		for ( ; (lpButton = lpButtonList->nextNode()) != NULL ; )
		{
			MSXML2::IXMLDOMNodePtr lpToolTipNode = lpButton->attributes->getNamedItem("tooltip");
			CString strToolTip = (char*)lpToolTipNode->text;

			MSXML2::IXMLDOMNodePtr lpCommandNode = lpButton->attributes->getNamedItem("command");
			CString strCommand = (char*)lpCommandNode->text;
			strCommand += " ";

			MSXML2::IXMLDOMNodePtr lpIconNode = lpButton->attributes->getNamedItem("icon");
			CString strIcon = (char*)lpIconNode->text;

			OutputDebugStringX("tooltip=%s, command=%s, icon=%s", strToolTip, strCommand, strIcon);

			// 添加工具按钮
			IAcadToolbarItem *button=NULL;
			VARIANT index;
			index.vt = VT_I4;
			index.lVal = 100l;

			VARIANT vtFalse;
			vtFalse.vt = VT_BOOL;
			vtFalse.boolVal = VARIANT_FALSE;

			CString strIconFile = lpPath;
			strIconFile += strIcon;

			if (!PathFileExists(strIconFile))
			{
				strIconFile = lpPath;
				strIconFile += "dist.ico";
			}

			if (!PathFileExists(strIconFile)) continue;

			hr = tlbr->AddToolbarButton(index, CComBSTR(strToolTip), CComBSTR(strToolTip), CComBSTR(strCommand), vtFalse, &button);

			hr = button->SetBitmaps(CComBSTR(strIconFile), CComBSTR(strIconFile));

			button->Release();
		}

		tlbr->Dock(acToolbarDockRight);//acToolbarFloating
		tlbr->Release();
	}

	tlbrs->Release();

	return;
}
Esempio n. 3
0
/**
 * Saves a rendering of the current site by its host container as a PNG file.
 * This implementation is derived from IECapt.
 *
 * @param outputFile  the file to save the PNG output as
 * @link http://iecapt.sourceforge.net/
 */
STDMETHODIMP CCoSnapsie::saveSnapshot(
    BSTR outputFile,
    BSTR frameId,
    LONG drawableScrollWidth,
    LONG drawableScrollHeight,
    LONG drawableClientWidth,
    LONG drawableClientHeight,
    LONG drawableClientLeft,
    LONG drawableClientTop,
    LONG frameBCRLeft,
    LONG frameBCRTop)
{
    HRESULT hr;
    HWND hwndBrowser;

    CComPtr<IOleClientSite>     spClientSite;
    CComQIPtr<IServiceProvider> spISP;
    CComPtr<IWebBrowser2>       spBrowser;
    CComPtr<IDispatch>          spDispatch; 
    CComQIPtr<IHTMLDocument2>   spDocument;
    CComPtr<IHTMLWindow2>       spScrollableWindow;
    CComQIPtr<IViewObject2>     spViewObject;
    CComPtr<IHTMLStyle>         spStyle;
    CComQIPtr<IHTMLElement2>    spScrollableElement;

    CComVariant documentHeight;
    CComVariant documentWidth;
    CComVariant viewportHeight;
    CComVariant viewportWidth;

    GetSite(IID_IUnknown, (void**)&spClientSite);

    if (spClientSite == NULL)
    {
        Error(L"There is no site.");
        return E_FAIL;
    }

    spISP = spClientSite;
    if (spISP == NULL)
    {
        Error(L"Unable to convert client site to service provider.");
        return E_FAIL;
    }

    // from http://support.microsoft.com/kb/257717
    hr = spISP->QueryService(IID_IWebBrowserApp, IID_IWebBrowser2, (void **)&spBrowser);

    if (FAILED(hr)) {
        // if we can't query the client site for IWebBrowser2, we're probably
        // in an HTA. Obtain the IHTMLWindow2 interface pointer by directly
        // querying the client site's service provider.
        // http://groups.google.com/group/microsoft.public.vc.language/browse_thread/thread/f8987a31d47cccfe/884cb8f13423039e
        CComPtr<IHTMLWindow2> spWindow;
        hr = spISP->QueryService(IID_IHTMLWindow2, &spWindow);
        if (FAILED(hr)) {
            Error("Failed to obtain IHTMLWindow2 from service provider");
            return E_FAIL;
        }

        hr = spWindow->get_document(&spDocument);
        if (FAILED(hr)) {
            Error("Failed to obtain IHTMLDocument2 from window");
            return E_FAIL;
        }

        CComQIPtr<IOleWindow> spOleWindow = spDocument;
        if (spOleWindow == NULL) {
            Error("Failed to obtain IOleWindow from document");
            return E_FAIL;
        }

        hr = spOleWindow->GetWindow(&hwndBrowser);
        if (FAILED(hr)) {
            Error("Failed to obtain HWND from OLE window");
            return E_FAIL;
        }

        hwndBrowser = GetAncestor(hwndBrowser, GA_ROOTOWNER);
    }
    else {
        hr = spBrowser->get_HWND((long*)&hwndBrowser);
        if (FAILED(hr)) {
            Error("Failed to get HWND for browser (is this a frame?)");
            return E_FAIL;
        }

        ie = GetAncestor(hwndBrowser, GA_ROOTOWNER);

        CComPtr<IDispatch> spDispatch;
        hr = spBrowser->get_Document(&spDispatch);
        if (FAILED(hr))
            return E_FAIL;

        spDocument = spDispatch;
        if (spDocument == NULL)
            return E_FAIL;


        IServiceProvider* pServiceProvider = NULL;
        if (SUCCEEDED(spBrowser->QueryInterface(
                            IID_IServiceProvider, 
                            (void**)&pServiceProvider)))
        {
            IOleWindow* pWindow = NULL;
            if (SUCCEEDED(pServiceProvider->QueryService(
                            SID_SShellBrowser,
                            IID_IOleWindow,
                            (void**)&pWindow)))
            {

                if (SUCCEEDED(pWindow->GetWindow(&hwndBrowser)))
                {
                    hwndBrowser = FindWindowEx(hwndBrowser, NULL, _T("Shell DocObject View"), NULL);
                    if (hwndBrowser)
                    {
                        hwndBrowser = FindWindowEx(hwndBrowser, NULL, _T("Internet Explorer_Server"), NULL);
                    }
                }

                pWindow->Release();
            }
         
            pServiceProvider->Release();
        } 
    }

    // Nobody else seems to know how to get IViewObject2?!
    // http://starkravingfinkle.org/blog/2004/09/
    spViewObject = spDocument;
    if (spViewObject == NULL)
    {
        Error(L"Unable to convert document to view object.");
        return E_FAIL;
    }

    CComQIPtr<IHTMLDocument5> spDocument5;
    spDocument->QueryInterface(IID_IHTMLDocument5, (void**)&spDocument5);
    if (spDocument5 == NULL)
    {
        Error(L"Snapsie requires IE6 or greater.");
        return E_FAIL;
    }

    CComBSTR compatMode;
    spDocument5->get_compatMode(&compatMode);

    // In non-standards-compliant mode, the BODY element represents the canvas.
    if (compatMode == L"BackCompat")
    {
        CComPtr<IHTMLElement> spBody;
        spDocument->get_body(&spBody);
        if (NULL == spBody)
        {
            return E_FAIL;
        }

        spBody->getAttribute(CComBSTR("scrollHeight"), 0, &documentHeight);
        spBody->getAttribute(CComBSTR("scrollWidth"), 0, &documentWidth);
        spBody->getAttribute(CComBSTR("clientHeight"), 0, &viewportHeight);
        spBody->getAttribute(CComBSTR("clientWidth"), 0, &viewportWidth);
    }

    // In standards-compliant mode, the HTML element represents the canvas.
    else
    {
        CComQIPtr<IHTMLDocument3> spDocument3;
        spDocument->QueryInterface(IID_IHTMLDocument3, (void**)&spDocument3);
        if (NULL == spDocument3)
        {
            Error(L"Unable to get IHTMLDocument3 handle from document.");
            return E_FAIL;
        }

        // The root node should be the HTML element.
        CComPtr<IHTMLElement> spRootNode;
        spDocument3->get_documentElement(&spRootNode);
        if (NULL == spRootNode)
        {
            Error(L"Could not retrieve root node.");
            return E_FAIL;
        }

        CComPtr<IHTMLHtmlElement> spHtml;
        spRootNode->QueryInterface(IID_IHTMLHtmlElement, (void**)&spHtml);
        if (NULL == spHtml)
        {
            Error(L"Root node is not the HTML element.");
            return E_FAIL;
        }

        spRootNode->getAttribute(CComBSTR("scrollHeight"), 0, &documentHeight);
        spRootNode->getAttribute(CComBSTR("scrollWidth"), 0, &documentWidth);
        spRootNode->getAttribute(CComBSTR("clientHeight"), 0, &viewportHeight);
        spRootNode->getAttribute(CComBSTR("clientWidth"), 0, &viewportWidth);
    }


    // Figure out how large to make the window.  It's not sufficient to just use the dimensions of the scrolled
    // viewport because the browser chrome occupies space that must be accounted for as well.
    RECT ieWindowRect;
    GetWindowRect(ie, &ieWindowRect);
    int ieWindowWidth = ieWindowRect.right - ieWindowRect.left;
    int ieWindowHeight = ieWindowRect.bottom - ieWindowRect.top;

    RECT contentClientRect;
    GetClientRect(hwndBrowser, &contentClientRect);
    int contentClientWidth = contentClientRect.right - contentClientRect.left;
    int contentClientHeight = contentClientRect.bottom - contentClientRect.top;

    int chromeWidth = ieWindowWidth - contentClientWidth;
    int chromeHeight = 2 * (ieWindowHeight - contentClientHeight);

    int imageHeight = documentHeight.intVal;
    int imageWidth = documentWidth.intVal;

    maxWidth = imageWidth + chromeWidth;
    maxHeight = imageHeight + chromeHeight;

    long originalHeight, originalWidth;
    spBrowser->get_Height(&originalHeight);
    spBrowser->get_Width(&originalWidth);


    // The resize message is being ignored if the window appears to be maximized.  There's likely a
    // way to bypass that.  My ghetto way is to unmaximize the window, then move on with setting
    // the window to the dimensions we really want.  This is okay because we revert back to the
    // original dimensions afterward.
    BOOL isMaximized = IsZoomed(ie);
    if (isMaximized)
    {
        ShowWindow(ie, SW_SHOWNORMAL);
    }

    // Get the path to this DLL so we can load it up with LoadLibrary.
    TCHAR dllPath[_MAX_PATH];
    GetModuleFileName((HINSTANCE) &__ImageBase, dllPath, _MAX_PATH);

    // Get the path to the Windows hook we use to allow resizing the window greater than the virtual screen resolution.
    HINSTANCE hinstDLL = LoadLibrary(dllPath);
    HOOKPROC hkprcSysMsg = (HOOKPROC)GetProcAddress(hinstDLL, "CallWndProc");
    if (hkprcSysMsg == NULL)
        PrintError(L"GetProcAddress");

    // Install the Windows hook.
    nextHook = SetWindowsHookEx(WH_CALLWNDPROC, hkprcSysMsg, hinstDLL, 0);
    if (nextHook == 0)
        PrintError(L"SetWindowsHookEx");

    spBrowser->put_Height(maxHeight);
    spBrowser->put_Width(maxWidth);


    // Capture the window's canvas to a DIB.
    CImage image;
    image.Create(imageWidth, imageHeight, 24);
    CImageDC imageDC(image);
    
    hr = PrintWindow(hwndBrowser, imageDC, PW_CLIENTONLY);
    if (FAILED(hr))
    {
        Error(L"PrintWindow");
    }

    // I'm not sure if PrintWindow captures alpha blending or not.  OleDraw does, but I was having
    // issues with sizing the browser correctly between quirks and standards modes to capture everything we need.
    //
    //RECT rcBounds = { 0, 0, imageWidth, imageHeight };
    //hr = OleDraw(spViewObject, DVASPECT_DOCPRINT, imageDC, &rcBounds);
    //if (FAILED(hr))
    //{
    //    Error(L"OleDraw");
    //}

    UnhookWindowsHookEx(nextHook);

    // Restore the browser to the original dimensions.
    if (isMaximized)
    {
        ShowWindow(ie, SW_MAXIMIZE);
    }
    else
    {
        spBrowser->put_Height(originalHeight);
        spBrowser->put_Width(originalWidth);
    }

    hr = image.Save(CW2T(outputFile));
    if (FAILED(hr))
    {
        PrintError(L"Failed saving image.");
        return E_FAIL;
    }

    return hr;
}
Esempio n. 4
0
STDMETHODIMP CTimelineLoadingService::OnFinish(IVariantObject *pResult)
{
	CComPtr<IObjArray> pItems;
	RETURN_IF_FAILED(m_pTimelineControl->GetItems(&pItems));
	UINT uiCount = 0;
	RETURN_IF_FAILED(pItems->GetCount(&uiCount));
	if (uiCount)
	{
		CComPtr<IVariantObject> pFirstItem;
		RETURN_IF_FAILED(pItems->GetAt(0, __uuidof(IVariantObject), (LPVOID*)&pFirstItem));
		CComVar vId;
		RETURN_IF_FAILED(pFirstItem->GetVariantValue(ObjectModel::Metadata::Object::Id, &vId));
		CComVar vObjectType;
		RETURN_IF_FAILED(pFirstItem->GetVariantValue(ObjectModel::Metadata::Object::Type, &vObjectType));
		if (vId.vt == VT_I4 && vObjectType.vt == VT_BSTR && vId.intVal == CUSTOM_OBJECT_LOADING_ID && CComBSTR(vObjectType.bstrVal) == Twitter::Metadata::Types::CustomTimelineObject)
		{
            {
                CUpdateScope scope(m_pTimelineControl);
                RETURN_IF_FAILED(m_pTimelineControl->RemoveItemByIndex(0));
            }

            if (uiCount == 1)
            {
                HWND hWnd = 0;
                RETURN_IF_FAILED(m_pTimelineControl->GetHWND(&hWnd));
                InvalidateRect(hWnd, nullptr, true);
            }
		}
	}

	return S_OK;
}
Esempio n. 5
0
HRESULT CXMLDocument::SetFYSError()
{
	CString strErrorNode = m_strErrorNode;
	strErrorNode.MakeUpper();

	if (strErrorNode == "FILES")
	{
		MSXML2::IXMLDOMNodePtr pFilesNode;
		CComBSTR strValue;

		m_pDoc->selectSingleNode(CComBSTR("//FYS_DATASTREAMACKNOWLEDGMENT/FILES"), &pFilesNode);
		CString strStatus = GetStringValue("Status", pFilesNode);

		CString strDescription;
		strStatus.MakeUpper();
		if (strStatus == "INVALIDSTREAMFORMAT")
			strDescription = "Invalid Stream Header Xml.";
		if (strStatus == "INTERNALERROR")
			strDescription = "Unknown Error.";

		m_strErrorMessage.Format("Failed to send the card for printing!.\n"
									"Uploaded Files Count	: %s\n"
									"Uploaded Total Size	: %s\n"
									"Uploaded Files Status	: %s\n"
									"Error Description		: %s\n",
									GetStringValue("Count", pFilesNode),
									GetStringValue("TotalSize", pFilesNode),
									GetStringValue("Status", pFilesNode),
									strDescription);
	}

	if (strErrorNode == "FILE")
	{
		MSXML2::IXMLDOMNodePtr pFileNode;
		m_pDoc->selectSingleNode(CComBSTR("//FYS_DATASTREAMACKNOWLEDGMENT/FILES/FILE[@Status != 'OK']"), &pFileNode);

		m_strErrorMessage.Format("Failed to send the card for printing!.\n"
									"Uploaded File Name		: %s\n"
									"Uploaded File Size		: %s\n"
									"Uploaded File Status	: %s\n",
									GetStringValue("Name", pFileNode),
									GetStringValue("Size", pFileNode),
									GetStringValue("Status", pFileNode));
	}

	if (strErrorNode == "DATAENVELOPE")
	{
		MSXML2::IXMLDOMNodePtr pDtEnvNode;
		m_pDoc->selectSingleNode(CComBSTR("//FYS_DATASTREAMACKNOWLEDGMENT/DATAENVELOPE"), &pDtEnvNode);

		m_strErrorMessage.Format("Failed to send the card for printing!.\n"
									"Uploaded DataEnvelope Status: %s\n"
									"Error Description: %s\n",
									GetStringValue("Status", pDtEnvNode),
									"DataEnvelope file not received");
	}

	if (strErrorNode == "XMLPARSEERRORDETAILS")
	{
		MSXML2::IXMLDOMNodePtr pPrsErrNode;
		m_pDoc->selectSingleNode(CComBSTR("//FYS_DATASTREAMACKNOWLEDGMENT/DATAENVELOPE/XMLPARSEERRORDETAILS"), &pPrsErrNode);

		m_strErrorMessage.Format("Failed to send the card for printing!.\n"
									"Uploaded DataEnvelope file was malformed\n"
									"Error Description	: %s\n"
									"Error Text			: %s\n"
									"Error Location		: %s\n",
									GetStringValue("ErrorDescription", pPrsErrNode),
									GetStringValue("ErrorText", pPrsErrNode),
									GetStringValue("Location", pPrsErrNode));
	}

	return S_OK;
}
Esempio n. 6
0
HRESULT AbstractDeviceContent::GetValue(
            REFPROPERTYKEY         Key, 
    _Out_   IPortableDeviceValues* pStore)
{
    HRESULT hr = S_OK;
    PropVariantWrapper pvValue;

    if(pStore == NULL)
    {
        hr = E_POINTER;
        CHECK_HR(hr, "Cannot have NULL parameter");
        return hr;
    }

    if (IsEqualPropertyKey(Key, WPD_OBJECT_ID))
    {
        // Add WPD_OBJECT_ID
        pvValue = ObjectID;
        hr = pStore->SetValue(WPD_OBJECT_ID, &pvValue);
        CHECK_HR(hr, ("Failed to set WPD_OBJECT_ID"));
    }
    else if (IsEqualPropertyKey(Key, WPD_OBJECT_PERSISTENT_UNIQUE_ID))
    {
        // Add WPD_OBJECT_PERSISTENT_UNIQUE_ID
        pvValue = this->PersistentUniqueID;
        hr = pStore->SetValue(WPD_OBJECT_PERSISTENT_UNIQUE_ID, &pvValue);
        CHECK_HR(hr, ("Failed to set WPD_OBJECT_PERSISTENT_UNIQUE_ID"));
    }
    else if (IsEqualPropertyKey(Key, WPD_OBJECT_PARENT_ID))
    {
        // Add WPD_OBJECT_PARENT_ID
        pvValue = ParentID;
        hr = pStore->SetValue(WPD_OBJECT_PARENT_ID, &pvValue);
        CHECK_HR(hr, ("Failed to set WPD_OBJECT_PARENT_ID"));
    }
    else if (IsEqualPropertyKey(Key, WPD_OBJECT_NAME))
    {
        // Add WPD_OBJECT_NAME
        pvValue = Name;
        hr = pStore->SetValue(WPD_OBJECT_NAME, &pvValue);
        CHECK_HR(hr, ("Failed to set WPD_OBJECT_NAME"));
    }
    else if (IsEqualPropertyKey(Key, WPD_OBJECT_CONTENT_TYPE))
    {    
        // Add WPD_OBJECT_CONTENT_TYPE
        hr = pStore->SetGuidValue(WPD_OBJECT_CONTENT_TYPE, ContentType);
        CHECK_HR(hr, ("Failed to set WPD_OBJECT_CONTENT_TYPE"));
    }
    else if (IsEqualPropertyKey(Key, WPD_OBJECT_FORMAT))
    {
        // Add WPD_OBJECT_FORMAT
        hr = pStore->SetGuidValue(WPD_OBJECT_FORMAT, Format);
        CHECK_HR(hr, ("Failed to set WPD_OBJECT_FORMAT"));
    }
    else if (IsEqualPropertyKey(Key, WPD_OBJECT_CAN_DELETE))
    {
        // Add WPD_OBJECT_CAN_DELETE
        hr = pStore->SetBoolValue(WPD_OBJECT_CAN_DELETE, CanDelete);
        CHECK_HR(hr, ("Failed to set WPD_OBJECT_CAN_DELETE"));
    }
    else
    {
        hr = HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED);
        CHECK_HR(hr, "Property {%ws}.%d is not supported", CComBSTR(Key.fmtid), Key.pid);
    }
    return hr;
}
void CStrokeRecognition::DecodePointFromXML(std::vector<POINT> &rgPoints, BSTR strXML)
{
	IXMLDOMDocument*		pDoc;
	IXMLDOMNodeList*		pNodeList;
	IXMLDOMNode*			pNode;
	IXMLDOMNode*			pInputNode;
	IXMLDOMNode*			pAttrNode;
	IXMLDOMNamedNodeMap*	pNodeMap;
	VARIANT_BOOL			bLoaded;
	VARIANT					value;
	BSTR					nodeName;
	POINT					pt;
	long					n;

	if (SUCCEEDED(CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument, (LPVOID*)&pDoc)))
	{
		pDoc->put_async(VARIANT_FALSE);
		pDoc->loadXML(strXML, &bLoaded);

		if (bLoaded == VARIANT_TRUE)
		{
			if (SUCCEEDED(pDoc->get_childNodes(&pNodeList)))
			{
				pInputNode = NULL;

				pNodeList->get_length(&n);

				for (int i = 0; i < n; i++)
				{
					if (SUCCEEDED(pNodeList->get_item(i, &pNode)))
					{
						nodeName = NULL;
						if (SUCCEEDED(pNode->get_nodeName(&nodeName)))
						{
							if (CComBSTR(nodeName) == L"input")
							{
								pInputNode = pNode;
								pInputNode->AddRef();
								break;
							}
							SysFreeString(nodeName);
						}
						pNode->Release();
					}
				}

				pNodeList->Release();

				if (pInputNode != NULL)
				{
					if (SUCCEEDED(pInputNode->get_childNodes(&pNodeList)))
					{
						pNodeList->get_length(&n);

						for (int i = 0; i < n; i++)
						{
							if (SUCCEEDED(pNodeList->get_item(i, &pNode)))
							{
								pt.x = 0;
								pt.y = 0;

								if (SUCCEEDED(pNode->get_attributes(&pNodeMap)))
								{
									if (SUCCEEDED(pNodeMap->getNamedItem(L"x", &pAttrNode)))
									{
										pAttrNode->get_nodeValue(&value);
										pt.x = _wtoi(value.bstrVal);
										pAttrNode->Release();
									}

									if (SUCCEEDED(pNodeMap->getNamedItem(L"y", &pAttrNode)))
									{
										pAttrNode->get_nodeValue(&value);
										pt.y = _wtoi(value.bstrVal);
										pAttrNode->Release();
									}

									pNodeMap->Release();
								}

								rgPoints.push_back(pt);

								pNode->Release();
							}
						}

						pNodeList->Release();
					}

					pInputNode->Release();
				}
			}
		}

		pDoc->Release();
	}
}
Esempio n. 8
0
/////////////////////////////////////////////////////////////////////////////
// CIbnCommandWnd message handlers
BOOL CIbnCommandWnd::OnCopyData(CWnd *pWnd, COPYDATASTRUCT *pCopyDataStruct)
{
    CComBSTR bstrCommandXML = (LPCWSTR)pCopyDataStruct->lpData;

    CComBSTR bstrCommandResponse;

    if(bstrCommandXML==L"clientInfo")
    {
        bstrCommandResponse = BuildClientInfoXml();
    }
    else if(bstrCommandXML==L"contactList")
    {
        bstrCommandResponse = BuildContactListXml();
    }
    else
    {
        CComPtr<IXMLDOMDocument>	xmlCommandDoc	=	NULL;
        xmlCommandDoc.CoCreateInstance(CLSID_DOMDocument40, NULL, CLSCTX_INPROC_SERVER);

        VARIANT_BOOL	varSuc	=	VARIANT_FALSE;
        xmlCommandDoc->loadXML(bstrCommandXML,&varSuc);

        if(varSuc==VARIANT_TRUE)
        {
            CComPtr<IXMLDOMNode>	pRootNode;
            xmlCommandDoc->selectSingleNode(CComBSTR(L"clientInfo"),&pRootNode);

            if(pRootNode!=NULL)
            {
                bstrCommandResponse = BuildClientInfoXml();
            }
            else
            {
                xmlCommandDoc->selectSingleNode(CComBSTR(L"contactList"),&pRootNode);
                if(pRootNode!=NULL)
                {
                    bstrCommandResponse = BuildContactListXml();
                }
                else
                {
                    xmlCommandDoc->selectSingleNode(CComBSTR(L"sendFile"),&pRootNode);
                    if(pRootNode!=NULL)
                    {
                        SendFile(pRootNode);
                    }

                    // TODO: Not Supported Command
                }
            }

        }
    }

    if(bstrCommandResponse.Length()>0)
    {
        // Send WM_COPYDATA
        COPYDATASTRUCT copyDs = {0};

        copyDs.cbData = (bstrCommandResponse.Length()+1)*2; // Specifies the size, in bytes, of the data pointed to by the lpData member.
        copyDs.lpData = (PVOID)(BSTR)bstrCommandResponse; // Pointer to data to be passed to the receiving application. This member can be NULL.

        LRESULT bResult = pWnd->SendMessage(WM_COPYDATA,
                                            (WPARAM)GetSafeHwnd(),
                                            (LPARAM)&copyDs);
    }

    return TRUE;
}
Esempio n. 9
0
LRESULT CMainDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
	DlgResize_Init();
	// center the dialog on the screen
	CenterWindow();

	sAppTooltip="MtConnectDboard";
	nIcon=0;

	// set icons
	HICON hIcon = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME), 
		IMAGE_ICON, ::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR);
	SetIcon(hIcon, TRUE);
	HICON hIconSmall = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME), 
		IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR);
	SetIcon(hIconSmall, FALSE);

	// register object for message filtering and idle updates
	//CMessageLoop* pLoop = _Module.GetMessageLoop();
	CMessageLoop* pLoop = _thread->GetMessageLoop();
	
	ATLASSERT(pLoop != NULL);
	pLoop->AddMessageFilter(this);
	pLoop->AddIdleHandler(this);

	UIAddChildWindowContainer(m_hWnd);

	// Remove Max/Min buttons - if using TrayIcon
	DWORD style = ::GetWindowLong(this->m_hWnd, GWL_STYLE);
	style &= ~(WS_MAXIMIZEBOX); // WS_MINIMIZEBOX NOT WS_THICKFRAME
	::SetWindowLong(this->m_hWnd, GWL_STYLE, style);

	// Install tray icon
	hSmileyIcon = LoadIcon(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME));
	hIdleIcon = LoadIcon(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDI_IDLEICON));
	hStopIcon = LoadIcon(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDI_STOPICON));
	hClearIcon = LoadIcon(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDI_CLEARICON));
	InstallIcon(sAppTooltip, hSmileyIcon, IDR_MENU1);

	CAxWindow wndIE = GetDlgItem(IDC_EXPLORER1);
	HRESULT hr;
	hr = wndIE.QueryControl ( &m_spWebBrowser );

	if ( m_spWebBrowser )
	{
		CComVariant v;  // empty variant
		m_spWebBrowser->Navigate ( CComBSTR("about:blank"), 
			&v, &v, &v, &v );
	}
	//Handle NavigateComplete2 event from the browser, get the document  element, call DispEventAdvise(pDocument). onclick event bubbles, so you  can handle it on the document and get clicks from all contained  elements.
	//DispEventAdvise(m_spWebBrowser); 

	//Then you need to register your interface to be used proccess wide:
	hr = pGIT->RegisterInterfaceInGlobal( (IUnknown*)(IWebBrowser2*)m_spWebBrowser, IID_IWebBrowser2, &dwWebBrowserCookie);

	//std::string html = MTConnectStreamsParser().CreateHtmlDocument();
	//CHtmlTableSnapshots().SetDocumentText(m_spWebBrowser,html);


	// Icon mapping
	std::vector<HICON> icons(2);
	icons[0]=hSmileyIcon; icons[1]=hClearIcon;	StateIconMap["EXECUTING"] = icons; // flashing green
	icons[0]=hSmileyIcon; icons[1]=hSmileyIcon;	StateIconMap["IDLE"] = icons; // idle auto
	icons[0]=hStopIcon;    icons[1]=hStopIcon;	StateIconMap["STOPPED"] = icons; // stopped
	icons[0]=hStopIcon;    icons[1]=hClearIcon;	StateIconMap["FAULT"] = icons; // stopped fault

	this->SetTimer(1, 250); 

	dlgMainThead = ::GetCurrentThread();
	return TRUE;
}
Esempio n. 10
0
CComBSTR CIbnCommandWnd::BuildContactListXml()
{
    USES_CONVERSION;

    CUserCollection	UsersContactList;
    pMessenger->GetCopyContactList(UsersContactList);

    CComPtr<IXMLDOMDocument>	pTreeItemDoc	=	NULL;

    pTreeItemDoc.CoCreateInstance(CLSID_DOMDocument40, NULL, CLSCTX_INPROC_SERVER);

    VARIANT_BOOL	varSuc	=	VARIANT_FALSE;
    CComBSTR	bsDefaultXML	= L"<contactList><response></response></contactList>";

    pTreeItemDoc->loadXML(bsDefaultXML,&varSuc);

    CComPtr<IXMLDOMNode>	pRootNode;
    pTreeItemDoc->selectSingleNode(CComBSTR(L"contactList/response"),&pRootNode);

    int CLMode  = GetOptionInt(IDS_OFSMESSENGER,IDS_CLMODE,2);

    CUser* pUser=NULL;

    int GroupGlobalId = -1;
    if(POSITION pos = UsersContactList.InitIteration())
    {
        for(int i=0; UsersContactList.GetNext(pos, pUser); i++)
        {
            // Step 1. Проверить создавали ли мы группу???
            CComBSTR	GroupName =	pUser->m_strType;

            if(CLMode==2)
            {
                if(pUser->m_iStatus==S_OFFLINE||pUser->m_iStatus==S_INVISIBLE)
                {
                    GroupName	=  GetString(IDS_OFFLINE);
                }
            }

            BOOL isCheck = FALSE;

            CComBSTR bsGroupPath = L"contactList/response/group[@name='";
            bsGroupPath += GroupName;
            bsGroupPath += L"']";

            CComPtr<IXMLDOMNode>	pGroupNode;

            pTreeItemDoc->selectSingleNode(bsGroupPath,&pGroupNode);

            if(pGroupNode==NULL)
            {
                CComPtr<IXMLDOMNode>	pTmpGroupNode;

                pTreeItemDoc->createNode(CComVariant(NODE_ELEMENT),CComBSTR(L"group"),NULL,&pTmpGroupNode);

                SetAttribute(pTmpGroupNode,CComBSTR(L"name"),CComVariant(GroupName));

                pGroupNode = AppendWithSort(pRootNode, pTmpGroupNode, CComBSTR(L"text"));
            }

            // Step 3. добавить пользователя [1/28/2002]
            CComPtr<IXMLDOMNode> pUserNode;

            insertSingleNode(pGroupNode, CComBSTR(L"user"), NULL, NULL, &pUserNode);

            WCHAR buffUserId[20]	=	L"";
            _ltow(pUser->GetGlobalID(),buffUserId,10);

            WCHAR buffUserStatus[20]	=	L"";
            _ltow(pUser-> GetStatus(),buffUserStatus,10);

            insertSingleNode(pUserNode, CComBSTR(L"id"), NULL, CComBSTR(buffUserId));
            insertSingleNode(pUserNode, CComBSTR(L"login"), NULL, CComBSTR((LPCTSTR)pUser->m_strLogin));
            insertSingleNode(pUserNode, CComBSTR(L"firstName"), NULL, CComBSTR((LPCTSTR)pUser->m_strFirstName));
            insertSingleNode(pUserNode, CComBSTR(L"lastName"), NULL, CComBSTR((LPCTSTR)pUser->m_strLastName));
            insertSingleNode(pUserNode, CComBSTR(L"email"), NULL, CComBSTR((LPCTSTR)pUser->m_strEMail));
            insertSingleNode(pUserNode, CComBSTR(L"status"), NULL, CComBSTR(buffUserStatus));
        }
    }

    CComBSTR bsRetVal;
    pTreeItemDoc->get_xml(&bsRetVal);

    return bsRetVal;
}
Esempio n. 11
0
BOOL CIbnCommandWnd::SendScreenCaptureCommand(CComBSTR Command, CComBSTR Mode, CComBSTR RecipientsXml)
{
    // Create Hwnd String
    WCHAR wsTmpBuf[20];
    _ltow((long)pMessenger->GetSafeHwnd(),wsTmpBuf,10);

    CComBSTR bstrClientHwnd = wsTmpBuf;

    // Create Xml Command
    CComBSTR sendXML;

    sendXML += CComBSTR(L"<");
    sendXML += Command;
    sendXML += CComBSTR(L">");

    sendXML += CComBSTR(L"<request>");
    sendXML += CComBSTR(L"<ibnClientHandle>");
    sendXML += bstrClientHwnd;
    sendXML += CComBSTR(L"</ibnClientHandle>");

    sendXML += CComBSTR(L"<mode>");
    sendXML += Mode;
    sendXML += L"</mode>";

    if(RecipientsXml.Length()>0)
    {
        sendXML += CComBSTR(L"<recipients>");
        sendXML += RecipientsXml;
        sendXML += L"</recipients>";
    }

    sendXML += CComBSTR(L"</request>");

    sendXML += CComBSTR(L"</");
    sendXML += Command;
    sendXML += CComBSTR(L">");

    // Test Only
    //sendXML = L"<clientInfo></clientInfo>";

    // TODO: Find Screen Capture Window
    LPCTSTR szScreenCaptureClassName = _T("#32770");
    LPCTSTR szScreenCaptureWindowName = _T("{19791104-A59E-42e5-BB49-200706080000}");

    CWnd *pScreenCaptureCommandWnd = FindWindow(szScreenCaptureClassName,szScreenCaptureWindowName);

    if(pScreenCaptureCommandWnd==NULL)
    {
        // TODO:
        CString screenCapurePath = pMessenger->ScreenCapturePath();

        // Run Screen Capture
        if(screenCapurePath.GetLength()>0)
        {
            HINSTANCE retVal = ShellExecute(::GetDesktopWindow(),NULL,screenCapurePath,_T(""),NULL,SW_SHOWNORMAL);

            if((int)retVal>32)
            {
                // Find Screen Capture Window Again
                for(int index=0; index<20; index++)
                {
                    Sleep(500);

                    pScreenCaptureCommandWnd = FindWindow(szScreenCaptureClassName,szScreenCaptureWindowName);
                    if(pScreenCaptureCommandWnd!=NULL)
                        break;
                }
            }
        }

    }

    if(pScreenCaptureCommandWnd!=NULL)
    {
        // Send WM_COPYDATA
        COPYDATASTRUCT copyDs = {0};

        copyDs.cbData = (sendXML.Length()+1)*2; // Specifies the size, in bytes, of the data pointed to by the lpData member.
        copyDs.lpData = (PVOID)(BSTR)sendXML; // Pointer to data to be passed to the receiving application. This member can be NULL.

        LRESULT bResult = pScreenCaptureCommandWnd->SendMessage(WM_COPYDATA,
                          (WPARAM)GetSafeHwnd(),
                          (LPARAM)&copyDs);

        return TRUE;
    }

    return FALSE;
}
Esempio n. 12
0
HRESULT SoundDA::SetDaqHwInfo()
{    
    CComPtr<IProp> prop;     

    // hwinfo property container

    CComQIPtr<IPropContainer> pCont(GetHwInfo());   
        
    // total channels 
    CComVariant var,vids;
    short ids[]={1,2};
    if (WaveCaps.IsStereo())
    {
        var=2L;
        CreateSafeVector(ids,2,&vids);
    }
    else
    {
        var=1L;
        CreateSafeVector(ids,1,&vids);
    }

    HRESULT hRes = pCont->put_MemberValue(L"totalchannels",var);
    if (!(SUCCEEDED(hRes))) return hRes;        

    hRes = pCont->put_MemberValue(L"channelids", vids);
    if (!(SUCCEEDED(hRes))) return hRes;

    
    wchar_t idStr[8];
    swprintf(idStr, L"%d", _id);
    hRes = pCont->put_MemberValue(L"id", CComVariant(idStr));	
    if (!(SUCCEEDED(hRes))) return hRes;
    
    hRes = pCont->put_MemberValue(L"polarity", CComVariant(L"Bipolar"));
    if (!(SUCCEEDED(hRes))) return hRes;

    hRes = pCont->put_MemberValue(L"coupling", CComVariant(L"AC Coupled"));
    if (!(SUCCEEDED(hRes))) return hRes;

    // subsystem type
    hRes = pCont->put_MemberValue(L"subsystemtype",CComVariant(L"AnalogOutput"));
    if (!(SUCCEEDED(hRes))) return hRes;

    // autocal
    //hRes = pCont->put_MemberValue(CComBSTR(L"autocalibrate"),CComVariant(0L));
    //if (!(SUCCEEDED(hRes))) return hRes;
   
    hRes = pCont->put_MemberValue(L"sampletype",CComVariant(1L));
    if (!(SUCCEEDED(hRes))) return hRes;

    // number of bits
    CComVariant val;
    val = WaveCaps.Supports16Bit() ? 16L : 8L;
    hRes = pCont->put_MemberValue(CComBSTR(L"bits"),val);
    if (!(SUCCEEDED(hRes))) return hRes;
      
    hRes = pCont->put_MemberValue(L"adaptorname",
        CComVariant(L"winsound"));
    if (!(SUCCEEDED(hRes))) return hRes;

    // driver description    
    bstr_t name = WaveCaps.GetDeviceName();
    V_VT(&val) = VT_BSTR;
    V_BSTR(&val) = name;
    hRes = pCont->put_MemberValue(L"devicename",val);
    if (!(SUCCEEDED(hRes))) return hRes;    

    hRes = pCont->put_MemberValue(L"vendordriverdescription",
	CComVariant(L"Windows Multimedia Driver"));
    if (!(SUCCEEDED(hRes))) return hRes;
       
    hRes = pCont->put_MemberValue(L"vendordriverversion",CComVariant(WaveCaps.GetDriverVersion()));
    if (!(SUCCEEDED(hRes))) return hRes;

    // native data type
    var = WaveCaps.Supports16Bit() ? VT_I2 : VT_UI1;
    hRes = pCont->put_MemberValue(L"nativedatatype", var);	
    if (!(SUCCEEDED(hRes))) return hRes;


    SetSampleRateRange(8000,static_cast<long>(WaveCaps.GetMaxSampleRate()));

    // input ranges --> move to input group    
    SAFEARRAY *ps = SafeArrayCreateVector(VT_R8, 0, 2);
    if (ps==NULL) 
        return E_OUTOFMEMORY;

    val.parray=ps;
    val.vt = VT_ARRAY | VT_R8;

    double *pr;
    
    hRes = SafeArrayAccessData(ps, (void **) &pr);
    if (FAILED (hRes)) 
    {
        SafeArrayDestroy (ps);
        return hRes;
    }       

    pr[0]=-1;
    pr[1]=1;

    SafeArrayUnaccessData (ps);

    hRes = pCont->put_MemberValue(CComBSTR(L"outputranges"), val);	
    if (!(SUCCEEDED(hRes))) return hRes;    

    return S_OK;
}
Esempio n. 13
0
		LRESULT CTangramWordPlusDocWnd::OOpenDoc(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& )
		{
			map<LONG, Office::_CustomTaskPane*>::iterator it = m_pWordAddin->m_mapTaskPaneMap.find((LONG)m_hWnd);
			if (it != m_pWordAddin->m_mapTaskPaneMap.end())
			{
				it->second->put_Visible(false);
				m_pWordAddin->m_mapTaskPaneMap.erase(it);
			}
			if(m_pWordAddin->m_pCurWordPlusDocWnd==NULL)
				return 0;
			CTangramWordPlusDocWnd* pWnd = m_pWordAddin->m_pCurWordPlusDocWnd;
			pWnd->m_pWordPlusDoc = (CTangramWordPlusDoc*)wParam;
			if(lParam==1&& pWnd)
			{
				CComBSTR bstrXml(L"");
				m_pWordAddin->GetTangramXml(pWnd->m_pWordPlusDoc->m_pDoc,CComBSTR(L"Tangrams"),&bstrXml);
				CString strTemplateXml =  OLE2T(bstrXml);
				pWnd->m_pWordPlusDoc->m_strDocXml = strTemplateXml;

				if (strTemplateXml != _T(""))
				{
					CTangramXmlParse m_Parse;
					if (m_Parse.LoadXml(strTemplateXml) || m_Parse.LoadFile(strTemplateXml))
					{
						CTangramXmlParse* pParse = m_Parse.GetChild(_T("TaskPaneUI"));
						if (pParse)
							pWnd->m_pWordPlusDoc->m_strTaskPaneXml = pParse->xml();
						pParse = m_Parse.GetChild(_T("DocumentUI"));
						if (pParse)
						{
							CTangramWordPlusDoc* pWordDocument = pWnd->m_pWordPlusDoc;
							theApp.m_pTangramCore->CreateTangram((LONGLONG)pWnd->m_hWnd, &pWordDocument->m_pTangram);
							if (pWordDocument->m_pTangram)
							{
								pWordDocument->m_pTangram->put_External(pWordDocument->m_pDoc);
								pWordDocument->m_pTangram->CreateFrame(CComVariant(0), CComVariant((LONGLONG)m_pWordAddin->m_pCurWordPlusDocWnd->m_hDocWnd), CComBSTR(L"Document"), &pWordDocument->m_pFrame);
								if (pWordDocument->m_pFrame)
								{
									CString strXml = pParse->xml();
									CComPtr<ITangramNode> pNode;
									pWordDocument->m_pFrame->Extend(CComBSTR(L"Default"), strXml.AllocSysString(), &pNode);
								}
							}
						}
						pParse = m_Parse.GetChild(_T("UserForms"));
						if (pParse)
						{
							int nCount = pParse->GetCount();
							if (nCount)
							{
								for (int i = 0; i < nCount; i++)
								{
									CTangramXmlParse* pParse2 = pParse->GetChild(i);
									m_pWordPlusDoc->m_mapUserFormScript[pParse2->name()] = pParse2->xml();
								}
							}
						}
					}
				}
			}
			return 0;
		}
HRESULT WpdCapabilities::DispatchWpdMessage(_In_ REFPROPERTYKEY          Command,
                                            _In_ IPortableDeviceValues*  pParams,
                                            _In_ IPortableDeviceValues*  pResults)
{
    HRESULT hr = S_OK;

    if (Command.fmtid != WPD_CATEGORY_CAPABILITIES)
    {
        hr = E_INVALIDARG;
        CHECK_HR(hr, "This object does not support this command category %ws",CComBSTR(Command.fmtid));
    }

    if (hr == S_OK)
    {
        if (IsEqualPropertyKey(Command, WPD_COMMAND_CAPABILITIES_GET_SUPPORTED_COMMANDS))
        {
            hr = OnGetSupportedCommands(pParams, pResults);
            CHECK_HR(hr, "Failed to get supported commands");
        }
        else if (IsEqualPropertyKey(Command, WPD_COMMAND_CAPABILITIES_GET_COMMAND_OPTIONS))
        {
            hr = OnGetCommandOptions(pParams, pResults);
            CHECK_HR(hr, "Failed to get command options");
        }
        else if (IsEqualPropertyKey(Command, WPD_COMMAND_CAPABILITIES_GET_SUPPORTED_FUNCTIONAL_CATEGORIES))
        {
            hr = OnGetFunctionalCategories(pParams, pResults);
            CHECK_HR(hr, "Failed to get functional categories");
        }
        else if (IsEqualPropertyKey(Command, WPD_COMMAND_CAPABILITIES_GET_FUNCTIONAL_OBJECTS))
        {
            hr = OnGetFunctionalObjects(pParams, pResults);
            CHECK_HR(hr, "Failed to get functional objects");
        }
        else if (IsEqualPropertyKey(Command, WPD_COMMAND_CAPABILITIES_GET_SUPPORTED_CONTENT_TYPES))
        {
            hr = OnGetSupportedContentTypes(pParams, pResults);
            CHECK_HR(hr, "Failed to get supported content types");
        }
        else if (IsEqualPropertyKey(Command, WPD_COMMAND_CAPABILITIES_GET_SUPPORTED_FORMATS))
        {
            hr = OnGetSupportedFormats(pParams, pResults);
            CHECK_HR(hr, "Failed to get supported formats");
        }
        else if (IsEqualPropertyKey(Command, WPD_COMMAND_CAPABILITIES_GET_SUPPORTED_FORMAT_PROPERTIES))
        {
            hr = OnGetSupportedFormatProperties(pParams, pResults);
            CHECK_HR(hr, "Failed to get supported format properties");
        }
        else if (IsEqualPropertyKey(Command, WPD_COMMAND_CAPABILITIES_GET_FIXED_PROPERTY_ATTRIBUTES))
        {
            hr = OnGetFixedPropertyAttributes(pParams, pResults);
            CHECK_HR(hr, "Failed to get fixed property attributes");
        }
        else if (IsEqualPropertyKey(Command, WPD_COMMAND_CAPABILITIES_GET_SUPPORTED_EVENTS))
        {
            hr = OnGetSupportedEvents(pParams, pResults);
            CHECK_HR(hr, "Failed to get supported events");
        }
        else if (IsEqualPropertyKey(Command, WPD_COMMAND_CAPABILITIES_GET_EVENT_OPTIONS))
        {
            hr = OnGetEventOptions(pParams, pResults);
            CHECK_HR(hr, "Failed to get event options");
        }
        else
        {
            hr = E_NOTIMPL;
            CHECK_HR(hr, "This object does not support this command id %d", Command.pid);
        }
    }
    return hr;
}
Esempio n. 15
0
/////////////////////////////////////////////////////////////////////////////
// AdaptorInfo()
//
// The function is used to elicit relevant info about the current HW..
//..configuration from the HW API.
//  The info to extract is:
//..1)number of boards installed
//..2)board names
//..3)supported subsystems (AnalogInput, AnalogOutput, DigitalIO)
// The function is called by the engine in response to the ML user..
//..command DAQHWINFO 
/////////////////////////////////////////////////////////////////////////////
HRESULT Cadvantechadapt::AdaptorInfo(IPropContainer * Container)
{
	LONG lDriverHandle = (LONG)NULL;          // driver handle
	PT_DeviceGetFeatures ptDevFeatures;		// Devfeatures table
	DEVFEATURES DevFeatures;					// structure for device features
	
	int i = 0;          // Index variable
	
	// Get the name of the adaptor module
	TCHAR name[256];
	GetModuleFileName(_Module.GetModuleInstance(),name,256); // null returns MATLAB version (non existant)
	RETURN_HRESULT(Container->put_MemberValue(L"adaptordllname",CComVariant(name)));
	
	// Place the adaptor name in the appropriate struct in the engine.
	RETURN_HRESULT(Container->put_MemberValue(L"adaptorname",variant_t(ConstructorName)));
	
	// Find board IDs
	// Start by obtaining the DeviceList. Not stored.
	short numDevices;			// Number of devices
	DEVLIST deviceList[MaxDev]; // Space to store device information.
	CComVariant var;			// General CComVariant to return info to adaptor engine.
	RETURN_ADVANTECH(DRV_DeviceGetList((DEVLIST far *)&deviceList[0], MaxDev, &numDevices));
	
	// Create storage for board IDs, bord names and constructors.
	TSafeArrayVector<CComBSTR> IDs;			// Create A SafeArrayVector to store the IDs in
	IDs.Allocate(numDevices);				// Allocate the memory for the number of devices
	TSafeArrayVector<CComBSTR> Names;		// Create A SafeArrayVector to store the Names in
	Names.Allocate(numDevices);				// Allocate the memory for the number of devices
	SAFEARRAY *ps;							// SafeArray for the subsystem support [nDx3 CComBStrs]
	CComBSTR *subsystems;
	SAFEARRAYBOUND arrayBounds[2]; 
	arrayBounds[0].lLbound = 0;
	arrayBounds[0].cElements = numDevices;    
	arrayBounds[1].lLbound = 0;
	arrayBounds[1].cElements = 3;			// AnalogInput, AnalogOutput, DigitalIO subsystems.
	ps = SafeArrayCreate(VT_BSTR, 2, arrayBounds);
	if (ps==NULL)
		return E_FAIL;      
	
	// Set up the variant to contain subsystem constructor SafeArray
	var.parray = ps;
	var.vt = VT_ARRAY | VT_BSTR;
	HRESULT hRes = SafeArrayAccessData(ps, (void **)&subsystems);
	if (FAILED (hRes)) 
	{
		SafeArrayDestroy (ps);
		return hRes;
	}
	
	// Now loop through each device, getting the ID, BoardName and subsystem support.
	wchar_t str[40];
	for (i=0; i < numDevices; i++)
	{
		// Allocate the ID
		char* string;
		string = new char[20];
		_ltoa(deviceList[i].dwDeviceNum, string, 10);
		IDs[i] = CComBSTR(string);
		
		// Open Device
		RETURN_ADVANTECH(DRV_DeviceOpen(deviceList[i].dwDeviceNum,(LONG far *)&lDriverHandle));
		
		// Get BoardNames info
		Names[i] = CComBSTR(deviceList[i].szDeviceName);
		
		// Check to see which subsystems the current board supports.
		// Get device features
		ptDevFeatures.buffer = (LPDEVFEATURES)&DevFeatures;
		ptDevFeatures.size = sizeof(DEVFEATURES);
		RETURN_ADVANTECH(DRV_DeviceGetFeatures(lDriverHandle, (LPT_DeviceGetFeatures)&ptDevFeatures));
		if ((DevFeatures.usMaxAIDiffChl + DevFeatures.usMaxAISiglChl) > 0) 
		{
			swprintf(str, L"analoginput('%s',%s)", (wchar_t*)ConstructorName, (wchar_t*)IDs[i]);
			subsystems[i]=str;
		}
		if (DevFeatures.usMaxAOChl > 0)
		{
			swprintf(str, L"analogoutput('%s',%s)", (wchar_t*)ConstructorName, (wchar_t*)IDs[i]);
			subsystems[i + numDevices]=str;
		}
		if ((DevFeatures.usMaxDIChl + DevFeatures.usMaxDOChl) > 0)
		{
			swprintf(str, L"digitalio('%s',%s)",(wchar_t*) ConstructorName, (wchar_t*)IDs[i]);
			subsystems[i + 2*numDevices] = str;
		}  
		// Close device
		RETURN_ADVANTECH(DRV_DeviceClose((LONG far *)&lDriverHandle));
	}
	
	// Return Object Constructor Names since they're in var already.
	SafeArrayUnaccessData (ps);    
	RETURN_HRESULT(Container->put_MemberValue(L"objectconstructorname",var));
	
	// Return the board names
	var.Clear();			// resuse the same 'var' variable for the boardnames.
	Names.Detach(&var);
	RETURN_HRESULT(Container->put_MemberValue(L"boardnames",var));
	
	// Return the board numbers
	var.Clear();			//reuse the same 'var' variable for the IDs[]
	IDs.Detach(&var);
	RETURN_HRESULT(Container->put_MemberValue(L"installedboardids",var));   
	
	return S_OK;
} // end of AdaptorInfo()
Esempio n. 16
0
HRESULT WpdObjectManagement::DispatchWpdMessage(
    const PROPERTYKEY&      Command,
    IPortableDeviceValues*  pParams,
    IPortableDeviceValues*  pResults)
{

    HRESULT hr = S_OK;

    if (hr == S_OK)
    {
        if (Command.fmtid != WPD_CATEGORY_OBJECT_MANAGEMENT)
        {
            hr = E_INVALIDARG;
            CHECK_HR(hr, "This object does not support this command category %ws",CComBSTR(Command.fmtid));
        }
    }

    if (hr == S_OK)
    {
        if (Command.pid == WPD_COMMAND_OBJECT_MANAGEMENT_DELETE_OBJECTS.pid)
        {
            hr = OnDelete(pParams, pResults);
            CHECK_HR(hr, "Failed to delete object");
        }
        else if (Command.pid == WPD_COMMAND_OBJECT_MANAGEMENT_CREATE_OBJECT_WITH_PROPERTIES_ONLY.pid)
        {
            hr = OnCreateObjectWithPropertiesOnly(pParams, pResults);
            CHECK_HR(hr, "Failed to create object");
        }
        else if (Command.pid == WPD_COMMAND_OBJECT_MANAGEMENT_CREATE_OBJECT_WITH_PROPERTIES_AND_DATA.pid)
        {
            hr = OnCreateObjectWithPropertiesAndData(pParams, pResults);
            CHECK_HR(hr, "Failed to create object");
        }
        else if (Command.pid == WPD_COMMAND_OBJECT_MANAGEMENT_WRITE_OBJECT_DATA.pid)
        {
            hr = OnWriteObjectData(pParams, pResults);
            CHECK_HR(hr, "Failed to write object data");
        }
        else if (Command.pid == WPD_COMMAND_OBJECT_MANAGEMENT_COMMIT_OBJECT.pid)
        {
            hr = OnCommit(pParams, pResults);
            CHECK_HR(hr, "Failed to commit object");
        }
        else if (Command.pid == WPD_COMMAND_OBJECT_MANAGEMENT_REVERT_OBJECT.pid)
        {
            hr = OnRevert(pParams, pResults);
            CHECK_HR(hr, "Failed to revert object");
        }
        else if (Command.pid == WPD_COMMAND_OBJECT_MANAGEMENT_MOVE_OBJECTS.pid)
        {
            hr = OnMove(pParams, pResults);
            CHECK_HR(hr, "Failed to Move objects");
        }
        else if (Command.pid == WPD_COMMAND_OBJECT_MANAGEMENT_COPY_OBJECTS.pid)
        {
            hr = OnCopy(pParams, pResults);
            CHECK_HR(hr, "Failed to Copy objects");
        }
        else if (Command.pid == WPD_COMMAND_OBJECT_MANAGEMENT_UPDATE_OBJECT_WITH_PROPERTIES_AND_DATA.pid)
        {
            hr = OnUpdateObjectWithPropertiesAndData(pParams, pResults);
            CHECK_HR(hr, "Failed to update object");
        }
        else
        {
            hr = E_NOTIMPL;
            CHECK_HR(hr, "This object does not support this command id %d", Command.pid);
        }
    }

    return hr;
}
Esempio n. 17
0
/*******************************************************************************
  Function Name  : vInitGraphControl
  Input(s)       : -
  Output         : -
  Functionality  : This function will initialise graph control. This will set
                   viewstyle parameters of the graph control
  Member of      : CGraphBottomView
  Author(s)      : Raja N
  Date Created   : 10/12/2004
  Modifications  :
*******************************************************************************/
void CGraphBottomView::vInitGraphControl()
{
    CGraphList* podList = NULL;
    CGraphChildFrame* pParentWnd = NULL;
    pParentWnd = (CGraphChildFrame*)pomGetParentWindow();

    if(pParentWnd != NULL)
    {
        podList = pParentWnd->pGetSignalListDetails();
    }
    else
    {
        return;
    }

    if( podList != NULL )
    {
        CGraphParameters* pEnv = &podList->m_odGraphParameters;

        if( pEnv != NULL )
        {
            // Init Active Axis
            m_nAxis = pEnv->m_nActiveAxis;
            // Init Active Action
            m_nAction = pEnv->m_nAction;
            // Set Show Grid Action
            vSetShowButtonState( pEnv->m_bShowGrid );

            // Set Graph Params
            if( m_pDMGraphCtrl != NULL )
            {
                // Set Axis Color
                m_pDMGraphCtrl->put_AxisColor((OLE_COLOR)pEnv->m_nAxisColor);
                // Set Plot Area Color
                m_pDMGraphCtrl->put_PlotAreaColor((OLE_COLOR)pEnv->m_nPlotAreaColor);
                // Set Grid Color
                m_pDMGraphCtrl->put_GridColor((OLE_COLOR)pEnv->m_nGridColor);
                // Set Frame Style
                m_pDMGraphCtrl->put_FrameStyle((FrameStyle)pEnv->m_nFrameStyle);
                // Set Frame Color
                m_pDMGraphCtrl->put_ControlFrameColor((OLE_COLOR)pEnv->m_nFrameColor);
                // Set Grid Lines Count
                CComPtr<IDMGraphAxis> spAxisX;
                m_pDMGraphCtrl->get_Axis( HorizontalX, &spAxisX);
                spAxisX->put_GridNumber((short)pEnv->m_nXGridLines);
                CComPtr<IDMGraphAxis> spAxisY;
                m_pDMGraphCtrl->get_Axis( VerticalY, &spAxisY);
                spAxisY->put_GridNumber((short)pEnv->m_nYGridLines);
                // Set Show Grid
                spAxisX->put_ShowGrid(pEnv->m_bShowGrid ? VARIANT_TRUE : VARIANT_FALSE);
                spAxisY->put_ShowGrid(pEnv->m_bShowGrid ? VARIANT_TRUE : VARIANT_FALSE);
                // Set Format String
                spAxisX->put_Format( CComBSTR(defSTR_X_AXIS_FORMAT) );
                spAxisY->put_Format( CComBSTR(defSTR_Y_AXIS_FORMAT) );
                // Set X,Y Range
                double dXMin,dXMax, dYMin, dYMax;
                m_pDMGraphCtrl->GetRange(&dXMin, &dXMax, &dYMin, &dYMax);
                dYMax = 100.0;
                m_pDMGraphCtrl->SetRange(defDEFAULT_XRANGE_MIN, defDEFAULT_XRANGE_MAX, dYMin, dYMax);
                //Set the caption
                BSTR bstrCaption(L"Graph Display - CAN");
                m_pDMGraphCtrl->put_Caption(bstrCaption);
            }

            // Update Local DDX Variables
            UpdateData( FALSE );
            // Update Axis and action
            vSetAction();
        }
    }
}
Esempio n. 18
0
BOOL CVCAMetaParserMSXML::ParseObjects( )
{
	// Find all the objects
	CComBSTR					bsTag;
	

	MSXML2::IXMLDOMNodePtr		pNode, pSubNode, pSubSubNode, pSubSubSubNode;	// Great names eh ;~)
	MSXML2::IXMLDOMNodeListPtr	pNodeList, pSubNodeList;

	// See if we have any objects this time round
	bsTag = CComBSTR( _XML_VCA ) += CComBSTR("/") += CComBSTR( _XML_OBJECTS );

	pNode = m_pDOMDoc->selectSingleNode( bsTag.operator BSTR() );
// 	ATLTRACE( "====================================================== \n" );

	if( pNode )
	{
		// There are some in this packet
		// Wipe out all exisiting
		m_vcaObjects.ulTotalObject = 0;

		// Select all objects
		bsTag = CComBSTR( _XML_OBJECT );

		pNodeList = pNode->selectNodes( bsTag.operator BSTR() );

		// Iterate through all the nodes
		pNode = pNodeList->nextNode();

		while( pNode )
		{
			VCA5_PACKET_OBJECT	vcaObj;
			memset( &vcaObj, 0, sizeof( vcaObj ) );

			// Id
			bsTag = CComBSTR( _XML_ID );
			pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
			if( pSubNode )
			{
				VarUI4FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned long *)&vcaObj.ulId );
			}

			// Calibrated height and speed
			bsTag = CComBSTR( _XML_CH );
			pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
			if( pSubNode )
			{				
				VarUI4FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned long *)&vcaObj.ulCalibHeight);
			}

			bsTag = CComBSTR( _XML_CS );
			pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
			if( pSubNode )
			{
				VarUI4FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned long *)&vcaObj.ulCalibSpeed);
			}

			bsTag = CComBSTR( _XML_CA );
			pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
			if( pSubNode )
			{
				VarUI4FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned long *)&vcaObj.ulCalibArea);
			}

			bsTag = CComBSTR( _XML_CLS );
			pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
			if( pSubNode )
			{
				VarI4FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (long *)&vcaObj.iClassificationId);
			}
			else
			{
				vcaObj.iClassificationId = -2;  // unknown	
			}

			bsTag = CComBSTR( _XML_COLSIG );
			pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
			if( pSubNode )
			{
				std::string tempColSigs = pSubNode->text;
				for(int n=0; n<VCA5_APP_PALETTE_SIZE; n++)
				{
					vcaObj.colSigs[n] = (UCHAR)strtoul( tempColSigs.substr(n*2,2).c_str(), NULL, 16 );
				}

// 				ATLTRACE( "%s: %d %d %d %d %d %d %d %d %d %d \n",  tempColSigs.c_str(), 
// 					vcaObj.colSigs[0], vcaObj.colSigs[1], vcaObj.colSigs[2], vcaObj.colSigs[3], vcaObj.colSigs[4],
// 					vcaObj.colSigs[5], vcaObj.colSigs[6], vcaObj.colSigs[7], vcaObj.colSigs[8], vcaObj.colSigs[9] );
			}
			else
			{
				for(int n=0; n<VCA5_APP_PALETTE_SIZE; n++)
				{
					vcaObj.colSigs[n] = 0;
				}
			}

			// Bounding box
			ParseBBox( pNode, &vcaObj.bBox );


			// Trail
			bsTag = CComBSTR( _XML_TRAIL );
			pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );

			if( pSubNode )
			{
				bsTag = CComBSTR( _XML_PT );
				pSubNodeList = pSubNode->selectNodes( bsTag.operator BSTR() );

				pSubSubNode = pSubNodeList->nextNode();
				vcaObj.trail.usNumTrailPoints = 0;
				while( pSubSubNode )
				{
					VCA5_POINT	vcaPoint;
					memset( &vcaPoint, 0, sizeof( vcaPoint ) );

					bsTag = CComBSTR( _XML_X );
					pSubSubSubNode = pSubSubNode->selectSingleNode( bsTag.operator BSTR() );
					if( pSubSubSubNode )
					{
						VarUI2FromStr( pSubSubSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned short *)&vcaPoint.x );
					}

					bsTag = CComBSTR( _XML_Y );
					pSubSubSubNode = pSubSubNode->selectSingleNode( bsTag.operator BSTR() );
					if( pSubSubSubNode )
					{
						VarUI2FromStr( pSubSubSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned short *)&vcaPoint.y);
					}

					// Ph it (like Salt 'n' Pepa)
					vcaObj.trail.trailPoints[vcaObj.trail.usNumTrailPoints] = vcaPoint;
					vcaObj.trail.usNumTrailPoints++;	

					pSubSubNode = pSubNodeList->nextNode();
				}
			}

			// Flags
			bsTag = CComBSTR( _XML_FLAGS );
			pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
			if( pSubNode )
			{
				VarUI4FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned long *)&vcaObj.ulFlags );
			}


			m_vcaObjects.Objects[m_vcaObjects.ulTotalObject]  = vcaObj;
			//m_vcaObjects.ph_back( vcaObj );
			m_vcaObjects.ulTotalObject++;

			pNode = pNodeList->nextNode();
		}
	}

	return TRUE;
}
Esempio n. 19
0
HRESULT AbstractDeviceContent::WriteValue(
    REFPROPERTYKEY     Key,
    const PROPVARIANT& Value)
{
    HRESULT             hr      = S_OK;
    PropVariantWrapper  pvValue;

    if(IsEqualPropertyKey(Key, WPD_OBJECT_NAME))
    {
        if(Value.vt == VT_LPWSTR)
        {
            if (wcslen(Value.pwszVal) > 0)
            {
                Name = Value.pwszVal;
            }
            else
            {
                hr = E_INVALIDARG;
                CHECK_HR(hr, "Failed to set WPD_OBJECT_NAME because value was an empty string");
            }
        }
        else
        {
            hr = E_INVALIDARG;
            CHECK_HR(hr, "Failed to set WPD_OBJECT_NAME because type was not VT_LPWSTR");
        }
    }
    else
    {
        hr = E_ACCESSDENIED;
        CHECK_HR(hr, "Property %ws.%d on [%ws] does not support set value operation", CComBSTR(Key.fmtid), Key.pid, ObjectID);
    }

    return hr;
}
Esempio n. 20
0
BOOL CVCAMetaParserMSXML::ParseEvents()
{
	
	// Find all the events
	USES_CONVERSION;
	CComBSTR					bsTag;

	MSXML2::IXMLDOMNodePtr		pNode, pSubNode, pSubSubNode, pSubSubSubNode;	// Great names eh ;~)
	MSXML2::IXMLDOMNodeListPtr	pNodeList, pSubNodeList;


	// See if we have any objects this time round
	bsTag = CComBSTR( _XML_VCA ) += CComBSTR("/") += CComBSTR( _XML_EVENTS );

	pNode = m_pDOMDoc->selectSingleNode( bsTag.operator BSTR() );
	
	if( pNode )
	{
		// There are some event specified in this packet... take a look...
		m_vcaEvents.ulTotalEvents = 0;

		// Select all events
		bsTag = CComBSTR( _XML_EVENT );

		pNodeList = pNode->selectNodes( bsTag.operator BSTR() );

		// Iterate through all the nodes
		pNode = pNodeList->nextNode();

		while( pNode )
		{
			VCA5_PACKET_EVENT vcaEvent;
			memset( &vcaEvent, 0, sizeof( VCA5_PACKET_EVENT ) );

			// <type>
			bsTag = CComBSTR( _XML_TYPE );

			pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
			if( pSubNode )
			{
				if( 0 == strcmp( pSubNode->text, "zone")) vcaEvent.ulEventType = VCA5_EVENT_TYPE_ZONE;
				else if( 0 == strcmp( pSubNode->text, "tamper")) vcaEvent.ulEventType = VCA5_EVENT_TYPE_TAMPER;
			}

			switch (vcaEvent.ulEventType)
			{
			case VCA5_EVENT_TYPE_TAMPER:
				m_uTamperAlarm = 300;

				strcpy( vcaEvent.szRuleName, "---" );
				strcpy( vcaEvent.szZoneName, "---" );
				break;

				// Deliberate fall-thru (durchfall :)
			case VCA5_EVENT_TYPE_ZONE:

				// <id>
				bsTag = CComBSTR( _XML_ID );

				pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
				if( pSubNode )
				{
					VarUI4FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned long *)&vcaEvent.ulId );
				}

				// <rule_name>
				// TBD
				
				// <rule_id>
				bsTag = CComBSTR( _XML_RULE_ID );

				pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
				if( pSubNode )
				{
					VarUI4FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned long *)&vcaEvent.ulRuleId );
				}

				// <rule_name>

				bsTag = CComBSTR( _XML_RULE_NAME );
				pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
				if( pSubNode )
				{
					strcpy( vcaEvent.szRuleName, CT2A(pSubNode->text , CP_UTF8) );
				}
				else
				{
					strcpy( vcaEvent.szRuleName, "---" );
				}

				// <obj_id> (multiple)
				bsTag = CComBSTR( _XML_OBJ_ID );
				pSubNodeList = pNode->selectNodes( bsTag.operator BSTR() );
				if( pSubNodeList )
				{
					pSubNode = pSubNodeList->nextNode();
					if( pSubNode )
						VarUI4FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned long *)&vcaEvent.ulObjId );
				}

				// <zone_id> (multiple)
				bsTag = CComBSTR( _XML_ZONE_ID );

				pSubNodeList = pNode->selectNodes( bsTag.operator BSTR() );
				if( pSubNodeList )
				{
					pSubNode = pSubNodeList->nextNode();

					while( pSubNode )
					{
						unsigned int uiZoneId;
						VarUI4FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned long *)&uiZoneId );

						vcaEvent.ulZoneId = uiZoneId;

						break;

						pSubNode = pSubNodeList->nextNode();
					}
				}

				// <zone_name> (multiple)
				bsTag = CComBSTR( _XML_ZONE_NAME );

				pSubNodeList = pNode->selectNodes( bsTag.operator BSTR() );
				if( pSubNodeList )
				{
					pSubNode = pSubNodeList->nextNode();
					while( pSubNode )
					{
						std::string szZoneName;
						szZoneName  = pSubNode->text;
						strcpy( vcaEvent.szZoneName, szZoneName.c_str());

						// Assume only 1
						break;
						pSubNode = pSubNodeList->nextNode();
					}
				}
/*
				// <obj_id> (multiple)
				bsTag = CComBSTR( _XML_OBJ_ID );

				pSubNodeList = pNode->selectNodes( bsTag.operator BSTR() );
				if( pSubNodeList )
				{
					pSubNode = pSubNodeList->nextNode();

					while( pSubNode )
					{
						unsigned int uiObjId;

						VarUI4FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned long *)&uiObjId );

						vcaEvent.vObjIds.push_back( uiObjId );

						pSubNode = pSubNodeList->nextNode();
					}
				}

				// <obj_cls_name> (multiple)
				bsTag = CComBSTR( _XML_OBJ_CLS_NAME );

				pSubNodeList = pNode->selectNodes( bsTag.operator BSTR() );
				if( pSubNodeList )
				{
					pSubNode = pSubNodeList->nextNode();
					while( pSubNode )
					{
						std::string szObjClsName;
						szObjClsName  = pSubNode->text;
						vcaEvent.vObjClsNames.push_back( szObjClsName );
						pSubNode = pSubNodeList->nextNode();
					}
				}
*/
				// <status>
				bsTag = CComBSTR( _XML_STATUS );

				pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
				if( pSubNode )
				{
					VarUI4FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned long *)&vcaEvent.ulStatus );
				}

				// <start_time>
				bsTag = CComBSTR( _XML_START_TIME ) += CComBSTR("/") += CComBSTR( _XML_S );

				pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
				if( pSubNode )
				{
					//time_t tTime;
					VarUI4FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned long *)&vcaEvent.tStartTime.ulSec  );
					//vcaEvent.tStartTime = CTime( tTime );
				}

				bsTag = CComBSTR( _XML_START_TIME ) += CComBSTR("/") += CComBSTR( _XML_MS );

				pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
				if( pSubNode )
				{
					//time_t tTime;
					VarUI4FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned long *)&vcaEvent.tStartTime.ulMSec );
					//vcaEvent.tStartTime = CTime( tTime );
				}

				// <end_time>
				bsTag = CComBSTR( _XML_END_TIME ) += CComBSTR("/") += CComBSTR( _XML_S );

				pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
				if( pSubNode )
				{
					//time_t tTime;
					VarUI4FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned long *)&vcaEvent.tStopTime.ulSec  );
					//vcaEvent.tStopTime = CTime( tTime );
				}

				bsTag = CComBSTR( _XML_END_TIME ) += CComBSTR("/") += CComBSTR( _XML_MS );

				pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
				if( pSubNode )
				{
					//time_t tTime;
					VarUI4FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned long *)&vcaEvent.tStopTime.ulMSec  );
					//vcaEvent.tStopTime = CTime( tTime );
				}

				// Bounding box
				ParseBBox( pNode, &vcaEvent.bBox );

				m_vcaEvents.Events[m_vcaEvents.ulTotalEvents] =  vcaEvent;
				m_vcaEvents.ulTotalEvents++;

			break;

			default: break;
			
			}

			pNode = pNodeList->nextNode();
		}
	}

	return TRUE;
}
STDMETHODIMP CStrokeRecognition::put_RecognitionParam(BSTR newVal)
{
	double		Segment_Error_Threshold;
	double		Arc_Error_Threshold;
	double		Arc_Min_Length;
	double		Arc_Min_Curve;
	double		Stroke_Min_Length;
	double		Min_Turning_Angle;
	double		Segmentation_Penalty;
	VARIANT		value;
	BSTR		nodeName;
	long		n;

	IXMLDOMDocument*		pDoc;
	IXMLDOMNodeList*		pNodeList;
	IXMLDOMNode*			pNode;
	IXMLDOMNode*			pParamNode;
	IXMLDOMNode*			pAttrNode;
	IXMLDOMNamedNodeMap*	pNodeMap;
	VARIANT_BOOL			bLoaded;

	GetFittingParam(Segment_Error_Threshold, Arc_Error_Threshold, Arc_Min_Length, Arc_Min_Curve, Stroke_Min_Length, Min_Turning_Angle, Segmentation_Penalty);

	if (SUCCEEDED(CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument, (LPVOID*)&pDoc)))
	{
		pDoc->put_async(VARIANT_FALSE);
		pDoc->loadXML(newVal, &bLoaded);

		if (bLoaded == VARIANT_TRUE)
		{
			if (SUCCEEDED(pDoc->get_childNodes(&pNodeList)))
			{
				pParamNode = NULL;

				pNodeList->get_length(&n);

				for (int i = 0; i < n; i++)
				{
					if (SUCCEEDED(pNodeList->get_item(i, &pNode)))
					{
						nodeName = NULL;
						if (SUCCEEDED(pNode->get_nodeName(&nodeName)))
						{
							if (CComBSTR(nodeName) == L"param")
							{
								pParamNode = pNode;
								pParamNode->AddRef();
								break;
							}
							SysFreeString(nodeName);
						}
						pNode->Release();
					}
				}

				pNodeList->Release();

				if (pParamNode != NULL)
				{
					if (SUCCEEDED(pParamNode->get_attributes(&pNodeMap)))
					{
						if (SUCCEEDED(pNodeMap->getNamedItem(L"Segment_Error_Threshold", &pAttrNode)))
						{
							pAttrNode->get_nodeValue(&value);
							Segment_Error_Threshold = _wtof(value.bstrVal);
							pAttrNode->Release();
						}
						if (SUCCEEDED(pNodeMap->getNamedItem(L"Arc_Error_Threshold", &pAttrNode)))
						{
							pAttrNode->get_nodeValue(&value);
							Arc_Error_Threshold = _wtof(value.bstrVal);
							pAttrNode->Release();
						}
						if (SUCCEEDED(pNodeMap->getNamedItem(L"Arc_Min_Length", &pAttrNode)))
						{
							pAttrNode->get_nodeValue(&value);
							Arc_Min_Length = _wtof(value.bstrVal);
							pAttrNode->Release();
						}
						if (SUCCEEDED(pNodeMap->getNamedItem(L"Arc_Min_Curve", &pAttrNode)))
						{
							pAttrNode->get_nodeValue(&value);
							Arc_Min_Curve = _wtof(value.bstrVal);
							pAttrNode->Release();
						}
						if (SUCCEEDED(pNodeMap->getNamedItem(L"Stroke_Min_Length", &pAttrNode)))
						{
							pAttrNode->get_nodeValue(&value);
							Stroke_Min_Length = _wtof(value.bstrVal);
							pAttrNode->Release();
						}
						if (SUCCEEDED(pNodeMap->getNamedItem(L"Min_Turning_Angle", &pAttrNode)))
						{
							pAttrNode->get_nodeValue(&value);
							Min_Turning_Angle = _wtof(value.bstrVal);
							pAttrNode->Release();
						}
						if (SUCCEEDED(pNodeMap->getNamedItem(L"Segmentation_Penalty", &pAttrNode)))
						{
							pAttrNode->get_nodeValue(&value);
							Segmentation_Penalty = _wtof(value.bstrVal);
							pAttrNode->Release();
						}

						pNodeMap->Release();
					}

					pParamNode->Release();
				}
			}
		}

		pDoc->Release();
	}

	SetFittingParam(Segment_Error_Threshold, Arc_Error_Threshold, Arc_Min_Length, Arc_Min_Curve, Stroke_Min_Length, Min_Turning_Angle, Segmentation_Penalty);

	return S_OK;
}
Esempio n. 22
0
BOOL CVCAMetaParserMSXML::ParseBBox( MSXML2::IXMLDOMNodePtr pNode, VCA5_RECT *pBbox )
{
	MSXML2::IXMLDOMNodePtr pSubNode;
	CComBSTR bsTag;

	// Bounding Box
	bsTag = CComBSTR( _XML_BB ) += CComBSTR("/") += CComBSTR( _XML_X );
	pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
	if( pSubNode )
	{
		VarUI2FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned short *)&pBbox->x );
	}

	bsTag = CComBSTR( _XML_BB ) += CComBSTR("/") += CComBSTR( _XML_Y );
	pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
	if( pSubNode )
	{
		VarUI2FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned short *)&pBbox->y );
	}

	bsTag = CComBSTR( _XML_BB ) += CComBSTR("/") += CComBSTR( _XML_W );
	pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
	if( pSubNode )
	{
		VarUI2FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned short *)&pBbox->w );
	}

	bsTag = CComBSTR( _XML_BB ) += CComBSTR("/") += CComBSTR( _XML_H );
	pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
	if( pSubNode )
	{
		VarUI2FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned short *)&pBbox->h);
	}

	return TRUE;
}
Esempio n. 23
0
STDMETHODIMP CShowWindowCommand::GetCommandText(REFGUID guidCommand, BSTR* bstrText)
{
	CHECK_E_POINTER(bstrText);
	*bstrText = CComBSTR(L"Settings...");
	return S_OK;
}
Esempio n. 24
0
//---------------------------------------------------------------------------
BOOL CVCAMetaParserMSXML::ParseCE( )
{

	CComBSTR bsTag;

	MSXML2::IXMLDOMNodePtr		pNode, pSubNode, pSubSubNode;	// Great names eh ;~)
	MSXML2::IXMLDOMNodeListPtr	pNodeList;

		// See if we have any objects this time round
	bsTag = CComBSTR( _XML_VCA ) += CComBSTR("/") += CComBSTR( _XML_COUNTEVENTS );

	pNode = m_pDOMDoc->selectSingleNode( bsTag.operator BSTR() );

	if( pNode )
	{
		// There are some event specified in this packet... take a look...
		memset(&m_vcaCountLineEvents, 0, sizeof(m_vcaCountLineEvents));
		// Select all events
		bsTag = CComBSTR( _XML_CE );

		pNodeList = pNode->selectNodes( bsTag.operator BSTR() );

		// Iterate through all the nodes
		pNode = pNodeList->nextNode();

		while( pNode )
		{
			VCA5_COUNTLINE_EVENT clEvent;
			memset( &clEvent, 0, sizeof( VCA5_COUNTLINE_EVENT ) );


			// pClEvent 
			bsTag = CComBSTR( _XML_ID );
			pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
			if( pSubNode )
			{
				VarUI4FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned long *)&clEvent.uiId );
			}


			bsTag = CComBSTR( _XML_P );
			pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
			if( pSubNode )
			{
				VarUI2FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned short *)&clEvent.usPos );
			}

			bsTag = CComBSTR( _XML_W );
			pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
			if( pSubNode )
			{
				VarUI2FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned short *)&clEvent.usWidth );
			}
			
			bsTag = CComBSTR( _XML_N );
			pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
			if( pSubNode )
			{
				VarUI2FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned short *)&clEvent.usNum );
			}

			m_vcaCountLineEvents.CountLineEvents[m_vcaCountLineEvents.ulTotalCountLineEvents] = clEvent;
			m_vcaCountLineEvents.ulTotalCountLineEvents++;

			pNode = pNodeList->nextNode();
		}
	}

	return TRUE;
}
void CMSDNForumHelper::RevealHiddenLinks(IHTMLDocument2* pDocument)
{
	CComBSTR url;
	HRESULT hr=pDocument->get_URL(&url);
	if(hr==S_OK)
	{
		url.ToLower();
		CString urlString(url);
		if(urlString.Find(_T("microsoft.com"))==-1)
			return;
		if(urlString.Find(_T("social"))==1)
			return;
		
	}
    CComPtr<IHTMLElementCollection> linkElementCollection;

    // Get the collection of images from the DOM.
	 hr = pDocument->get_links(&linkElementCollection);
    if (hr == S_OK && linkElementCollection != NULL)
    {
        // Get the number of images in the collection.
        long linkCount = 0;
        hr = linkElementCollection->get_length(&linkCount);
        if (hr == S_OK && linkCount > 0)
        {
            for (int i = 0; i < linkCount; i++)
            {
                CComVariant varItemIndex(i);
                CComVariant varEmpty;
                CComPtr<IDispatch> linkDispatch;
                // Get the link out of the collection by index.
                hr = linkElementCollection->item(varItemIndex, varEmpty, &linkDispatch);
                if (hr == S_OK && linkDispatch != NULL)
                {
					//filter out hot spot on images
					CComQIPtr<IHTMLAnchorElement> anchorElement(linkDispatch);
					if(anchorElement==NULL) continue;
                    //query for the generic HTML element interface
					CComQIPtr<IHTMLElement> linkElement(linkDispatch);					
                    if (linkElement)
                    {
                        // ...then ask for the style interface.
                        CComPtr<IHTMLStyle> linkStyle;
						hr = linkElement->get_style(&linkStyle);

                        // Set display="none" to hide the image.
                        if (hr == S_OK && linkStyle != NULL)
                        {                            
							CComVariant linkCollor;
							hr=linkStyle->get_color(&linkCollor);
							if(linkCollor.vt==VT_BSTR)
							{
								CComBSTR linkCollorString(linkCollor.bstrVal);
								if (hr == S_OK && linkCollorString.Length()>0)
								{
									linkStyle->put_backgroundColor(CComVariant(_T("red")));
									linkStyle->put_color(CComVariant(_T("")));
									CComBSTR href,text;
									anchorElement->get_href(&href);
									linkElement->get_innerText(&text);
									CString newText;
									newText.Format(_T("hidden link, possible spam: text: %s, url: %s"),text,href);
									linkElement->put_innerText(CComBSTR(newText));
								}
							}
                        }
                    }
                }
            }
        }
    }
}
Esempio n. 26
0
BOOL CVCAMetaParserMSXML::ParseBlobsImp(char* szTag, VCA5_PACKET_BLOBMAP *pBLOBMAP)
{
	CComBSTR					bsTag;

	MSXML2::IXMLDOMNodePtr		pNode, pSubNode;	// Great names eh ;~)
	MSXML2::IXMLDOMNodeListPtr	pNodeList, pSubNodeList;
	unsigned int				uiWidth = 0, uiHeight = 0;


	// See if we have any objects this time round
	bsTag = CComBSTR( _XML_VCA ) += CComBSTR("/") += CComBSTR( szTag );

	pNode = m_pDOMDoc->selectSingleNode( bsTag.operator BSTR() );

	if( pNode )
	{
		// Tampermap is there
		bsTag = CComBSTR( _XML_W );
		pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
		if( pSubNode )
		{
			VarUI4FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned long *)&uiWidth );
		}

		bsTag = CComBSTR( _XML_H );
		pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
		if( pSubNode )
		{
			VarUI4FromStr( pSubNode->text, LCID_ENGLISH, LOCALE_NOUSEROVERRIDE, (unsigned long *)&uiHeight );
		}

		if( uiWidth != pBLOBMAP->ulWidth || uiHeight != pBLOBMAP->ulHeight )
		{
			if (pBLOBMAP->pBlobMap)
				delete [] pBLOBMAP->pBlobMap;

			pBLOBMAP->pBlobMap	= new unsigned char[ uiWidth * (uiHeight+1) ];
			pBLOBMAP->ulWidth	= uiWidth;
			pBLOBMAP->ulHeight	= uiHeight;
		}

		// Now look for the data
		bsTag = CComBSTR( _XML_DATA );
		pSubNode = pNode->selectSingleNode( bsTag.operator BSTR() );
		if( pSubNode )
		{
			unsigned char *pBlobMap = pBLOBMAP->pBlobMap;

			// Demunge the data
			CString s( (LPCWSTR) pSubNode->text );
			TCHAR *pS = s.GetBuffer(0);
			int len = s.GetLength();

			for( int i = 0; i < s.GetLength(); i++ )
			{
				char cc = (char)pS[i];
				unsigned char ucBits = m_base64[pS[i]];

				*pBlobMap++	= ucBits & 0x01 ? 1 : 0;
				*pBlobMap++	= ucBits & 0x02 ? 1 : 0;
				*pBlobMap++	= ucBits & 0x04 ? 1 : 0;
				*pBlobMap++	= ucBits & 0x08 ? 1 : 0;
				*pBlobMap++	= ucBits & 0x10 ? 1 : 0;
				*pBlobMap++	= ucBits & 0x20 ? 1 : 0;
			}
			
		}

		pBLOBMAP->ulMapAge = 0;
	}else{
		pBLOBMAP->ulMapAge++;
	
		// we shoud get map update every 2nd frame
		// if map is 2 frames old so clean it up or else we get old map hanging around
		if ( pBLOBMAP->ulMapAge == 2 && pBLOBMAP->pBlobMap )
		{
			memset( pBLOBMAP->pBlobMap, 0, pBLOBMAP->ulWidth * pBLOBMAP->ulHeight );
		}
	}


	return TRUE;

}
Esempio n. 27
0
void CIntelBottomView::OnDraw(CDC* dc)
{
	CBotEDoc* pDoc = resources::pDoc;
	AssertBotE(pDoc);

	if (!pDoc->m_bDataReceived)
		return;

	CMajor* pMajor = m_pPlayersRace;
	AssertBotE(pMajor);
	if (!pMajor)
		return;
	// TODO: add draw code here

	// Doublebuffering wird initialisiert
	CMyMemDC pDC(dc);
	CRect client;
	GetClientRect(&client);

	// Graphicsobjekt, in welches gezeichnet wird anlegen
	Graphics g(pDC->GetSafeHdc());

	g.Clear(static_cast<Gdiplus::ARGB>(Color::Black));
	g.SetSmoothingMode(SmoothingModeHighSpeed);
	g.SetInterpolationMode(InterpolationModeLowQuality);
	g.SetPixelOffsetMode(PixelOffsetModeHighSpeed);
	g.SetCompositingQuality(CompositingQualityHighSpeed);
	g.ScaleTransform((REAL)client.Width() / (REAL)m_TotalSize.cx, (REAL)client.Height() / (REAL)m_TotalSize.cy);

	CString fontName = "";
	Gdiplus::REAL fontSize = 0.0;
	StringFormat fontFormat;
	SolidBrush fontBrush(static_cast<Gdiplus::ARGB>(Color::White));

	Color color;
	color.SetFromCOLORREF(pMajor->GetDesign()->m_clrGalaxySectorText);

	fontBrush.SetColor(color);
	Bitmap* graphic = pDoc->GetGraphicPool()->GetGDIGraphic("Backgrounds\\" + pMajor->GetPrefix() + "diplomacyV3.boj");

	// Grafik zeichnen
	if (graphic)
	{
		g.DrawImage(graphic, 0, 0, 1075, 249);
		graphic = NULL;
	}

	// Nur in bestimmten Submenüs werden in der View3 Berichte angezeigt
	BYTE curIntelSubMenu = resources::pMainFrame->GetSubMenu(RUNTIME_CLASS(CIntelMenuView));
	if (curIntelSubMenu == 4 || curIntelSubMenu == 5)
	{
		CRect r;
		r.SetRect(0,0,m_TotalSize.cx,m_TotalSize.cy);
		short n = pMajor->GetEmpire()->GetIntelligence()->GetIntelReports()->GetActiveReport();
		if (n != -1)
		{
			CFontLoader::CreateGDIFont(pMajor, 4, fontName, fontSize);
			fontFormat.SetAlignment(StringAlignmentNear);
			fontFormat.SetLineAlignment(StringAlignmentNear);
			fontFormat.SetFormatFlags(StringFormatFlagsNoWrap);
			CIntelObject* report = pMajor->GetEmpire()->GetIntelligence()->GetIntelReports()->GetReport(n);
			CString s;
			if (report->GetIsSpy())
				s = CLoc::GetString("SPY");
			else
				s = CLoc::GetString("SABOTAGE");
			g.DrawString(CComBSTR(s), -1, &Gdiplus::Font(CComBSTR(fontName), fontSize), RectF(40, 40, r.right-100, r.bottom-20), &fontFormat, &fontBrush);

			CFontLoader::CreateGDIFont(pMajor, 2, fontName, fontSize);
			fontBrush.SetColor(Color(200,200,250));
			fontFormat.SetFormatFlags(!StringFormatFlagsNoWrap);
			if (report->GetOwner() == pMajor->GetRaceID())
				s = *report->GetOwnerDesc();
			else
				s = *report->GetEnemyDesc();
			g.DrawString(CComBSTR(s), -1, &Gdiplus::Font(CComBSTR(fontName), fontSize), RectF(40, 100, r.right-250, r.bottom-20), &fontFormat, &fontBrush);
		}
	}
	g.ReleaseHDC(pDC->GetSafeHdc());
}
int parseCommandLine() {

    int iRet    =   0;
    int iNumArgs, iNumToBeProcessed;

    LPTSTR lpstrCommandArgs=GetCommandLine();
    
    LPTSTR *rgCmdArgs=CommandLineToArgvW(lpstrCommandArgs,&iNumArgs);

    // To take care of no command line arguments
    if (iNumArgs <= 1 ) {
        iRet = -1;
        goto Cleanup;
    }

    // Check if one argument only and that is the /? argument
    if (0==_tcsncicmp(rgCmdArgs[1],CAzGlobalOptions::HELPTAG , CAzGlobalOptions::HELPTAG_LEN)) {
          DisplayUsage();
          iRet = 1;
          goto Cleanup;
    }

    // if more than one argument but not the required 2 arguments
    if (iNumArgs < 3 ) {
        iRet = -1;
        goto Cleanup;
    }

    CAzGlobalOptions::m_bstrDestStoreName.Attach(CComBSTR(rgCmdArgs[1]).Copy());

    CAzGlobalOptions::m_bstrSourceStoreName.Attach(CComBSTR(rgCmdArgs[2]).Copy());

    CAzGlobalOptions::setDefaults();

    iNumToBeProcessed = iNumArgs-3;

    for (int i = 3 ; i < iNumArgs ; i++) {
        
        // Checking for /logfile
        if (0==_tcsncicmp(rgCmdArgs[i],CAzGlobalOptions::LOGFILETAG,CAzGlobalOptions::LOGFILETAG_LEN)) {

            _TCHAR *strRightPart=_tcschr(rgCmdArgs[i],_TCHAR('='));

            if (NULL==strRightPart) {
                iRet = -1;
                goto Cleanup;
            }

            CAzLogging::Initialize(CAzLogging::LOG_LOGFILE,&strRightPart[1]);

            iNumToBeProcessed--;

        } else if (0==_tcsncicmp(rgCmdArgs[i],CAzGlobalOptions::APPNAMETAG,CAzGlobalOptions::APPNAMETAG_LEN)) {

            //Checking for /application flag

            LPTSTR strTmp;

            _TCHAR *strRightPart=_tcschr(rgCmdArgs[i],_TCHAR('='));

            if (NULL==strRightPart) {
                iRet = -1;
                goto Cleanup;
            }
            CAzGlobalOptions::m_bSpecificApp=true;

            _TCHAR *strAppNames =_tcstok_s(&strRightPart[1],_TEXT(","),&strTmp);

            while (strAppNames!=NULL) {

                CAzGlobalOptions::m_bstrAppNames.push_back(CComBSTR(strAppNames).Copy());

                /* While there are tokens in "string" */
                /* Get next token: */

                strAppNames =_tcstok_s(NULL,_TEXT(","),&strTmp);

                }

            iNumToBeProcessed--;

        } else if (0==_tcsncicmp(rgCmdArgs[i] , CAzGlobalOptions::OVERWRITETAG , CAzGlobalOptions::OVERWRITETAG_LEN)) {

            //Checking for /overwrite flag

            CAzGlobalOptions::m_bOverWrite=true;

            iNumToBeProcessed--;

        } else if (0==_tcsncicmp(rgCmdArgs[i] , CAzGlobalOptions::IGNOREMEMBERSTAG,CAzGlobalOptions::IGNOREMEMBERSTAG_LEN)) {

            //Checking for /IGNOREMEMBERS flag

            CAzGlobalOptions::m_bIgnoreMembers=true;

            iNumToBeProcessed--;

        } else if (0==_tcsncicmp(rgCmdArgs[i] , CAzGlobalOptions::IGNOREPOLICYADMINSTAG , CAzGlobalOptions::IGNOREPOLICYADMINSTAG_LEN)) {

            //Checking for /IGNOREPOLICYADMIN flag

            CAzGlobalOptions::m_bIgnorePolicyAdmins=true;

            iNumToBeProcessed--;

        } else if (0==_tcsncicmp(rgCmdArgs[i] , CAzGlobalOptions::VERBOSETAG , CAzGlobalOptions::VERBOSETAG_LEN)) {

            CAzGlobalOptions::m_bVerbose=true;

            CAzLogging::Initialize(CAzLogging::LOG_TRACE);

            iNumToBeProcessed--;

        } else if (0==_tcsncicmp(rgCmdArgs[i] , CAzGlobalOptions::HELPTAG , CAzGlobalOptions::HELPTAG_LEN)) {

            DisplayUsage();

            iNumToBeProcessed--;
            iRet = 1;
            goto Cleanup;
        }
    }
    // Some additional parameters exist which donot match
    // hence these are invalid flags.
    if (0 != iNumToBeProcessed)
    {
        iRet = -1;
        goto Cleanup;
    }

    iRet = 0;

Cleanup:
    
    if (rgCmdArgs)
    {
        LocalFree(rgCmdArgs);
    }

    return iRet;
}
Esempio n. 29
0
extern "C" __declspec(dllexport) bool PinToStartMenu4XP(bool bPin, char* szPath)
{
	TSAUTO();

	TCHAR file_dir[MAX_PATH + 1] = {0};
	TCHAR *file_name;
	wchar_t* pwstr_Path = AnsiToUnicode(szPath);
	if(pwstr_Path == NULL){
		return false;
	}

	wcscpy_s(file_dir,MAX_PATH,pwstr_Path);
	PathRemoveFileSpecW(file_dir);
	file_name = PathFindFileName(pwstr_Path);
	::CoInitialize(NULL);
	CComPtr<IShellDispatch> pShellDisp;
	CComPtr<Folder> folder_ptr;
	CComPtr<FolderItem> folder_item_ptr;
	CComPtr<FolderItemVerbs> folder_item_verbs_ptr;


	HRESULT rv = CoCreateInstance( CLSID_Shell, NULL, CLSCTX_SERVER,IID_IDispatch, (LPVOID *) &pShellDisp );
	do 
	{
		IF_FAILED_OR_NULL_BREAK(rv,pShellDisp);
		rv = pShellDisp->NameSpace(_variant_t(file_dir),&folder_ptr);
		IF_FAILED_OR_NULL_BREAK(rv,folder_ptr);
		rv = folder_ptr->ParseName(CComBSTR(file_name),&folder_item_ptr);
		IF_FAILED_OR_NULL_BREAK(rv,folder_item_ptr);
		rv = folder_item_ptr->Verbs(&folder_item_verbs_ptr);
		IF_FAILED_OR_NULL_BREAK(rv,folder_item_verbs_ptr);
		long count = 0;
		folder_item_verbs_ptr->get_Count(&count);
		for (long i = 0; i < count ; ++i)
		{
			FolderItemVerb* item_verb = NULL;
			rv = folder_item_verbs_ptr->Item(_variant_t(i),&item_verb);
			if (SUCCEEDED(rv) && item_verb)
			{
				CComBSTR bstrName;
				item_verb->get_Name(&bstrName);

				if ( VerbNameMatch(bstrName,bPin) )
				{
					TSDEBUG4CXX("Find Verb to Pin:"<< bstrName);
					int i = 0;
					do
					{
						rv = item_verb->DoIt();
						TSDEBUG4CXX("Try Do Verb. NO." << i+1 << ", return="<<rv);
						if (SUCCEEDED(rv))
						{
							::SHChangeNotify(SHCNE_UPDATEDIR|SHCNE_INTERRUPT|SHCNE_ASSOCCHANGED, SHCNF_IDLIST |SHCNF_FLUSH | SHCNF_PATH|SHCNE_ASSOCCHANGED,
								pwstr_Path,0);
							Sleep(500);
							delete [] pwstr_Path;
							::CoUninitialize();
							return true;
						}else
						{
							Sleep(500);
							rv = item_verb->DoIt();
						}
					}while ( i++ < 3);
						
					break;
				}
			}
		}
	} while (0);
	delete [] pwstr_Path;
	::CoUninitialize();
	return false;
}
Esempio n. 30
0
HRESULT ExchangeAdmin::CreateExchangeMailBox(LPCWSTR lpwstrNewUser, LPCWSTR lpwstrNewUserPwd,
    LPCWSTR lpwstrlogonuser, LPCWSTR lpwstrLogonUsrPwd)
{
    HRESULT hr = S_OK;

    // Get Logon user DN
    wstring LogonUserDN;
    wstring legacyName;
	wstring msExchHomeSvrName;
    Zimbra::MAPI::Util::GetUserDNAndLegacyName(m_strServer.c_str(), lpwstrlogonuser,
        lpwstrLogonUsrPwd, LogonUserDN, legacyName);
	Zimbra::MAPI::Util::GetmsExchHomeServerName(m_strServer.c_str(), lpwstrlogonuser,
        lpwstrLogonUsrPwd, msExchHomeSvrName);
    Zimbra::Util::ScopedInterface<IDirectoryObject> pLogonContainer;
	Zimbra::Util::ScopedInterface<IADsUser> pIAdUser;
	Zimbra::Util::ScopedInterface<IADs> pIAds;
    wstring strContainer = L"LDAP://";

    strContainer += LogonUserDN.c_str();

    dloge("strContainer %S  msExchHomeSvrName: %S", strContainer.c_str(), msExchHomeSvrName.c_str());
    // Get loggedin user container
    hr = ADsOpenObject(strContainer.c_str(), NULL, NULL, ADS_SECURE_AUTHENTICATION,
        IID_IDirectoryObject, (void **)pLogonContainer.getptr());
    if (FAILED(hr))
    {
        if (hr == 0x8007052e)                   // credentials are not valid
        {
            hr = ADsOpenObject((LPTSTR)strContainer.c_str(), lpwstrlogonuser, lpwstrLogonUsrPwd,
				ADS_SECURE_AUTHENTICATION, IID_IDirectoryObject, (void **)pLogonContainer.getptr());
			if (FAILED(hr)||(pLogonContainer.get()==NULL))
                throw ExchangeAdminException(hr,L"CreateExchangeMailBox(): ADsOpenObject Failed.",
				ERR_ADOBJECT_OPEN, __LINE__, __FILE__);
        }
        else
        {
            throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): ADsOpenObject Failed.",
                ERR_ADOBJECT_OPEN, __LINE__, __FILE__);
        }
    }

    ADS_ATTR_INFO *pAttrInfo = NULL;
    DWORD dwReturn;
    LPWSTR pAttrNames[] = { L"mail", L"homeMDB", L"homeMTA" };
    DWORD dwNumAttr = sizeof (pAttrNames) / sizeof (LPWSTR);
    wstring strLogonHomeMDB;
    wstring strLogonHomeMTA;
    wstring strLogonMail;

    // Get attribute values requested. Its not necessary the order is same as requested.
    if (FAILED(hr = pLogonContainer->GetObjectAttributes(pAttrNames, dwNumAttr, &pAttrInfo,
            &dwReturn)))
        throw ExchangeAdminException(hr,L"CreateExchangeMailBox(): GetObjectAttributes Failed.", 
		ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
    for (DWORD idx = 0; idx < dwReturn; idx++)
    {
        if (_wcsicmp(pAttrInfo[idx].pszAttrName, L"mail") == 0)
            strLogonMail = pAttrInfo[idx].pADsValues->Email.Address;

        else if (_wcsicmp(pAttrInfo[idx].pszAttrName, L"homeMTA") == 0)
            strLogonHomeMTA = pAttrInfo[idx].pADsValues->DNString;

        else if (_wcsicmp(pAttrInfo[idx].pszAttrName, L"homeMDB") == 0)
            strLogonHomeMDB = pAttrInfo[idx].pADsValues->DNString;
    }
    // Use FreeADsMem for all memory obtained from the ADSI call.
    FreeADsMem(pAttrInfo);

    wstring twtsrlogonuserDN = LogonUserDN;
    size_t nPos = twtsrlogonuserDN.find(_T("DC="), 0);
    wstring wstrServerDN = twtsrlogonuserDN.substr(nPos);
    wstring wstrADSPath = _T("LDAP://CN=Users,") + wstrServerDN;
    ADSVALUE cnValue;
    ADSVALUE classValue;
    ADSVALUE sAMValue;
    ADSVALUE uPNValue;
	ADSVALUE controlValue;
    ADS_ATTR_INFO attrInfo[] = {
        { L"objectClass", ADS_ATTR_UPDATE, ADSTYPE_CASE_IGNORE_STRING, &classValue, 1 },
        { L"cn", ADS_ATTR_UPDATE, ADSTYPE_CASE_IGNORE_STRING, &cnValue, 1 },
        { L"sAMAccountName", ADS_ATTR_UPDATE, ADSTYPE_CASE_IGNORE_STRING, &sAMValue, 1 },
        { L"userPrincipalName", ADS_ATTR_UPDATE, ADSTYPE_CASE_IGNORE_STRING, &uPNValue, 1 },
		{L"userAccountControl", ADS_ATTR_UPDATE, ADSTYPE_INTEGER,&controlValue, 1},
    };
    DWORD dwAttrs = sizeof (attrInfo) / sizeof (ADS_ATTR_INFO);

    classValue.dwType = ADSTYPE_CASE_IGNORE_STRING;
    classValue.CaseIgnoreString = L"user";

	//int UF_ACCOUNTDISABLE = 0x0002;
	int UF_PASSWD_NOTREQD = 0x0020;
	//int UF_PASSWD_CANT_CHANGE = 0x0040;
	int UF_NORMAL_ACCOUNT = 0x0200;
	int UF_DONT_EXPIRE_PASSWD = 0x10000;
	//int UF_PASSWORD_EXPIRED = 0x800000;

	controlValue.dwType = ADSTYPE_INTEGER;
	controlValue.Integer=UF_NORMAL_ACCOUNT | UF_PASSWD_NOTREQD |UF_DONT_EXPIRE_PASSWD;

    cnValue.dwType = ADSTYPE_CASE_IGNORE_STRING;
    cnValue.CaseIgnoreString = (LPWSTR)lpwstrNewUser;

    sAMValue.dwType = ADSTYPE_CASE_IGNORE_STRING;
    sAMValue.CaseIgnoreString = (LPWSTR)lpwstrNewUser;

    wstring wstrMail;
    size_t nPosMail = strLogonMail.find(_T("@"), 0);

    wstrMail = strLogonMail.substr(nPosMail);
    wstrMail = lpwstrNewUser + wstrMail;

    LPWSTR upnval = (LPWSTR)wstrMail.c_str();

    uPNValue.dwType = ADSTYPE_CASE_IGNORE_STRING;
    uPNValue.CaseIgnoreString = upnval;

    Zimbra::Util::ScopedInterface<IDirectoryObject> pDirContainer;
    Zimbra::Util::ScopedInterface<IDispatch> pDisp;
    Zimbra::Util::ScopedInterface<IADsUser> pIADNewUser;
    wstring wstrLoggedUserName(LogonUserDN);
    size_t snPos = 0;
    size_t enPos = 0;

    if ((snPos = wstrLoggedUserName.find(L"CN=")) != wstring::npos)
    {
        if ((enPos = wstrLoggedUserName.find(L",", snPos)) != wstring::npos)
            wstrLoggedUserName = wstrLoggedUserName.substr(snPos + 3, (enPos - (snPos + 3)));
    }
    // get dir container
    if (FAILED(hr = ADsOpenObject(wstrADSPath.c_str(), wstrLoggedUserName.c_str(),
            lpwstrLogonUsrPwd, ADS_SECURE_AUTHENTICATION, IID_IDirectoryObject,
            (void **)pDirContainer.getptr())))
        throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): ADsOpenObject Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);

    wstring wstrUserCN = L"CN=";

    wstrUserCN += lpwstrNewUser;
    dloge("CreateDSObject: %S",wstrUserCN.c_str());
    if (FAILED(hr = pDirContainer->CreateDSObject((LPWSTR)wstrUserCN.c_str(), attrInfo, dwAttrs,
            pDisp.getptr())))
        throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): CreateDSObject Failed.",
            ERR_CREATE_EXCHMBX,__LINE__, __FILE__);
    if (FAILED(hr = pDisp->QueryInterface(IID_IADsUser, (void **)pIADNewUser.getptr())))
        throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): QueryInterface Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);

    CComVariant varProp;
    varProp.Clear();

    // set samAccount
    varProp = lpwstrNewUser;
    if (FAILED(hr = pIADNewUser->Put(CComBSTR(L"sAMAccountName"), varProp)))
        throw ExchangeAdminException(hr,L"CreateExchangeMailBox(): Put(sAMAccountName) Failed.",
		ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
    if(FAILED(hr = pIADNewUser->SetInfo()))
        throw ExchangeAdminException(hr,L"CreateExchangeMailBox(): Put(sAMAccountName) Failed.", 
		ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
    // set userAccountControl
    varProp.Clear();
    hr = pIADNewUser->Get(CComBSTR(L"userAccountControl"), &varProp);
    varProp = varProp.lVal & ~(ADS_UF_ACCOUNTDISABLE);
    if (FAILED(hr = pIADNewUser->Put(CComBSTR(L"userAccountControl"), varProp)))
        throw ExchangeAdminException(hr,L"CreateExchangeMailBox(): Put(userAccountControl) Failed.",
		ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
    if(FAILED(hr = pIADNewUser->SetInfo()))
        ThrowSetInfoException(hr, L"SetInfo - Put(userAccountControl) Failed.");
    // set Account enabled
    if (FAILED(hr = pIADNewUser->put_AccountDisabled(VARIANT_FALSE)))
    {
        throw
            ExchangeAdminException(hr, L"CreateExchangeMailBox(): put_AccountDisabled Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
    }
    if(FAILED(hr = pIADNewUser->SetInfo()))
        ThrowSetInfoException(hr, L"SetInfo - put_AccountDisabled Failed.");
    // set password
    if (FAILED(hr = pIADNewUser->SetPassword(CComBSTR(lpwstrNewUserPwd))))
    {
        throw
            ExchangeAdminException(hr, L"CreateExchangeMailBox(): SetPassword Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
    }
    if(FAILED(hr = pIADNewUser->SetInfo()))
        ThrowSetInfoException(hr, L"SetInfo - SetPassword Failed.");
    // user account password does not expire
    varProp.Clear();

    VARIANT var;

    VariantInit(&var);
    if (!FAILED(hr = pIADNewUser->Get(CComBSTR(L"userAccountControl"), &var)))
    {
        V_I4(&var) |= ADS_UF_DONT_EXPIRE_PASSWD;
        if (FAILED(hr = pIADNewUser->Put(CComBSTR(L"userAccountControl"), var)))
        {
            throw ExchangeAdminException(hr,L"CreateExchangeMailBox(): Put(userAccountControl) Failed.", 
				ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
        }
    }
    if(FAILED(hr = pIADNewUser->SetInfo()))
        ThrowSetInfoException(hr, L"SetInfo - userAccountControl Failed.");
    varProp.Clear();
    // set the homeMDB;
    if (!strLogonHomeMDB.empty())
    {
        varProp = strLogonHomeMDB.c_str();
        if (FAILED(hr = pIADNewUser->Put(CComBSTR("homeMDB"), varProp)))
            throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): Put(homeMDB) Failed.",
                ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
    }
    if(FAILED(hr = pIADNewUser->SetInfo()))
        ThrowSetInfoException(hr, L"SetInfo - Put(homeMDB) Failed.");

	varProp.Clear();
    if (!strLogonHomeMTA.empty())
    {
        varProp = strLogonHomeMTA.c_str();
        if (FAILED(hr = pIADNewUser->Put(CComBSTR("homeMTA"), varProp)))
            throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): Put(homeMTA) Failed.",
                ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
    }
    if(FAILED(hr = pIADNewUser->SetInfo()))
        ThrowSetInfoException(hr, L"SetInfo - Put(homeMTA) Failed.");

	varProp.Clear();
	if (!msExchHomeSvrName.empty())
    {
        varProp = msExchHomeSvrName.c_str();
        if (FAILED(hr = pIADNewUser->Put(CComBSTR("msExchHomeServerName"), varProp)))
            throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): Put(msExchHomeServerName) Failed.",
                ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
    }
    if(FAILED(hr = pIADNewUser->SetInfo()))
        ThrowSetInfoException(hr, L"SetInfo - Put(msExchHomeServerName) Failed.");
	varProp.Clear();

	varProp.Clear();
	wstring newUsrLegacyName=legacyName;
	size_t nwpos=newUsrLegacyName.rfind(L"cn=");
	if(nwpos !=wstring::npos)
	{
		newUsrLegacyName = newUsrLegacyName.substr(0,nwpos);
		newUsrLegacyName += L"cn=";
		newUsrLegacyName += lpwstrNewUser;
	}
	if (!newUsrLegacyName.empty())
    {
        varProp = newUsrLegacyName.c_str();
        if (FAILED(hr = pIADNewUser->Put(CComBSTR("legacyExchangeDN"), varProp)))
            throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): Put(legacyExchangeDN) Failed.",
                ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
    }
    if(FAILED(hr = pIADNewUser->SetInfo()))
        ThrowSetInfoException(hr, L"SetInfo - Put(legacyExchangeDN) Failed.");

    // set nickname
    varProp.Clear();
    varProp = lpwstrNewUser;
    if (FAILED(hr = pIADNewUser->Put(CComBSTR("mailNickname"), varProp)))
        throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): Put(mailNickname) Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
    if(FAILED(hr = pIADNewUser->SetInfo()))
        ThrowSetInfoException(hr, L"SetInfo - Put(mailNickname) Failed.");

    // set the displayName
    varProp.Clear();
    varProp = lpwstrNewUser;
    if (FAILED(hr = pIADNewUser->Put(CComBSTR("displayName"), varProp)))
        throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): Put(displayName) Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
    if(FAILED(hr = pIADNewUser->SetInfo()))
        ThrowSetInfoException(hr, L"SetInfo - Put(displayName) Failed.");
    // set the mail atrribute
    varProp.Clear();
    varProp = wstrMail.c_str();
    if (FAILED(hr = pIADNewUser->Put(CComBSTR("mail"), varProp)))
        throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): Put(mail) Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
    if(FAILED(hr = pIADNewUser->SetInfo()))
        ThrowSetInfoException(hr, L"SetInfo - Put(mail) Failed.");
    // set email
    if (FAILED(hr = pIADNewUser->put_EmailAddress(CComBSTR(wstrMail.c_str()))))
    {
        throw
            ExchangeAdminException(hr, L"CreateExchangeMailBox(): put_EmailAddress Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
    }
    if(FAILED(hr = pIADNewUser->SetInfo()))
        ThrowSetInfoException(hr, L"SetInfo - put_EmailAddress Failed.");

	varProp.Clear();
	wstrMail=L"SMTP:"+wstrMail;
	varProp = wstrMail.c_str();
	if (FAILED(hr = pIADNewUser->Put(CComBSTR("proxyAddresses"),varProp)))
	{
        throw
            ExchangeAdminException(hr, L"CreateExchangeMailBox(): proxyAddressess Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
    }
    if(FAILED(hr = pIADNewUser->SetInfo()))
        ThrowSetInfoException(hr, L"SetInfo - proxyAddressess Failed.");

    // add to Domain Admins group
    BSTR bstrADSPath;

    if (FAILED(hr = pIADNewUser->get_ADsPath(&bstrADSPath)))
        throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): get_ADsPath Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);

    wstring wstrGroup = _T("LDAP://CN=Domain Admins,CN=Users,") + wstrServerDN;
    Zimbra::Util::ScopedInterface<IADsGroup> pGroup;

    if (FAILED(hr = ADsGetObject(wstrGroup.c_str(), IID_IADsGroup, (void **)pGroup.getptr())))
        throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): ADsGetObject Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
    if (FAILED(hr = ADsOpenObject(wstrGroup.c_str(), wstrLoggedUserName.c_str(),
            lpwstrLogonUsrPwd, ADS_SECURE_AUTHENTICATION, IID_IADsGroup,
            (void **)pGroup.getptr())))
        throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): ADsOpenObject Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
    if (SUCCEEDED(hr = pGroup->Add(bstrADSPath)))
    {
        if (FAILED(hr = pGroup->SetInfo()))
            throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): pGroup SetInfo Failed.",
                ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
    }
    else
    {
        throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): pGroup Add Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
    }

	GUID guid;
    if(FAILED(hr = CoCreateGuid(&guid)))
    {
        throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): CoCreateGuid Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
    }

    BYTE *str;
    hr = UuidToString((UUID *)&guid, (RPC_WSTR *)&str);
    if (hr != RPC_S_OK)
    {
        throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): UuidToString Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
    }

	varProp.Clear();
	//BYTE bytArr[]="3429bb3084703348b8023e94fabf16ea";
	PutBinaryIntoVariant(&varProp,str,16);
	RpcStringFree((RPC_WSTR *)&str);
	if (FAILED(hr = pIADNewUser->Put(CComBSTR("msExchMailboxGuid"), varProp)))
	{
		throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): Put msExchMailboxGuid Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
	}
	if(FAILED(hr = pIADNewUser->SetInfo()))
            ThrowSetInfoException(hr, L"SetInfo - msExchMailboxGuid Failed.");

	if (FAILED(hr = ADsOpenObject(strContainer.c_str(), NULL, NULL, ADS_SECURE_AUTHENTICATION,
        IID_IDirectoryObject, (void **)pIAdUser.getptr())))
	{
		throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): ADsOpenObject2 Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
	}	
	if (FAILED(hr = pIAdUser->QueryInterface(IID_IADs, (void**) pIAds.getptr())))
	{
		throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): pIAdUser->QueryInterface Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
	}

	varProp.Clear();
	if( FAILED(hr= pIAds->Get(CComBSTR("msExchMailboxSecurityDescriptor"),&varProp)))
	{
        throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): Get msExchMailboxSecurityDescriptor Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
    }
	if (FAILED(hr = pIADNewUser->Put(CComBSTR("msExchMailboxSecurityDescriptor"), varProp)))
	{
		throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): Put msExchMailboxSecurityDescriptor Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
	}
	if(FAILED(hr = pIADNewUser->SetInfo()))
            ThrowSetInfoException(hr, L"SetInfo - msExchMailboxSecurityDescriptor Failed.");

	varProp.Clear();
	if( FAILED(hr=pIAds->Get(CComBSTR("msExchPoliciesIncluded"),&varProp)))
	{
		throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): Get msExchPoliciesIncluded Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);        
    }
	if (FAILED(hr = pIADNewUser->Put(CComBSTR("msExchPoliciesIncluded"), varProp)))
	{
		throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): Put msExchPoliciesIncluded Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);     
	}
	if(FAILED(hr = pIADNewUser->SetInfo()))
            ThrowSetInfoException(hr, L"SetInfo - msExchPoliciesIncluded Failed.");

	varProp.Clear();
	if( FAILED(hr= pIAds->Get(CComBSTR("msExchUserAccountControl"),&varProp)))
	{
		throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): Get msExchUserAccountControl Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);        
    }
	if (FAILED(hr = pIADNewUser->Put(CComBSTR("msExchUserAccountControl"), varProp)))
	{
		throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): Put msExchUserAccountControl Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);    
	}
	if(FAILED(hr = pIADNewUser->SetInfo()))
            ThrowSetInfoException(hr, L"SetInfo - msExchUserAccountControl Failed.");

	varProp.Clear();
	if(FAILED(hr = pIAds->GetEx(CComBSTR("showInAddressBook"), &varProp )))
	{
		throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): Get showInAddressBook Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);		
	}
	if(FAILED(hr = pIADNewUser->Put(CComBSTR("showInAddressBook"), varProp)))
	{
		throw ExchangeAdminException(hr, L"CreateExchangeMailBox(): Put showInAddressBook Failed.",
            ERR_CREATE_EXCHMBX, __LINE__, __FILE__);
	}
	if(FAILED(hr = pIADNewUser->SetInfo()))
            ThrowSetInfoException(hr, L"SetInfo - showInAddressBook Failed.");
    return hr;
}