powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Доступ к диалоговому окну Адресной Книги + выбор нестандартных полей: телефон, факс
11 сообщений из 11, страница 1 из 1
Доступ к диалоговому окну Адресной Книги + выбор нестандартных полей: телефон, факс
    #37589448
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Те. задача:
1) Вывести адресную книгу Win (по умолчанию, напр. Outlook Express если XP)
2) Пользователь выбирает адресатов и нажимает OK
3) Должны быть выбраны не e-mail адреса а такие поля как:
Служебные ->телефон
Служебные ->факс
Домашние ->телефон
Домашние ->факс

У себя на компе я нарыл свою же прогу 10-летней давности, кот. делает выборку DisplayName-Email (прилагается, не с пустыми же руками вопросы задавать).
Там есть кнопка
Адресаты,
кот. делает что я хочу + добавляет DisplayName-Email в ListView.
Мне надо чтоб вместо e-mail добавлялся номер факса (как это делает Microsoft Fax если кто знаком).

Рабочий код:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
Private Sub AdressSelect()
Dim i As Integer
Dim LItem As ListItem
'Выбор адресатов
On Error GoTo AdressError
    MAPISession1.SignOn
    MAPIMessages1.SessionID = MAPISession1.SessionID
    MAPIMessages1.Compose
    'Восстановление адресатов из списка
    For i = 1 To ListView1.ListItems.Count
        MAPIMessages1.RecipIndex = i - 1
        MAPIMessages1.RecipAddress = ListView1.ListItems(i).SubItems(2)
        MAPIMessages1.RecipDisplayName = ListView1.ListItems(i).SubItems(1)
    Next i
    'Показ диалогового окна адресатов
    MAPIMessages1.Show False
    ListView1.ListItems.Clear
    For i = 0 To MAPIMessages1.RecipCount - 1
        MAPIMessages1.RecipIndex = i
        Set LItem = ListView1.ListItems.Add
        LItem.SubItems(1) = MAPIMessages1.RecipDisplayName
        LItem.SubItems(2) = MAPIMessages1.RecipAddress
    Next i
    MAPISession1.SignOff
    Exit Sub
AdressError:
    MAPISession1.SignOff
    If Err.Number = 32001 Then Exit Sub
    MsgBox "Неизвестная ошибка!"
End Sub



Я даже готов использовать MAPISession/MAPIMessages (правда если только через CreateObject, ненавижу раннее связывание).
Но проблема в том что контролы предоставляют
Код: vbnet
1.
2.
MAPIMessages1.RecipDisplayName
MAPIMessages1.RecipAddress


но похоже недоделаны на тему
Код: vbnet
1.
2.
MAPIMessages1.FaxNumber
MAPIMessages1.PhoneNumber


(этого нет).

Я нашел некоторые намеки на требуемое:

http://tech.groups.yahoo.com/group/outlook-dev/message/18818

Код: vbnet
1.
2.
3.
Const CdoPR_TRANSMITABLE_DISPLAY_NAME_A = &H3A20001E
Const CdoPR_BUSINESS_TELEPHONE_NUMBER = &H3A08001E
Const CdoPR_PRIMARY_FAX_NUMBER = &H3A23001E



Но пока не понимаю как увязать.
Может кто чуть подтолкнет?
...
Рейтинг: 0 / 0
Доступ к диалоговому окну Адресной Книги + выбор нестандартных полей: телефон, факс
    #37590616
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По идее вот:

How to use CDO (1.x) to read MAPI Address Book properties

Но этот метод требует установки CDO, причем не cdosys.dll которая присутствует во всех виндах, а какой-то левой, которая еще и будет конфликтовать с OS в зависимости от того какой Outlook 2010 или 2007 установлен. (судя по беглому чтению документаций).
У меня например на компе с XP + Outlook Express
объект MAPI.Session отсутствует, а устанавливать инсталлером какие-то левые CDO (на произвольную систему юзера!!!) я бы не рискнул.
Может есть какой другой метод (через API)?
Кнопка "Адресная книга" в "Мастере подготовки факсов" из Microsoft Fax без проблем делает что я хочу, т.е. извлекает факсы и телефоны из выбранных адресатов, и очевидно без всяких CDO (1.x), которых на произвольном компе нет.
Как? Куда копать?
...
Рейтинг: 0 / 0
Доступ к диалоговому окну Адресной Книги + выбор нестандартных полей: телефон, факс
    #37591160
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что, такая нерешаемая проблема и никто не работал с MAPI-адресной книгой?
Ну, допустим, я готов подкинуть это CDO в пакет с программой и зарегить через regsvr32.
Но это должно работать на всех версиях Win (от XP до 7) с любыми адресными книгами (MAPI default)
и плевать какие офисы там установлены и не вступать в конфликты.
Я скачал с Microsoft какой-то ExchangeCDO.exe
оно не устанавливается, пишет
Collaboration Data Objects 1.2.1 cannot be installed unless Microsoft Office 2007 is also installed.
Это на XP 32 bit.
У меня Office 2000, Outlook вообще не установлен. Ну, м.б. какие-то обновления совместимости с 2007.
Если я правильно понимаю, то мне нужен некий файл cdo.dll, кот. я должен зарегистрировать и пользовать согласно коду в предыдущем топике с использованием MAPI.Session .(а не глючный msi-инсталлер)
Но конфликты с новыми оффисами мне тоже не нужны.
Где взять?
Или с этим лучше не связываться?
Тогда как?
...
Рейтинг: 0 / 0
Доступ к диалоговому окну Адресной Книги + выбор нестандартных полей: телефон, факс
    #37591187
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
совместно с аутлуком 2007 не ставить.
с 2010 вообще не работает и не поддерживается (сейчас через System.Web.dll сборку, там есть Mail)

CDO закончилось на 2003 сервере x86 (32bit)
...
Рейтинг: 0 / 0
Доступ к диалоговому окну Адресной Книги + выбор нестандартных полей: телефон, факс
    #37591190
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Доступ к диалоговому окну Адресной Книги + выбор нестандартных полей: телефон, факс
    #37591205
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,

Я уже догадался что это вообще не тот путь (т.е. он того не стоит).
А как тогда в адресную книгу к хитрым полям добраться?
Я про MAPI api читал, поиском никаких намеков не нашел.
Может хоть какое направление мысли дадите?
(Большинство факсовых программ как-то умеют читать дефолтную книгу без всяких CDO)
...
Рейтинг: 0 / 0
Доступ к диалоговому окну Адресной Книги + выбор нестандартных полей: телефон, факс
    #37591215
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
микрософт советует использовать объектную модель outlook той версии, которая стоит.
...
Рейтинг: 0 / 0
Доступ к диалоговому окну Адресной Книги + выбор нестандартных полей: телефон, факс
    #37591282
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneмикрософт советует использовать объектную модель outlook той версии, которая стоит.
Гы.
Речь то не об Outlook,
а о почтовом клиенте по умолчанию,
точнее
про адресную книгу по умолчанию .

А она может быть: Outlook, Outlook Express (он же Почта Windows), Bat, Windows Live (наверное).
И оно доступно через MAPI.

Например прога которую я приложил (там конечно VB-specific контролы используются) работала и с OutlookExpress и с bat.

Т.е. это Application-independent подход и не завязан на объектную модель конкретного приложения или его версии.

Или MAPI уже тоже закончилось, не современно и не актуально?

Я уже почти в бешенстве, задача представлялась ультра-легкой.
...
Рейтинг: 0 / 0
Доступ к диалоговому окну Адресной Книги + выбор нестандартных полей: телефон, факс
    #37592484
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делается это как-то так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
	hr = MAPILogonEx (NULL, szProfileName, NULL, MAPI_EXTENDED| MAPI_NEW_SESSION| 
	  MAPI_LOGON_UI| MAPI_EXPLICIT_PROFILE,&m_pSession);
	if (FAILED (hr)) 
	{
		return E_FAIL;
	}

	SizedSPropTagArray ( 8, sptCols ) = { 8,
									PR_ENTRYID,PR_DISPLAY_NAME,PR_ACCOUNT,
									PR_OBJECT_TYPE,PR_OFFICE_LOCATION,PR_COMPANY_NAME, 
									PR_EMAIL_ADDRESS,PR_OFFICE_TELEPHONE_NUMBER};



	hr = m_pSession->OpenAddressBook(NULL,NULL,AB_NO_DIALOG,&m_pAddrBook);



Но при отсутствии примеров на VB вряд ли чего удастся.
Есть некий модуль Mapivb32 на Microsoft,
но даже код отправки письма, там приведенный по каким-то причинам не работает и завершается с ошибкой.
Ну т.е. нужен пример (если это в принципе возможно), а примера нет.

Короче пока решил пожалеть время и забить.
...
Рейтинг: 0 / 0
Доступ к диалоговому окну Адресной Книги + выбор нестандартных полей: телефон, факс
    #37592501
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но при отсутствии примеров на VB вряд ли чего удастся.Их и не может быть, это пример для библиотеки MFC MAPI.
...
Рейтинг: 0 / 0
Доступ к диалоговому окну Адресной Книги + выбор нестандартных полей: телефон, факс
    #37592567
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyИх и не может быть, это пример для библиотеки MFC MAPI.
Т.е. через VB вообще нет способа туда (в поля адресной книги) залезть?
Должен же быть какой-то общевиндовый метод.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Доступ к диалоговому окну Адресной Книги + выбор нестандартных полей: телефон, факс
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]