// 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;
}
调用COM接口建立一个AppointmentItem并在Body中添加链接
最新推荐文章于 2021-10-27 15:53:59 发布