com 名字对象(3)使用IMoniker
2011-08-01 21:16 Clingingboy 阅读(1959) 评论(0) 编辑 收藏 举报
一.名字对象比较
Hash和IsEqual方法
IMoniker* moniker2=NULL;
CreateFileMoniker(OLESTR("F:\\test.xlsx"),&moniker2);
DWORD dw;
moniker2->Hash(&dw);
IMoniker* moniker3=NULL;
CreateFileMoniker(OLESTR("F:\\test2.xlsx"),&moniker3);
DWORD dw2;
moniker3->Hash(&dw2);
HRESULT hr= moniker2->IsEqual(moniker3);
IsRunning说明对象是否在运行,GetTimeOfLastChange获取对象最后一次修改时间
IBindCtx* bindCtx=NULL;
CreateBindCtx(0,&bindCtx);
FILETIME ft;
moniker3->GetTimeOfLastChange(bindCtx,NULL,&ft);
hr=moniker3->IsRunning(bindCtx,NULL,NULL);
二.管理复合名字对象
1.Inverse返回名字对象的逆名字对象
IMoniker* moniker2=NULL;
CreateFileMoniker(OLESTR("F:\\test.xlsx"),&moniker2);
IMoniker* moniker3=NULL;
CreateItemMoniker(OLESTR("!"),OLESTR("Sheet1"),&moniker3);
IMoniker* moniker4=NULL;
CreateGenericComposite(moniker2,moniker3,&moniker4);
LPOLESTR str;
IBindCtx* bindCtx=NULL;
CreateBindCtx(0,&bindCtx);
moniker4->GetDisplayName(bindCtx,NULL,&str);
IMoniker* moniker5=NULL;
moniker4->Inverse(&moniker5);
LPOLESTR str2;
moniker5->GetDisplayName(bindCtx,NULL,&str2);
原文件名字对象:F:\test.xlsx!Sheet1
逆名字对象:\..\..
2.IsSystemMoniker返回名字对象的类型
DWORD monikerType;
IMoniker* moniker2=NULL;
CreateFileMoniker(OLESTR("F:\\test.xlsx"),&moniker2);
moniker2->IsSystemMoniker(&monikerType);
typedef
enum tagMKSYS
{ MKSYS_NONE = 0,
MKSYS_GENERICCOMPOSITE = 1,
MKSYS_FILEMONIKER = 2,
MKSYS_ANTIMONIKER = 3,
MKSYS_ITEMMONIKER = 4,
MKSYS_POINTERMONIKER = 5,
MKSYS_CLASSMONIKER = 7,
MKSYS_OBJREFMONIKER = 8,
MKSYS_SESSIONMONIKER = 9,
MKSYS_LUAMONIKER = 10
} MKSYS;
三.反-名字对象(CreateAntiMoniker)
在创建自定义名字对象时菜会用到这种名字对象.暂时不深究
四.三个处理FILETIME的函数
HRESULT CoFileTimeNow(
FILETIME * lpFileTime
);
BOOL CoDosDateTimeToFileTime(
WORD nDosDate,
WORD nDosTime,
FILETIME * lpFileTime
);
BOOL CoFileTimeToDosDateTime(
FILETIME * lpFileTime,
LPWORD lpDosDate,
LPWORD lpDosTime
);