// Outlook_AddLink.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <Windows.h> HRESULT AutoWrap(int autoType, VARIANT *pvResult, IDispatch *pDisp, LPOLESTR ptName, int cArgs...) { va_list marker; va_start(marker, cArgs); if(!pDisp) { //_exit(0); } DISPPARAMS dp = { NULL, NULL, 0, 0 }; DISPID dispidNamed = DISPID_PROPERTYPUT; DISPID dispID; HRESULT hr; char buf[200]; char szName[200]; WideCharToMultiByte(CP_ACP, 0, ptName, -1, szName, 256, NULL, NULL); hr = pDisp->GetIDsOfNames(IID_NULL, &ptName, 1, LOCALE_USER_DEFAULT, &dispID); if(FAILED(hr)) { sprintf(buf, "IDispatch::GetIDsOfNames(\"%s\") failed w/err 0x%08lx", szName, hr); printf("%s\n",buf); //_exit(0); return hr; } VARIANT *pArgs = new VARIANT[cArgs+1]; for(int i=0; i<cArgs; i++) { pArgs[i] = va_arg(marker, VARIANT); } dp.cArgs = cArgs; dp.rgvarg = pArgs; if(autoType & DISPATCH_PROPERTYPUT) { dp.cNamedArgs = 1; dp.rgdispidNamedArgs = &dispidNamed; } hr = pDisp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, autoType, &dp, pvResult, NULL, NULL); if(FAILED(hr)) { sprintf(buf, "IDispatch::Invoke(\"%s\"=%08lx) failed w/err 0x%08lx", szName, dispID, hr); printf("%s\n",buf); //_exit(0); return hr; } va_end(marker); delete [] pArgs; return hr; } int _tmain(int argc, _TCHAR* argv[]) { HRESULT hr; CLSID olCLSID; IDispatch *olApp; hr = OleInitialize(NULL); if(SUCCEEDED(hr)){ VARIANT m; m.vt = VT_ERROR; m.lVal = (long)DISP_E_PARAMNOTFOUND; CLSIDFromProgID(L"Outlook.Application",&olCLSID); hr = CoCreateInstance(olCLSID,NULL, CLSCTX_LOCAL_SERVER|CLSCTX_INPROC_SERVER,IID_IDispatch, (void **)&olApp); if(SUCCEEDED(hr)){ IDispatch * olAppointmentItem; VARIANT x,T; VariantInit(&x); T.vt = VT_INT; T.intVal = 1; hr = AutoWrap(DISPATCH_METHOD, &x,olApp,L"CreateItem",1,T); if(SUCCEEDED(hr)){ olAppointmentItem = x.pdispVal; IDispatch * olInspector; T.vt = VT_BOOL; T.boolVal = false; VariantInit(&x); hr = AutoWrap(DISPATCH_METHOD, &x,olAppointmentItem,L"Display", 1,T); VariantInit(&x); hr = AutoWrap(DISPATCH_METHOD, &x,olAppointmentItem, L"GetInspector",0); if(SUCCEEDED(hr)){ olInspector = x.pdispVal; IDispatch * wdDocument; hr = AutoWrap(DISPATCH_PROPERTYGET,&x,olInspector, L"WordEditor",0); if(SUCCEEDED(hr)){ wdDocument = x.pdispVal; IDispatch * wdHyperLinks; IDispatch * wdRange; VariantInit(&x); hr = AutoWrap(DISPATCH_PROPERTYGET, &x,wdDocument, L"HyperLinks",0); if(SUCCEEDED(hr)){ wdHyperLinks = x.pdispVal; hr = AutoWrap(DISPATCH_METHOD,&x,wdDocument ,L"Range",2,m,m); if(SUCCEEDED(hr)){ wdRange = x.pdispVal; VariantInit(&x); VARIANT A,D,Ar; A.vt = VT_BSTR; A.bstrVal = SysAllocString(L"http://www.google.com"); D.vt = VT_BSTR; Ar.vt = VT_DISPATCH; Ar.pdispVal = wdRange; D.bstrVal = SysAllocString(L"google"); hr = AutoWrap(DISPATCH_METHOD,&x,wdHyperLinks, L"Add",6,m,D,m,m,A,Ar); if(SUCCEEDED(hr)){ printf("Add HyperLink successfully!\n"); } } } } } } } } system("pause"); CoUninitialize(); return 0; }