社本@元ネオニート Blog

社本@元ネオニート (元々ワック) のいたずら書き (for Programmers)

AILight Banner
AILight Blog

プロフィール

社本@元ネオニート Blog
働いたら負けかなと思っていたのですが。。とうとう働き始めました。アメリカのシアトル・エリアにある企業向けのバックアップソフトを開発している会社です。日本人は私だけ。なんとか。。やっていけてるようです。

目次

Blog 利用状況

記事分類

過去の記事

タグ

Windows Contacts - Windows Vista

Windows Vistaではアドレス帳は、Windows AbressBook (WAB) に代わり(*)、
Windows Contacts というものが新しく作られています。
* : APIは残ってると思われます

このWindows Contactsを扱うサンプルは、まだどこにも見当たらないので、
試しに書いてみました。

---
#include <icontact.h&rg
#include <icontactproperties.h&rg

_COM_SMARTPTR_TYPEDEF(IContactManager, __uuidof(IContactManager));
_COM_SMARTPTR_TYPEDEF(IContactCollection, __uuidof(IContactCollection));
_COM_SMARTPTR_TYPEDEF(IContactProperties, __uuidof(IContactProperties));
_COM_SMARTPTR_TYPEDEF(IContact, __uuidof(IContact));
_COM_SMARTPTR_TYPEDEF(IContactPropertyCollection, __uuidof(IContactPropertyCollection));

 HRESULT TestContacts()
 {
  HRESULT hr = S_OK;

  WCHAR szAppName[] = L"TestContacts";
  WCHAR szAppVersion[] = L"1.0";
  IContactManagerPtr spContactManager = thisClass::GetContactManager(szAppName, szAppVersion);
  if (spContactManager == NULL)
  {
   return E_FAIL;
  }

  std::vector<IContactPtr&rt spContacts;
  hr = thisClass::EnumContacts(spContactManager, spContacts);
  if (FAILED(hr))
  {
   return hr;
  }

  for (int i = 0; i < (int)spContacts.size(); i++)
  {
   IContactPtr spContact = spContacts[i];
   if (spContact == NULL)
   {
    ATLASSERT(0);
    continue;
   }

   IContactPropertiesPtr spContactProperties = spContact;
   if (spContactProperties == NULL)
   {
    ATLASSERT(0);
    continue;
   }

   // 表示名
   WCHAR szFormattedName[MAX_PATH] = { 0 };
   hr = spContactProperties->GetString(
    CONTACTPROP_PUB_L1_NAMECOLLECTION CONTACTPROP_PUB_L2_NAME L"[1]" CONTACTPROP_PUB_L3_FORMATTEDNAME,
    CGD_DEFAULT, szFormattedName, ARRAYSIZE(szFormattedName), NULL);
   if (FAILED(hr))
   {
//    ATLASSERT(0);
   }

   // 誕生日
   FILETIME ftDateTime = { 0 };
   hr = spContactProperties->GetDate(
    CONTACTPROP_PUB_L1_DATECOLLECTION CONTACTPROP_PUB_L2_DATE L"[1]" CONTACTPROP_PUB_L3_VALUE,
    CGD_DEFAULT, &ftDateTime);
   if (FAILED(hr))
   {
//    ATLASSERT(0);
   }
  }
  return S_OK;
 }

 static IContactManagerPtr GetContactManager(LPCWSTR szAppName, LPCWSTR szAppVersion)
 {
  HRESULT hr = S_OK;
  IContactManagerPtr spContactManager;
  hr = spContactManager.CreateInstance(CLSID_ContactManager);
  if (FAILED(hr))
  {
   return NULL;
  }

  hr = spContactManager->Initialize(szAppName, szAppVersion);
  if (FAILED(hr))
  {
   return NULL;
  }

  return spContactManager;
 }
 static HRESULT EnumContacts(IContactManagerPtr spContactManager, std::vector<IContactPtr&rt& spContacts)
 {
  if (spContactManager == NULL)
  {
   return E_FAIL;
  }

  HRESULT hr = S_OK;

  spContacts.clear();

  IContactCollectionPtr spContactCollection;
  hr = spContactManager->GetContactCollection(&spContactCollection);
  if (FAILED(hr))
  {
   return hr;
  }

  while (S_FALSE != spContactCollection->Next())
  {
   IContactPtr spContact;
   hr = spContactCollection->GetCurrent(&spContact);
   if (FAILED(hr))
   {
    ATLASSERT(0);
    continue;
   }

   spContacts.push_back(spContact);
  }

  return S_OK;
 }
---

投稿日時 : 2006年12月5日 23:07


コメントを追加

タイトル
名前
URL
コメント