Мне надо узнать список е-мейл адресов всех узверей из адресной книги Оут-Глюка, ето можно зделать через MAPI, но как именно немогу разобраться, чото связанное с: MAPILogonEx() MAPIFindNext() Вроде в этом районе надо глядеть, если моя идея осуществима то как? А то разбирать .WAB файлы стало неблагодарное дело, после того как они стали все в юникоде или в base64 писать... Если ктось еще знает методы этого чорного дела, то поделитесь.. Думаю тема будет интересна многим. Заранне респект всем!
... и без хлеба Юникод не такая уж сложная вещь. Все адреса там видны, просто все буквы прорежены байтами 0. Элементарная программа.
Если аутглюка, то смотреть в сторону MAPILogonEx() IMAPISession::OpenAddressBook() IAddrBook::OpenEntry() IABContainer::GetHierarchyTable() IABContainer::OpenEntry() IABContainer::GetContentsTable() IMailUser::GetProps (PR_SMTP_ADDRESS) Вообще, для начинающего юникод попроще будет. (Я имею ввиду начинающего работать с МАПЯми) Сорри, не IMAPIContainer, а IABContainer
Если для аутглюка экспресс - тот пользуется виндовс адресной книгой (wab), врать не буду, точно не помню, но кажись надо так: WABOpen() IAddrBook::GetPAB() IAddrBook::OpenEntry() IABContainer::GetContentsTable() IABContainer::OpenEntry() IMailUser::GetProps()
Си я немного знаю, так что мне несоставит труда это все в asm перевести, если сможешь хоть на сях то буду очень признателен...
Сорри за задержку - вот вариант для Outlook'а (не экспресс!) Код (Text): #include <windows.h> #include <mapix.h> #include <mapiutil.h> #include <stdio.h> void main () { MAPIInitialize (NULL); IMAPISession* pSession = NULL; long err = MAPILogonEx (0, "", NULL, MAPI_USE_DEFAULT, &pSession); if (err) // Проверка остальных ошибок - в этом же духе { printf ("Error!!!"); return; } IAddrBook* pBook = NULL; pSession->OpenAddressBook (0, NULL, AB_NO_DIALOG, &pBook); ULONG cbEntryId = 0; ENTRYID* pbEntryId = NULL; pBook->GetPAB (&cbEntryId, &pbEntryId); ULONG ObjType; IMAPIContainer* pPabContainer = NULL; pBook->OpenEntry (cbEntryId,pbEntryId, NULL, 0, &ObjType, (IUnknown **)&pPabContainer); IMAPITable* pTable = NULL; pPabContainer->GetContentsTable (0, &pTable); SizedSPropTagArray (1, spta) = {1, {PR_EMAIL_ADDRESS}}; SRowSet* pRows = NULL; HrQueryAllRows (pTable, (SPropTagArray*)&spta, NULL, NULL, 0,&pRows); for (UINT i = 0; i < pRows->cRows; i++) printf ("%s\n", pRows->aRow[i].lpProps->Value.lpszA); }
Asm вариант читалки email-лов из WAB-а. Все адреса выводится по очереди в мессбокс. _911120100__WAB.rar