Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Доступ к адресной книге (контакты Windows) / 20 сообщений из 20, страница 1 из 1
06.01.2016, 01:08
    #39142568
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к адресной книге (контакты Windows)
Ну т.е. что надо:
в программе кнопка <Адресная книга> или <Кому>.
При нажатии открывается стандартный диалог "Выбор получателей".
Здесь варианты:
справа есть поля MailTo,CC,BCC
либо например только поле MailTo
либо правых полей вообще нет.
(скриншоты приложил чтоб было понятно)
При нажатии на кнопку <OK> возвращается
например набор email (с именами) или несколько наборов соответствующих MailTo,CC и BCC
или например набор номеров телефонов (или факсов) соответствующих выбранным контактам.

В виндах эта техника используется например
в Почта Windows (Outlook Express) для выбора MailTo,CC,BCC при создании мыла (верхний скрин)
в Windows Fax and Scan (Microsoft Fax) для выбора номеров факсов (средний скрин), там же для выбора e-mail адреса(предполагается единственный адрес) куда слать мыло с уведомлением о доставке(нижний скрин).

Начиная с Vista контакты хранятся в
C:\Users\<Имя_пользователя>\Contacts
В XP техника хранения немного иная, но диалоговые окна и принцип выбора такой же (можно еще выбрать "группу контактов").

И я вот думаю как в эту кухню влезть. Интересует именно вывод стандартного окна выбора контактов и возврат желаемого результата.

Что-то подобное (выводить эти окна) в VB6 умела делать MSMAPI.OCX (Microsoft MAPI Controls 6.0),
но применительно к .Net не вариант (да и в VB6 не стал бы ее "таскать" за прогой, когда-то очень давно игрался просто),
да и не уверен что она реализует все желаемое (возврат номеров телефонов к примеру).

Есть вот такие напр. ссылки

Programming Windows Contacts
Windows Address Book

Но там не классические API а "интерфейсы", и их программировать не из C++ это задница.
Причем не уверен что это то что надо, мне нужны не сами "контакты", а стандартные диалоги с возвратом результата.
...
Рейтинг: 0 / 0
06.01.2016, 05:54
    #39142588
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к адресной книге (контакты Windows)
Ну в принципе
авторЧто-то подобное (выводить эти окна) в VB6 умела делать MSMAPI.OCX (Microsoft MAPI Controls 6.0),

Можно и без OCX:
MAPIAddress function
MapiRecipDesc structure

Код: 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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
Imports System.Runtime.InteropServices

Module Module1
  <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)>
  Public Structure MapiRecipDesc
    Dim ulReserved As UInteger
    Dim ulRecipClass As UInteger
    Dim lpszName As String
    Dim lpszAddress As String
    Dim ulEIDSize As UInteger
    Dim lpEntryID As IntPtr
  End Structure

  Public Declare Function MAPIAddress Lib "Mapi32.dll" _
   (ByVal lhSession As IntPtr, _
    ByVal ulUIParam As IntPtr, _
    ByVal lpszCaption As String, _
    ByVal nEditFields As UInteger, _
    ByVal lpszLabels As String, _
    ByVal nRecips As UInteger, _
    ByVal lpRecips As IntPtr, _
    ByVal flFlags As UInteger, _
    ByVal ulReserved As UInteger, _
    ByRef lpnNewRecips As UInteger, _
    ByRef lppNewRecips As IntPtr) As UInteger

  Public Declare Function MAPIFreeBuffer Lib "Mapi32.dll" (ByVal pv As IntPtr) As UInteger

End Module

Public Class Form1

  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim num As UInteger
    Dim NR As IntPtr
    Dim NewReceipts() As MapiRecipDesc = Nothing
    MAPIAddress(IntPtr.Zero, Me.Handle, "Select Recipients", 4, vbNullString, 0, IntPtr.Zero, 0, 0, num, NR)
    MsgBox(num)
    If num > 0 Then
      ReDim NewReceipts(0 To num - 1)
      For i As Integer = 0 To num - 1
        NewReceipts(i) = CType(Marshal.PtrToStructure(NR + i * Marshal.SizeOf(NewReceipts(0)), GetType(MapiRecipDesc)), MapiRecipDesc)
        'ulRecipClass =1 (To:) =2 (CC:) =3 (BCC:)
        MsgBox(NewReceipts(i).ulRecipClass.ToString & " : " & NewReceipts(i).lpszName.ToString & "<" & NewReceipts(i).lpszAddress.ToString & ">")
      Next
    End If
    MAPIFreeBuffer(NR)
  End Sub
End Class



Т.е. диалог выводится и набор To,CC,BCC возвращается.
Однако телефоны и факсы так не выкопаешь.

Плюс эта хрень зависит от наличия MAPI клиента на данном компе.
Поэтому не вариант, по большому счету наверно вообще не то, т.к. MAPI клиент будет использовать свою адресную книгу а не Windows Contacts в общем случае.
Должно быть что-то другое.
...
Рейтинг: 0 / 0
06.01.2016, 18:38
    #39142809
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к адресной книге (контакты Windows)
Копать видимо надо в
IAddrBook::Address Method
и (возможно) в какой-то аналогичный интерфейс из Windows Address Book (не нашел).
Везде "Don't use" (на это часто не стоит обращать внимания, штатный Windows Fax and Scan же как то вызывает эти диалоги в т.ч. и на 10-ке),
но задница в том что примеров кот. можно было бы воспроизвести да хоть бы и на C++ нуль.

Короче тяжелая эта задача, и не первый раз пытаюсь ее решить:
Доступ к диалоговому окну Адресной Книги + выбор нестандартных полей: телефон, факс
Дальше MAPI (что не есть решение) дело не двигается.

Наверно сдамся.
...
Рейтинг: 0 / 0
06.01.2016, 19:57
    #39142832
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к адресной книге (контакты Windows)
Дмитрий77и (возможно) в какой-то аналогичный интерфейс из Windows Address Book (не нашел).
Сорри, имел ввиду:
и (возможно) в какой-то аналогичный интерфейс из Windows Contacts (не нашел).
...
Рейтинг: 0 / 0
07.01.2016, 08:05
    #39142941
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к адресной книге (контакты Windows)
Дмитрий77Копать видимо надо в
IAddrBook::Address Method
Это то что надо.
Сделал на C++ (хотя с телефонами не знаю как вывести).
18649060
На .Net "интерфейсы" никак не переложить?
Один раз делал на VB6 с миксерами громкости звука но это нечто очень громоздское и ужасное.
...
Рейтинг: 0 / 0
07.01.2016, 16:04
    #39143053
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к адресной книге (контакты Windows)
Дмитрий77,

Продолжайте, пожалуйста. Мне в феврале нечто подобное надо будет сделать
...
Рейтинг: 0 / 0
07.01.2016, 16:12
    #39143055
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к адресной книге (контакты Windows)
Cat2Дмитрий77,

Продолжайте, пожалуйста. Мне в феврале нечто подобное надо будет сделать
Вы отдыхаете, а человек работает в поте лица. Нечестно :)
...
Рейтинг: 0 / 0
07.01.2016, 18:42
    #39143083
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к адресной книге (контакты Windows)
Дмитрий77На .Net "интерфейсы" никак не переложить?
можно переложить.

IWABObject - это обычный COM интерфейс

PS "Интерфейсы" - это тоже API
...
Рейтинг: 0 / 0
07.01.2016, 20:16
    #39143110
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к адресной книге (контакты Windows)
Cat2Продолжайте, пожалуйста.
Да пожалуйста.
Дмитрий77Сделал на C++ (хотя с телефонами не знаю как вывести).
Ну, на C уже сделал и с телефонами и факсами (с адресами, сайтами, женами и детьми - по желанию по тому же принципу - любые поля):
Т.е. принципиально задача решена.
18650324
ИзопропилДмитрий77На .Net "интерфейсы" никак не переложить?
можно переложить.

IWABObject - это обычный COM интерфейс

PS "Интерфейсы" - это тоже API
API то API но одно дело "классические" API, которые задекларировать относительно просто,
а другое дело вся эта IХрень.
Это как однажды пытались(полгода назад вроде, местами успешно) ручками прописывать весь интерфейс с GUID-ами и прочей хренью?
Но это ж тихо вешаться с непредсказуемым результатом.
В данном случае мне кажется проще оформить из кода что написал на C dll со своими API
и возвращать например массив структур Recipient {Имя;E-mail;To/CC/BCC;Телефон;Факс;...(?)} и количество элементов в этом массиве. Через Marshal.PtrToStructure парсить со сдвигом типа как сделал через mapi во втором посте.


Вопрос Юникода еще остается открытым.

Cat2Мне в феврале нечто подобное надо будет сделать
Не хочешь поучавствовать раз тоже интерес есть? Принципиально то вопрос решен но вот рутины еще хватит.
1) М.б. интерфейсы умеешь делать? как Изопропил говорит. Я наверно пасс.
2) Ну или dll накидать. Я думаю справлюсь но буду спотыкаться на Юникоде, на структурах и на типах C-шных строк. Каша еще та будет.
...
Рейтинг: 0 / 0
07.01.2016, 20:49
    #39143119
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к адресной книге (контакты Windows)
Дмитрий77Это как однажды пытались(полгода назад вроде, местами успешно) ручками прописывать весь интерфейс с GUID-ами и прочей хренью?
Но это ж тихо вешаться с непредсказуемым результатом.
tlb импортировать религия не позволила?
...
Рейтинг: 0 / 0
07.01.2016, 21:10
    #39143125
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к адресной книге (контакты Windows)
Дмитрий77Не хочешь поучавствовать раз тоже интерес есть? Принципиально то вопрос решен но вот рутины еще хватит.
В общем-то для моей задачи можно просто Outlook вызывать. Корпоративный стандарт. У кого другой почтовик - тот сам себе злобный Буратино
...
Рейтинг: 0 / 0
07.01.2016, 21:21
    #39143131
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к адресной книге (контакты Windows)
Cat2,

Дмитрий77 пилит софтину "антикорпроативную" со всеми вытекающими.
чтоб работала от XP до 10, дизайн окошек чтоб соответствовал версии винды,
чтоб все устаревшие API поддерживались и т д.

PS интересно, как с Lotus Domino его софтина взаимодействовать будет?
...
Рейтинг: 0 / 0
07.01.2016, 21:51
    #39143140
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к адресной книге (контакты Windows)
Изопропилtlb импортировать религия не позволила?
А ты уверен что есть tlb/ocx для wab32.dll?
Как называется?
Я обычно это проверяю через VB6
Project -> Referencies
Если тупо выбрать wab32.dll, то он ругается.
И ничего похожего на правду в списке не вижу.

CatВ общем-то для моей задачи можно просто Outlook вызывать. Корпоративный стандарт. У кого другой почтовик - тот сам себе злобный Буратино
Я лично Outlook недолюбливаю и у меня на рабочем Win8.1 стоит Почта Windows(последняя версия Outlook Express которая поставлялась с Вистой, она идет со всеми OS в залоченном виде (папка C:\Program Files\Windows Mail) при желании можно разлочить). Но это как бы мое мнение по поводу почтового клиента и к вопросу что рассматриваем не относится.

У Outlook (Office) своя объектная модель, применимая только к нему.
Есть MAPI, и могу сказать точно, что если Outllok (Office) суть дефолтный MAPI клиент на данном компе (и опять же не уверен что современные Outllok-и 2013 и т.п. поддерживают MAPI), то мой код во втором посте вызовет его адресную книгу, а не "Контакты Windows". Т.е. MAPI это нечто более общее.

Что касается моего C++ кода, то его преимущество в том, что он будет работать и на скажем голой семерке-восьмерке где mail клиент вообще не установлен. Но папку "Контакты (Windows)" то никто не отменял. Вопрос конечно интересный, но в какие "контакты" будет лезть этот код, если MAPI клиент установлен, но он не Outlook Express (Почта Windows). Предполагаю что все-таки в Контакты Windows. Хотя не лишне проверить, установив тот же Outlook из офиса.
А может кстати проверит кто? Надо чтоб на компе был установлен Outlook (office) и чтоб он был "по умолчанию".
Далее запустить "Факсы и сканирование Windows". Создать новый факс и нажать на кнопку "Кому". Какие контакты вылезут? Outlook или Windows? Предполагаю что все-таки "Windows". В общем мне нужна та же модель реализации что в "Fax and Scan".

Проверить это все не лишне, потому как мои клиенты (в отличии от меня) как раз Office(Outlook) многие думаю используют.
...
Рейтинг: 0 / 0
07.01.2016, 22:24
    #39143154
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к адресной книге (контакты Windows)
Лично я собираюсь воспользоваться этим:

https://msdn.microsoft.com/ru-ru/library/office/ff184631.aspx

Что бы работало у всех можно в дистрибутив вставить Microsoft.Office.Interop.Outlook.dll

из C:\WINDOWS\assembly\GAC\Microsoft.Office.Interop.Outlook
...
Рейтинг: 0 / 0
07.01.2016, 22:31
    #39143158
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к адресной книге (контакты Windows)
Дмитрий77А может кстати проверит кто?
это уёбище из прошлого века знает только об Active Directory, контактах Windows и службе каталогов VerySign
где добавить дополнительный LDAP - не нашёл

Внешний вид - страшнее атомной войны. Не зря deprecated

PS пользователи "контактов windows" вообще существуют?
...
Рейтинг: 0 / 0
07.01.2016, 22:53
    #39143169
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к адресной книге (контакты Windows)
Изопропил,

ты про tlb для интерфейсов wab32 обмолвился?
просто так сказал или действительно есть?

>знает только об ... контактах Windows ...
Мне и нужны "Контакты Windows" - в примитиве сойдет, и лучше чем изобретать свою Адресную книгу.
MAPI не подходит именно потому что лезет не обязательно в них (а например в тот же Outlook Office), а на новой голой системе вообще никуда не лезет и выводит ошибку за отсутствием MAPI-клиента.
...
Рейтинг: 0 / 0
07.01.2016, 23:12
    #39143176
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к адресной книге (контакты Windows)
Дмитрий77,

действительно, у этого говна мамонта нет tlb (странно для такого нужного всем интерфейса)

что скажешь на https://technet.microsoft.com/ru-ru/ms629733 ?
XP - любой ценой поддержать хочешь?
...
Рейтинг: 0 / 0
08.01.2016, 00:14
    #39143191
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к адресной книге (контакты Windows)
Изопропилчто скажешь на https://technet.microsoft.com/ru-ru/ms629733 ?
скажу что невнимательно читаешь то о чем пишу выше
Дмитрий77Дмитрий77Копать видимо надо в
IAddrBook::Address Method
Это то что надо.
Сделал на C++ (хотя с телефонами не знаю как вывести).
18649060
Дмитрий77Ну, на C уже сделал и с телефонами и факсами (с адресами, сайтами, женами и детьми - по желанию по тому же принципу - любые поля):
Т.е. принципиально задача решена.
18650324

Собственно я и использовал Windows Address Book
-в точности ==ссылке что ты мне дал.

ИзопропилДмитрий77Осталось разобраться с Юникодом
а в чём проблема?
да разобрался вроде
в проекте C++ в General->Character Set надо поставить Use Unicode Character Set (в 2005-й студии по дефолту ANSI, а для C++ я 2013-ю использовать не рискую)
Ну и плюс всякие правки LPSTR -> LPWSTR, "строка"->L"строка", .lpszA ->.lpszW, _A -> _W, флаг MAPI_UNICODE итд, короче заработало и в Юникоде, юникод-версия кода под спойлером
Код: plaintext
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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
#include <windows.h>
#include <Shlobj.h>
#include <wab.h>

typedef HRESULT (WINAPI *fWABOpen)(LPADRBOOK*,LPWABOBJECT*,LPWAB_PARAM,DWORD);


int main()
{
  HRESULT hRes;
  LPADRBOOK lpAdrBook;
  LPWABOBJECT lpWABObject;
  LPWAB_PARAM lpWABParam = NULL;
  DWORD Reserved2 = NULL;

  HINSTANCE hinstLib;

  TCHAR szPath[MAX_PATH];
  TCHAR buf[1024];
  //CSIDL_PROGRAM_FILES_COMMON -для 32-битного кода все равно укажет на Program Files (x86)
  SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES_COMMON, NULL, SHGFP_TYPE_DEFAULT, szPath);
  wsprintf(buf, L"%s\\System\\wab32", szPath);
  hinstLib = LoadLibrary(buf); //"C:\\Program Files (x86)\\Common Files\\System\\wab32"
  fWABOpen procWABOpen;

  if (hinstLib != NULL)
  {
    procWABOpen = (fWABOpen)GetProcAddress(hinstLib, "WABOpen");
    if (procWABOpen != NULL)
    {
      hRes = (procWABOpen)(&lpAdrBook, &lpWABObject, NULL, Reserved2);
      if (hRes != S_OK) exit(1);

      ULONG lpulUIParam = 0;// (ULONG_PTR *)hWnd;
      ADRPARM lpAdrParms;
      lpAdrParms.cbABContEntryID = 0;
      lpAdrParms.lpABContEntryID = NULL;
      lpAdrParms.ulFlags = DIALOG_MODAL+MAPI_UNICODE;
      lpAdrParms.lpReserved = NULL;
      lpAdrParms.ulHelpContext = 0;
      lpAdrParms.lpszHelpFileName = NULL;
      lpAdrParms.lpfnABSDI = NULL;
      lpAdrParms.lpfnDismiss = NULL;
      lpAdrParms.lpvDismissContext = NULL;
      lpAdrParms.lpszCaption = NULL;
      lpAdrParms.lpszNewEntryTitle = NULL;
      lpAdrParms.lpszDestWellsTitle = NULL;
      lpAdrParms.cDestFields = 3;
      lpAdrParms.nDestFieldFocus = 0;
      lpAdrParms.lppszDestTitles = NULL;
      lpAdrParms.lpulDestComps = NULL;
      lpAdrParms.lpContRestriction = NULL;
      lpAdrParms.lpHierRestriction = NULL;
      LPADRLIST lppAdrList = NULL;
      hRes = lpAdrBook->Address(&lpulUIParam, &lpAdrParms, &lppAdrList);
      if (hRes != S_OK) return 0;
      if (lppAdrList==NULL)return 0;
      for(ULONG i=0;i<lppAdrList->cEntries;i++)
      {
        LPWSTR m_DisplayName = L"";
        LPWSTR m_EmailAddress = L"";
        ULONG m_ReceipType=0; //1-To,2-CC,3-BCC
        LPWSTR m_HomeTelephoneNumber = L"";
        LPWSTR m_HomeFaxNumber = L"";
        LPWSTR m_BusinessTelephoneNumber = L"";
        LPWSTR m_BusinessFaxNumber = L"";
        ULONG cProps = 0;
        LPSPropValue lpProps = NULL;
        for(ULONG j=0;j<lppAdrList->aEntries[i].cValues;j++)//
        {
          SPropValue *lpProp = &lppAdrList->aEntries[i].rgPropVals[j];

          if (lpProp->ulPropTag == PR_DISPLAY_NAME_W)
            m_DisplayName=lpProp->Value.lpszW;
          if (lpProp->ulPropTag == PR_EMAIL_ADDRESS_W)
            m_EmailAddress=lpProp->Value.lpszW;
          if (lpProp->ulPropTag == PR_RECIPIENT_TYPE) //1-To,2-CC,3-BCC
            m_ReceipType=lpProp->Value.ul;
          if (lpProp->ulPropTag == PR_ENTRYID){
            ULONG ulFlags = 0 ;//MAPI_BEST_ACCESS;
            ULONG ulObjType = NULL;
            LPUNKNOWN lpUnk = NULL;
            hRes = lpAdrBook->OpenEntry(lpProp->Value.bin.cb,(LPENTRYID)(lpProp->Value.bin.lpb),NULL,ulFlags,&ulObjType,&lpUnk);
            if (hRes == S_OK){
              ulFlags = NULL;
              if (ulObjType == MAPI_MAILUSER){
                IMailUser *lpMailUser = static_cast <IMailUser *>(lpUnk);
                ulFlags=MAPI_UNICODE;
                hRes = lpMailUser->GetProps(NULL,ulFlags,&cProps,&lpProps);
                if (hRes == S_OK){
                  for(ULONG k=0;k<cProps;k++)//
                  {
                    if (lpProps[k].ulPropTag == PR_HOME_TELEPHONE_NUMBER_W)
                     m_HomeTelephoneNumber=lpProps[k].Value.lpszW;
                    if (lpProps[k].ulPropTag == PR_HOME_FAX_NUMBER_W)
                      m_HomeFaxNumber=lpProps[k].Value.lpszW;
                    if (lpProps[k].ulPropTag == PR_BUSINESS_TELEPHONE_NUMBER_W)
                      m_BusinessTelephoneNumber=lpProps[k].Value.lpszW;
                    if (lpProps[k].ulPropTag == PR_BUSINESS_FAX_NUMBER_W)
                      m_BusinessFaxNumber=lpProps[k].Value.lpszW;
                  }
                }
              }
            }
          }
        }
        wsprintf(buf, L"Display Name: %s\nEmail Address: %s\nReceiptype: %d\nHome Phone: %s\nHome Fax: %s\n\
Office Phone: %s\nOffice Fax: %s",
					m_DisplayName,m_EmailAddress,m_ReceipType,m_HomeTelephoneNumber,m_HomeFaxNumber,
					m_BusinessTelephoneNumber,m_BusinessFaxNumber);
        MessageBox(NULL, buf, L"Recipient info", MB_OK);
        lpWABObject->FreeBuffer(lpProps);
      }
    }
  }
  FreeLibrary(hinstLib);
  return 0;
}



ИзопропилXP - любой ценой поддержать хочешь?
а цена невелика, потому что этот код на XP работает, и на 8.1 тоже (про 10-ку даже не сомневаюсь).
На XP из описания не работает вот это: Windows Contacts
Но в это я даже особо и не лез, первое универсально и достаточно, и именно "Windows Address Book" отвечает за вывод стандартных диалогов.

Так что думаю причешу код (что под спойлером) и сделаю из него dll с API, потом вставлю кнопки <Address Book> в свою прогу и этими своими API воспользуюсь, мест где надо вводить e-mail или телефон у меня в проге хватает, чего б не дополнить "стандартом".
Пустячок а приятно.
Особенно буржуям, которые к виндовым адресным книгам насколько я понял уважительно относятся (ну наверно тупые и в каменном веке с динозаврами живут, ток деньги почему-то они платят а не наши).
...
Рейтинг: 0 / 0
08.01.2016, 00:29
    #39143195
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к адресной книге (контакты Windows)
Дмитрий77,

не боишься "These interfaces will be unavailable in the future."?
...
Рейтинг: 0 / 0
08.01.2016, 01:05
    #39143201
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к адресной книге (контакты Windows)
ИзопропилДмитрий77,
не боишься "These interfaces will be unavailable in the future."?
Нет. У меня на это определенное чутье.
Аргумент еще: этот механизм использует напр. Microsoft Fax (ничего больше там быть не может),
они его с одной стороны никуда не уберут(недовольных много будет), да и переделывать с другой стороны не будут (кому нужны эти факсы).
Ту же "Почту Windows" (Program Files\Windows Mail) зачем-то тянут во все OS(в залоченном виде), значит зачем-то надо, иначе м.б. "все загнется".
Ну и папка "Контакты" вряд ли куда-то денется.
В стиле MS про все говорить что deprecated, но при этом тянуть все что наработано за годы из системы в систему.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Доступ к адресной книге (контакты Windows) / 20 сообщений из 20, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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