4 uses KOL
, KOLComObj
, WabDefs
, WabApi
, WabIab
, windows
;
12 WabObject
: IWabObject
;
15 fProperties
: PStrList
;
18 function SPropValueToStr(PropValue
: TSPropValue
): string;
19 procedure FreeSRowSet(var P
: PSRowSet
);
20 procedure FreeSBinary(var P
: PSBinary
);
21 function SPropValueToTypeStr(PropValue
: TSPropValue
): string;
23 destructor destroy
; virtual;
25 function connect
: boolean;
26 procedure setToDefaultAddressBook
;
27 procedure getPropertiesOf(name
: String);
28 property fileName
: String read fFileName write fFileName
;
29 property contacts
: PStrList read fContacts write fContacts
;
30 property properties
: PStrList read fProperties write fProperties
;
33 function NewKOLWAB
: PKOLWAB
;
42 Result
.fContacts
:= NewStrList
;
43 Result
.fProperties
:= NewStrList
;
44 Result
.fContactIds
:= NewList
;
47 destructor TKOLWAB
.destroy
;
57 procedure TKOLWAB
.setToDefaultAddressBook
;
62 r
:= RegKeyOpenRead(HKEY_CURRENT_USER
, '\Software\Microsoft\Windows\WAB\WAB4');
64 fFileName
:= RegKeyGetStr(r
, 'Wab File Name');
70 function TKOLWAB
.connect
: boolean;
72 result
:= WabApiLoaded
;
75 procedure TKOLWAB
.FreeSRowSet(var P
: PSRowSet
);
79 for I
:= 0 to P
^.cRows
- 1 do
80 OleCheck(WabObject
.FreeBuffer(P
^.aRow
[I
].lpProps
));
81 OleCheck(WabObject
.FreeBuffer(P
));
85 procedure TKOLWAB
.FreeSBinary(var P
: PSBinary
);
93 procedure TKOLWAB
.getPropertiesOf(name
: String);
94 var fLastDetailsCount
,i
: Integer;
95 EntryIDData
: PSBinary
;
96 FLastDetailID
: PSBinary
;
99 FLastDetails
: PSPropsArray
;
101 procedure ClearLastDetails
;
103 if FLastDetails
<> nil then
105 OleCheck(WabObject
.FreeBuffer(FLastDetails
));
106 FreeSBinary(FLastDetailID
);
108 FLastDetailsCount
:= 0;
116 i
:= fContacts
.indexOf(name
);
118 EntryIDData
:= fContactIds
.Items
[i
];
119 if ENtryIDData
= nil then exit
;
124 FLastDetailID
.cb
:= cb
;
125 GetMem(FLastDetailID
.lpb
, cb
);
126 CopyMemory(FLastDetailID
.lpb
, lpb
, cb
);
127 OleCheck(AddrBook
.OpenEntry(cb
, lpb
, nil, 0, ObjType
, IUnknown(MailUser
)));
129 OleCheck(MailUser
.GetProps(nil, 0, @FLastDetailsCount
, PSPropValue(FLastDetails
)));
130 for i
:= 0 to fLastDetailsCount
-1 do begin
131 fProperties
.Add(SPropValueToTypeStr(FLastDetails
[i
])+'='+SPropValueToStr(FLastDetails
[i
]));
136 function TKOLWAB
.SPropValueToStr(PropValue
: TSPropValue
): string;
143 case PROP_TYPE(ulPropTag
) of
145 Result
:= Value
.lpszA
;
147 if Value
.bin
.cb
= 4 then
148 Result
:= Format('[Binary - Size: %d bytes] (%.8x)', [Value
.bin
.cb
, PDWORD(Value
.bin
.lpb
)^])
150 Result
:= Format('[Binary - Size: %d bytes]', [Value
.bin
.cb
]);
152 Result
:= Int2Str(Value
.i
);
154 Result
:= Int2Str(Value
.l
);
156 Result
:= Double2Str(Value
.flt
);
158 Result
:= Double2Str(Value
.dbl
);
160 Result
:= Int2Str(Value
.b
);
163 FileTimeToLocalFileTime(Value
.ft
, LT
);
164 FileTimeToSystemTime(LT
, ST
);
165 SystemTime2DateTime(ST
, DT
);
166 Result
:= DateTime2StrShort(DT
);
171 Result
:= Format('[Unknown type %x]', [PROP_TYPE(ulPropTag
)]);
175 procedure TKOLWAB
.loadFile
;
179 ZeroMemory(@WP
, Sizeof(WP
));
180 WP
.cbSize
:= Sizeof(WP
);
181 WP
.szFileName
:= PChar(fFileName
);
183 OleCheck(WabOpen(AddrBook
, WabObject
, @WP
, 0));
184 {-- Ok its loaded now get all the contacts}
188 procedure TKOLWAB
.loadItems
;
190 TableColumns
: record // SizedSPropTagArray macro
192 Definition
: array[0..4] of ULONG
;
198 PR_PERSONAL_HOME_PAGE
,
203 Container
: IABContainer
;
205 EntryIDSize
, ObjType
: ULONG
;
208 EntryIDData
: PSBinary
;
210 OleCheck(AddrBook
.GetPAB(EntryIDSize
, EntryID
));
211 OleCheck(AddrBook
.OpenEntry(EntryIDSize
, EntryID
, nil, 0,
212 ObjType
, IUnknown(Container
)));
213 OleCheck(WabObject
.FreeBuffer(EntryID
));
215 OleCheck(Container
.GetContentsTable(0, Table
));
216 OleCheck(Table
.SetColumns(@TableColumns
, 0));
217 OleCheck(Table
.SeekRow(BOOKMARK_BEGINNING
, 0, nil));
222 OleCheck(Table
.QueryRows(1, 0, TableRow
));
223 if TableRow
.cRows
> 0 then with TableRow
^.aRow
[0] do
225 if ULONG(lpProps
[4].Value
.l
) in [MAPI_MAILUSER
, MAPI_DISTLIST
] then
227 EntryID
:= lpProps
[3].Value
.bin
.lpb
;
228 EntryIDSize
:= lpProps
[3].Value
.bin
.cb
;
230 OleCheck(WabObject
.AllocateBuffer(Sizeof(TSBinary
), Pointer(EntryIDData
)));
231 OleCheck(WabObject
.AllocateMore(EntryIDSize
, EntryIDData
, Pointer(EntryIDData
.lpb
)));
232 CopyMemory(EntryIDData
.lpb
, EntryID
, EntryIDSize
);
233 EntryIDData
^.cb
:= EntryIDSize
;
235 fContactIds
.Add(EntryIDData
);
236 {indexes 1 and 2 have the email and web addresses}
237 case ULONG(lpProps
[4].Value
.l
) of
239 fContacts
.Add(SPropValueToStr(lpProps
[0]));
241 {Ignoring lists for the moment}
244 FreeSRowSet(TableRow
);
250 function TKOLWAB
.SPropValueToTypeStr(PropValue
: TSPropValue
): string;
252 TagNames
: array[1..321] of record
256 (Tag
: PR_ENTRYID
; Name
: 'ENTRYID'),
257 (Tag
: PR_OBJECT_TYPE
; Name
: 'OBJECT_TYPE'),
258 (Tag
: PR_ICON
; Name
: 'ICON'),
259 (Tag
: PR_MINI_ICON
; Name
: 'MINI_ICON'),
260 (Tag
: PR_STORE_ENTRYID
; Name
: 'STORE_ENTRYID'),
261 (Tag
: PR_STORE_RECORD_KEY
; Name
: 'STORE_RECORD_KEY'),
262 (Tag
: PR_RECORD_KEY
; Name
: 'RECORD_KEY'),
263 (Tag
: PR_MAPPING_SIGNATURE
; Name
: 'MAPPING_SIGNATURE'),
264 (Tag
: PR_ACCESS_LEVEL
; Name
: 'ACCESS_LEVEL'),
265 (Tag
: PR_INSTANCE_KEY
; Name
: 'INSTANCE_KEY'),
266 (Tag
: PR_ROW_TYPE
; Name
: 'ROW_TYPE'),
267 (Tag
: PR_ACCESS
; Name
: 'ACCESS'),
268 (Tag
: PR_ROWID
; Name
: 'ROWID'),
269 (Tag
: PR_DISPLAY_NAME
; Name
: 'DISPLAY_NAME'),
270 (Tag
: PR_DISPLAY_NAME_W
; Name
: 'DISPLAY_NAME_W'),
271 (Tag
: PR_DISPLAY_NAME_A
; Name
: 'DISPLAY_NAME_A'),
272 (Tag
: PR_ADDRTYPE
; Name
: 'ADDRTYPE'),
273 (Tag
: PR_ADDRTYPE_W
; Name
: 'ADDRTYPE_W'),
274 (Tag
: PR_ADDRTYPE_A
; Name
: 'ADDRTYPE_A'),
275 (Tag
: PR_EMAIL_ADDRESS
; Name
: 'EMAIL_ADDRESS'),
276 (Tag
: PR_EMAIL_ADDRESS_W
; Name
: 'EMAIL_ADDRESS_W'),
277 (Tag
: PR_EMAIL_ADDRESS_A
; Name
: 'EMAIL_ADDRESS_A'),
278 (Tag
: PR_COMMENT
; Name
: 'COMMENT'),
279 (Tag
: PR_COMMENT_W
; Name
: 'COMMENT_W'),
280 (Tag
: PR_COMMENT_A
; Name
: 'COMMENT_A'),
281 (Tag
: PR_DEPTH
; Name
: 'DEPTH'),
282 (Tag
: PR_PROVIDER_DISPLAY
; Name
: 'PROVIDER_DISPLAY'),
283 (Tag
: PR_PROVIDER_DISPLAY_W
; Name
: 'PROVIDER_DISPLAY_W'),
284 (Tag
: PR_PROVIDER_DISPLAY_A
; Name
: 'PROVIDER_DISPLAY_A'),
285 (Tag
: PR_CREATION_TIME
; Name
: 'CREATION_TIME'),
286 (Tag
: PR_LAST_MODIFICATION_TIME
; Name
: 'LAST_MODIFICATION_TIME'),
287 (Tag
: PR_RESOURCE_FLAGS
; Name
: 'RESOURCE_FLAGS'),
288 (Tag
: PR_PROVIDER_DLL_NAME
; Name
: 'PROVIDER_DLL_NAME'),
289 (Tag
: PR_PROVIDER_DLL_NAME_W
; Name
: 'PROVIDER_DLL_NAME_W'),
290 (Tag
: PR_PROVIDER_DLL_NAME_A
; Name
: 'PROVIDER_DLL_NAME_A'),
291 (Tag
: PR_SEARCH_KEY
; Name
: 'SEARCH_KEY'),
292 (Tag
: PR_PROVIDER_UID
; Name
: 'PROVIDER_UID'),
293 (Tag
: PR_PROVIDER_ORDINAL
; Name
: 'PROVIDER_ORDINAL'),
294 (Tag
: PR_CONTAINER_FLAGS
; Name
: 'CONTAINER_FLAGS'),
295 (Tag
: PR_FOLDER_TYPE
; Name
: 'FOLDER_TYPE'),
296 (Tag
: PR_CONTENT_COUNT
; Name
: 'CONTENT_COUNT'),
297 (Tag
: PR_CONTENT_UNREAD
; Name
: 'CONTENT_UNREAD'),
298 (Tag
: PR_CREATE_TEMPLATES
; Name
: 'CREATE_TEMPLATES'),
299 (Tag
: PR_DETAILS_TABLE
; Name
: 'DETAILS_TABLE'),
300 (Tag
: PR_SEARCH
; Name
: 'SEARCH'),
301 (Tag
: PR_SELECTABLE
; Name
: 'SELECTABLE'),
302 (Tag
: PR_SUBFOLDERS
; Name
: 'SUBFOLDERS'),
303 (Tag
: PR_STATUS
; Name
: 'STATUS'),
304 (Tag
: PR_ANR
; Name
: 'ANR'),
305 (Tag
: PR_ANR_W
; Name
: 'ANR_W'),
306 (Tag
: PR_ANR_A
; Name
: 'ANR_A'),
307 (Tag
: PR_CONTENTS_SORT_ORDER
; Name
: 'CONTENTS_SORT_ORDER'),
308 (Tag
: PR_CONTAINER_HIERARCHY
; Name
: 'CONTAINER_HIERARCHY'),
309 (Tag
: PR_CONTAINER_CONTENTS
; Name
: 'CONTAINER_CONTENTS'),
310 (Tag
: PR_FOLDER_ASSOCIATED_CONTENTS
; Name
: 'FOLDER_ASSOCIATED_CONTENTS'),
311 (Tag
: PR_DEF_CREATE_DL
; Name
: 'DEF_CREATE_DL'),
312 (Tag
: PR_DEF_CREATE_MAILUSER
; Name
: 'DEF_CREATE_MAILUSER'),
313 (Tag
: PR_CONTAINER_CLASS
; Name
: 'CONTAINER_CLASS'),
314 (Tag
: PR_CONTAINER_CLASS_W
; Name
: 'CONTAINER_CLASS_W'),
315 (Tag
: PR_CONTAINER_CLASS_A
; Name
: 'CONTAINER_CLASS_A'),
316 (Tag
: PR_CONTAINER_MODIFY_VERSION
; Name
: 'CONTAINER_MODIFY_VERSION'),
317 (Tag
: PR_AB_PROVIDER_ID
; Name
: 'AB_PROVIDER_ID'),
318 (Tag
: PR_DEFAULT_VIEW_ENTRYID
; Name
: 'DEFAULT_VIEW_ENTRYID'),
319 (Tag
: PR_ASSOC_CONTENT_COUNT
; Name
: 'ASSOC_CONTENT_COUNT'),
320 (Tag
: PR_DISPLAY_TYPE
; Name
: 'DISPLAY_TYPE'),
321 (Tag
: PR_TEMPLATEID
; Name
: 'TEMPLATEID'),
322 (Tag
: PR_PRIMARY_CAPABILITY
; Name
: 'PRIMARY_CAPABILITY'),
323 (Tag
: PR_7BIT_DISPLAY_NAME
; Name
: '7BIT_DISPLAY_NAME'),
324 (Tag
: PR_ACCOUNT
; Name
: 'ACCOUNT'),
325 (Tag
: PR_ACCOUNT_W
; Name
: 'ACCOUNT_W'),
326 (Tag
: PR_ACCOUNT_A
; Name
: 'ACCOUNT_A'),
327 (Tag
: PR_ALTERNATE_RECIPIENT
; Name
: 'ALTERNATE_RECIPIENT'),
328 (Tag
: PR_CALLBACK_TELEPHONE_NUMBER
; Name
: 'CALLBACK_TELEPHONE_NUMBER'),
329 (Tag
: PR_CALLBACK_TELEPHONE_NUMBER_W
; Name
: 'CALLBACK_TELEPHONE_NUMBER_W'),
330 (Tag
: PR_CALLBACK_TELEPHONE_NUMBER_A
; Name
: 'CALLBACK_TELEPHONE_NUMBER_A'),
331 (Tag
: PR_CONVERSION_PROHIBITED
; Name
: 'CONVERSION_PROHIBITED'),
332 (Tag
: PR_DISCLOSE_RECIPIENTS
; Name
: 'DISCLOSE_RECIPIENTS'),
333 (Tag
: PR_GENERATION
; Name
: 'GENERATION'),
334 (Tag
: PR_GENERATION_W
; Name
: 'GENERATION_W'),
335 (Tag
: PR_GENERATION_A
; Name
: 'GENERATION_A'),
336 (Tag
: PR_GIVEN_NAME
; Name
: 'GIVEN_NAME'),
337 (Tag
: PR_GIVEN_NAME_W
; Name
: 'GIVEN_NAME_W'),
338 (Tag
: PR_GIVEN_NAME_A
; Name
: 'GIVEN_NAME_A'),
339 (Tag
: PR_GOVERNMENT_ID_NUMBER
; Name
: 'GOVERNMENT_ID_NUMBER'),
340 (Tag
: PR_GOVERNMENT_ID_NUMBER_W
; Name
: 'GOVERNMENT_ID_NUMBER_W'),
341 (Tag
: PR_GOVERNMENT_ID_NUMBER_A
; Name
: 'GOVERNMENT_ID_NUMBER_A'),
342 (Tag
: PR_BUSINESS_TELEPHONE_NUMBER
; Name
: 'BUSINESS_TELEPHONE_NUMBER'),
343 (Tag
: PR_BUSINESS_TELEPHONE_NUMBER_W
; Name
: 'BUSINESS_TELEPHONE_NUMBER_W'),
344 (Tag
: PR_BUSINESS_TELEPHONE_NUMBER_A
; Name
: 'BUSINESS_TELEPHONE_NUMBER_A'),
345 (Tag
: PR_OFFICE_TELEPHONE_NUMBER
; Name
: 'OFFICE_TELEPHONE_NUMBER'),
346 (Tag
: PR_OFFICE_TELEPHONE_NUMBER_W
; Name
: 'OFFICE_TELEPHONE_NUMBER_W'),
347 (Tag
: PR_OFFICE_TELEPHONE_NUMBER_A
; Name
: 'OFFICE_TELEPHONE_NUMBER_A'),
348 (Tag
: PR_HOME_TELEPHONE_NUMBER
; Name
: 'HOME_TELEPHONE_NUMBER'),
349 (Tag
: PR_HOME_TELEPHONE_NUMBER_W
; Name
: 'HOME_TELEPHONE_NUMBER_W'),
350 (Tag
: PR_HOME_TELEPHONE_NUMBER_A
; Name
: 'HOME_TELEPHONE_NUMBER_A'),
351 (Tag
: PR_INITIALS
; Name
: 'INITIALS'),
352 (Tag
: PR_INITIALS_W
; Name
: 'INITIALS_W'),
353 (Tag
: PR_INITIALS_A
; Name
: 'INITIALS_A'),
354 (Tag
: PR_KEYWORD
; Name
: 'KEYWORD'),
355 (Tag
: PR_KEYWORD_W
; Name
: 'KEYWORD_W'),
356 (Tag
: PR_KEYWORD_A
; Name
: 'KEYWORD_A'),
357 (Tag
: PR_LANGUAGE
; Name
: 'LANGUAGE'),
358 (Tag
: PR_LANGUAGE_W
; Name
: 'LANGUAGE_W'),
359 (Tag
: PR_LANGUAGE_A
; Name
: 'LANGUAGE_A'),
360 (Tag
: PR_LOCATION
; Name
: 'LOCATION'),
361 (Tag
: PR_LOCATION_W
; Name
: 'LOCATION_W'),
362 (Tag
: PR_LOCATION_A
; Name
: 'LOCATION_A'),
363 (Tag
: PR_MAIL_PERMISSION
; Name
: 'MAIL_PERMISSION'),
364 (Tag
: PR_MHS_COMMON_NAME
; Name
: 'MHS_COMMON_NAME'),
365 (Tag
: PR_MHS_COMMON_NAME_W
; Name
: 'MHS_COMMON_NAME_W'),
366 (Tag
: PR_MHS_COMMON_NAME_A
; Name
: 'MHS_COMMON_NAME_A'),
367 (Tag
: PR_ORGANIZATIONAL_ID_NUMBER
; Name
: 'ORGANIZATIONAL_ID_NUMBER'),
368 (Tag
: PR_ORGANIZATIONAL_ID_NUMBER_W
; Name
: 'ORGANIZATIONAL_ID_NUMBER_W'),
369 (Tag
: PR_ORGANIZATIONAL_ID_NUMBER_A
; Name
: 'ORGANIZATIONAL_ID_NUMBER_A'),
370 (Tag
: PR_SURNAME
; Name
: 'SURNAME'),
371 (Tag
: PR_SURNAME_W
; Name
: 'SURNAME_W'),
372 (Tag
: PR_SURNAME_A
; Name
: 'SURNAME_A'),
373 (Tag
: PR_ORIGINAL_ENTRYID
; Name
: 'ORIGINAL_ENTRYID'),
374 (Tag
: PR_ORIGINAL_DISPLAY_NAME
; Name
: 'ORIGINAL_DISPLAY_NAME'),
375 (Tag
: PR_ORIGINAL_DISPLAY_NAME_W
; Name
: 'ORIGINAL_DISPLAY_NAME_W'),
376 (Tag
: PR_ORIGINAL_DISPLAY_NAME_A
; Name
: 'ORIGINAL_DISPLAY_NAME_A'),
377 (Tag
: PR_ORIGINAL_SEARCH_KEY
; Name
: 'ORIGINAL_SEARCH_KEY'),
378 (Tag
: PR_POSTAL_ADDRESS
; Name
: 'POSTAL_ADDRESS'),
379 (Tag
: PR_POSTAL_ADDRESS_W
; Name
: 'POSTAL_ADDRESS_W'),
380 (Tag
: PR_POSTAL_ADDRESS_A
; Name
: 'POSTAL_ADDRESS_A'),
381 (Tag
: PR_COMPANY_NAME
; Name
: 'COMPANY_NAME'),
382 (Tag
: PR_COMPANY_NAME_W
; Name
: 'COMPANY_NAME_W'),
383 (Tag
: PR_COMPANY_NAME_A
; Name
: 'COMPANY_NAME_A'),
384 (Tag
: PR_TITLE
; Name
: 'TITLE'),
385 (Tag
: PR_TITLE_W
; Name
: 'TITLE_W'),
386 (Tag
: PR_TITLE_A
; Name
: 'TITLE_A'),
387 (Tag
: PR_DEPARTMENT_NAME
; Name
: 'DEPARTMENT_NAME'),
388 (Tag
: PR_DEPARTMENT_NAME_W
; Name
: 'DEPARTMENT_NAME_W'),
389 (Tag
: PR_DEPARTMENT_NAME_A
; Name
: 'DEPARTMENT_NAME_A'),
390 (Tag
: PR_OFFICE_LOCATION
; Name
: 'OFFICE_LOCATION'),
391 (Tag
: PR_OFFICE_LOCATION_W
; Name
: 'OFFICE_LOCATION_W'),
392 (Tag
: PR_OFFICE_LOCATION_A
; Name
: 'OFFICE_LOCATION_A'),
393 (Tag
: PR_PRIMARY_TELEPHONE_NUMBER
; Name
: 'PRIMARY_TELEPHONE_NUMBER'),
394 (Tag
: PR_PRIMARY_TELEPHONE_NUMBER_W
; Name
: 'PRIMARY_TELEPHONE_NUMBER_W'),
395 (Tag
: PR_PRIMARY_TELEPHONE_NUMBER_A
; Name
: 'PRIMARY_TELEPHONE_NUMBER_A'),
396 (Tag
: PR_BUSINESS2_TELEPHONE_NUMBER
; Name
: 'BUSINESS2_TELEPHONE_NUMBER'),
397 (Tag
: PR_BUSINESS2_TELEPHONE_NUMBER_W
; Name
: 'BUSINESS2_TELEPHONE_NUMBER_W'),
398 (Tag
: PR_BUSINESS2_TELEPHONE_NUMBER_A
; Name
: 'BUSINESS2_TELEPHONE_NUMBER_A'),
399 (Tag
: PR_OFFICE2_TELEPHONE_NUMBER
; Name
: 'OFFICE2_TELEPHONE_NUMBER'),
400 (Tag
: PR_OFFICE2_TELEPHONE_NUMBER_W
; Name
: 'OFFICE2_TELEPHONE_NUMBER_W'),
401 (Tag
: PR_OFFICE2_TELEPHONE_NUMBER_A
; Name
: 'OFFICE2_TELEPHONE_NUMBER_A'),
402 (Tag
: PR_MOBILE_TELEPHONE_NUMBER
; Name
: 'MOBILE_TELEPHONE_NUMBER'),
403 (Tag
: PR_MOBILE_TELEPHONE_NUMBER_W
; Name
: 'MOBILE_TELEPHONE_NUMBER_W'),
404 (Tag
: PR_MOBILE_TELEPHONE_NUMBER_A
; Name
: 'MOBILE_TELEPHONE_NUMBER_A'),
405 (Tag
: PR_CELLULAR_TELEPHONE_NUMBER
; Name
: 'CELLULAR_TELEPHONE_NUMBER'),
406 (Tag
: PR_CELLULAR_TELEPHONE_NUMBER_W
; Name
: 'CELLULAR_TELEPHONE_NUMBER_W'),
407 (Tag
: PR_CELLULAR_TELEPHONE_NUMBER_A
; Name
: 'CELLULAR_TELEPHONE_NUMBER_A'),
408 (Tag
: PR_RADIO_TELEPHONE_NUMBER
; Name
: 'RADIO_TELEPHONE_NUMBER'),
409 (Tag
: PR_RADIO_TELEPHONE_NUMBER_W
; Name
: 'RADIO_TELEPHONE_NUMBER_W'),
410 (Tag
: PR_RADIO_TELEPHONE_NUMBER_A
; Name
: 'RADIO_TELEPHONE_NUMBER_A'),
411 (Tag
: PR_CAR_TELEPHONE_NUMBER
; Name
: 'CAR_TELEPHONE_NUMBER'),
412 (Tag
: PR_CAR_TELEPHONE_NUMBER_W
; Name
: 'CAR_TELEPHONE_NUMBER_W'),
413 (Tag
: PR_CAR_TELEPHONE_NUMBER_A
; Name
: 'CAR_TELEPHONE_NUMBER_A'),
414 (Tag
: PR_OTHER_TELEPHONE_NUMBER
; Name
: 'OTHER_TELEPHONE_NUMBER'),
415 (Tag
: PR_OTHER_TELEPHONE_NUMBER_W
; Name
: 'OTHER_TELEPHONE_NUMBER_W'),
416 (Tag
: PR_OTHER_TELEPHONE_NUMBER_A
; Name
: 'OTHER_TELEPHONE_NUMBER_A'),
417 (Tag
: PR_TRANSMITABLE_DISPLAY_NAME
; Name
: 'TRANSMITABLE_DISPLAY_NAME'),
418 (Tag
: PR_TRANSMITABLE_DISPLAY_NAME_W
; Name
: 'TRANSMITABLE_DISPLAY_NAME_W'),
419 (Tag
: PR_TRANSMITABLE_DISPLAY_NAME_A
; Name
: 'TRANSMITABLE_DISPLAY_NAME_A'),
420 (Tag
: PR_PAGER_TELEPHONE_NUMBER
; Name
: 'PAGER_TELEPHONE_NUMBER'),
421 (Tag
: PR_PAGER_TELEPHONE_NUMBER_W
; Name
: 'PAGER_TELEPHONE_NUMBER_W'),
422 (Tag
: PR_PAGER_TELEPHONE_NUMBER_A
; Name
: 'PAGER_TELEPHONE_NUMBER_A'),
423 (Tag
: PR_BEEPER_TELEPHONE_NUMBER
; Name
: 'BEEPER_TELEPHONE_NUMBER'),
424 (Tag
: PR_BEEPER_TELEPHONE_NUMBER_W
; Name
: 'BEEPER_TELEPHONE_NUMBER_W'),
425 (Tag
: PR_BEEPER_TELEPHONE_NUMBER_A
; Name
: 'BEEPER_TELEPHONE_NUMBER_A'),
426 (Tag
: PR_USER_CERTIFICATE
; Name
: 'USER_CERTIFICATE'),
427 (Tag
: PR_PRIMARY_FAX_NUMBER
; Name
: 'PRIMARY_FAX_NUMBER'),
428 (Tag
: PR_PRIMARY_FAX_NUMBER_W
; Name
: 'PRIMARY_FAX_NUMBER_W'),
429 (Tag
: PR_PRIMARY_FAX_NUMBER_A
; Name
: 'PRIMARY_FAX_NUMBER_A'),
430 (Tag
: PR_BUSINESS_FAX_NUMBER
; Name
: 'BUSINESS_FAX_NUMBER'),
431 (Tag
: PR_BUSINESS_FAX_NUMBER_W
; Name
: 'BUSINESS_FAX_NUMBER_W'),
432 (Tag
: PR_BUSINESS_FAX_NUMBER_A
; Name
: 'BUSINESS_FAX_NUMBER_A'),
433 (Tag
: PR_HOME_FAX_NUMBER
; Name
: 'HOME_FAX_NUMBER'),
434 (Tag
: PR_HOME_FAX_NUMBER_W
; Name
: 'HOME_FAX_NUMBER_W'),
435 (Tag
: PR_HOME_FAX_NUMBER_A
; Name
: 'HOME_FAX_NUMBER_A'),
436 (Tag
: PR_COUNTRY
; Name
: 'COUNTRY'),
437 (Tag
: PR_COUNTRY_W
; Name
: 'COUNTRY_W'),
438 (Tag
: PR_COUNTRY_A
; Name
: 'COUNTRY_A'),
439 (Tag
: PR_LOCALITY
; Name
: 'LOCALITY'),
440 (Tag
: PR_LOCALITY_W
; Name
: 'LOCALITY_W'),
441 (Tag
: PR_LOCALITY_A
; Name
: 'LOCALITY_A'),
442 (Tag
: PR_STATE_OR_PROVINCE
; Name
: 'STATE_OR_PROVINCE'),
443 (Tag
: PR_STATE_OR_PROVINCE_W
; Name
: 'STATE_OR_PROVINCE_W'),
444 (Tag
: PR_STATE_OR_PROVINCE_A
; Name
: 'STATE_OR_PROVINCE_A'),
445 (Tag
: PR_STREET_ADDRESS
; Name
: 'STREET_ADDRESS'),
446 (Tag
: PR_STREET_ADDRESS_W
; Name
: 'STREET_ADDRESS_W'),
447 (Tag
: PR_STREET_ADDRESS_A
; Name
: 'STREET_ADDRESS_A'),
448 (Tag
: PR_POSTAL_CODE
; Name
: 'POSTAL_CODE'),
449 (Tag
: PR_POSTAL_CODE_W
; Name
: 'POSTAL_CODE_W'),
450 (Tag
: PR_POSTAL_CODE_A
; Name
: 'POSTAL_CODE_A'),
451 (Tag
: PR_POST_OFFICE_BOX
; Name
: 'POST_OFFICE_BOX'),
452 (Tag
: PR_POST_OFFICE_BOX_W
; Name
: 'POST_OFFICE_BOX_W'),
453 (Tag
: PR_POST_OFFICE_BOX_A
; Name
: 'POST_OFFICE_BOX_A'),
454 (Tag
: PR_BUSINESS_ADDRESS_POST_OFFICE_BOX
; Name
: 'BUSINESS_ADDRESS_POST_OFFICE_BOX'),
455 (Tag
: PR_BUSINESS_ADDRESS_POST_OFFICE_BOX_W
; Name
: 'BUSINESS_ADDRESS_POST_OFFICE_BOX_W'),
456 (Tag
: PR_BUSINESS_ADDRESS_POST_OFFICE_BOX_A
; Name
: 'BUSINESS_ADDRESS_POST_OFFICE_BOX_A'),
457 (Tag
: PR_TELEX_NUMBER
; Name
: 'TELEX_NUMBER'),
458 (Tag
: PR_TELEX_NUMBER_W
; Name
: 'TELEX_NUMBER_W'),
459 (Tag
: PR_TELEX_NUMBER_A
; Name
: 'TELEX_NUMBER_A'),
460 (Tag
: PR_ISDN_NUMBER
; Name
: 'ISDN_NUMBER'),
461 (Tag
: PR_ISDN_NUMBER_W
; Name
: 'ISDN_NUMBER_W'),
462 (Tag
: PR_ISDN_NUMBER_A
; Name
: 'ISDN_NUMBER_A'),
463 (Tag
: PR_ASSISTANT_TELEPHONE_NUMBER
; Name
: 'ASSISTANT_TELEPHONE_NUMBER'),
464 (Tag
: PR_ASSISTANT_TELEPHONE_NUMBER_W
; Name
: 'ASSISTANT_TELEPHONE_NUMBER_W'),
465 (Tag
: PR_ASSISTANT_TELEPHONE_NUMBER_A
; Name
: 'ASSISTANT_TELEPHONE_NUMBER_A'),
466 (Tag
: PR_HOME2_TELEPHONE_NUMBER
; Name
: 'HOME2_TELEPHONE_NUMBER'),
467 (Tag
: PR_HOME2_TELEPHONE_NUMBER_W
; Name
: 'HOME2_TELEPHONE_NUMBER_W'),
468 (Tag
: PR_HOME2_TELEPHONE_NUMBER_A
; Name
: 'HOME2_TELEPHONE_NUMBER_A'),
469 (Tag
: PR_ASSISTANT
; Name
: 'ASSISTANT'),
470 (Tag
: PR_ASSISTANT_W
; Name
: 'ASSISTANT_W'),
471 (Tag
: PR_ASSISTANT_A
; Name
: 'ASSISTANT_A'),
472 (Tag
: PR_SEND_RICH_INFO
; Name
: 'SEND_RICH_INFO'),
473 (Tag
: PR_WEDDING_ANNIVERSARY
; Name
: 'WEDDING_ANNIVERSARY'),
474 (Tag
: PR_BIRTHDAY
; Name
: 'BIRTHDAY'),
475 (Tag
: PR_HOBBIES
; Name
: 'HOBBIES'),
476 (Tag
: PR_HOBBIES_W
; Name
: 'HOBBIES_W'),
477 (Tag
: PR_HOBBIES_A
; Name
: 'HOBBIES_A'),
478 (Tag
: PR_MIDDLE_NAME
; Name
: 'MIDDLE_NAME'),
479 (Tag
: PR_MIDDLE_NAME_W
; Name
: 'MIDDLE_NAME_W'),
480 (Tag
: PR_MIDDLE_NAME_A
; Name
: 'MIDDLE_NAME_A'),
481 (Tag
: PR_DISPLAY_NAME_PREFIX
; Name
: 'DISPLAY_NAME_PREFIX'),
482 (Tag
: PR_DISPLAY_NAME_PREFIX_W
; Name
: 'DISPLAY_NAME_PREFIX_W'),
483 (Tag
: PR_DISPLAY_NAME_PREFIX_A
; Name
: 'DISPLAY_NAME_PREFIX_A'),
484 (Tag
: PR_PROFESSION
; Name
: 'PROFESSION'),
485 (Tag
: PR_PROFESSION_W
; Name
: 'PROFESSION_W'),
486 (Tag
: PR_PROFESSION_A
; Name
: 'PROFESSION_A'),
487 (Tag
: PR_PREFERRED_BY_NAME
; Name
: 'PREFERRED_BY_NAME'),
488 (Tag
: PR_PREFERRED_BY_NAME_W
; Name
: 'PREFERRED_BY_NAME_W'),
489 (Tag
: PR_PREFERRED_BY_NAME_A
; Name
: 'PREFERRED_BY_NAME_A'),
490 (Tag
: PR_SPOUSE_NAME
; Name
: 'SPOUSE_NAME'),
491 (Tag
: PR_SPOUSE_NAME_W
; Name
: 'SPOUSE_NAME_W'),
492 (Tag
: PR_SPOUSE_NAME_A
; Name
: 'SPOUSE_NAME_A'),
493 (Tag
: PR_COMPUTER_NETWORK_NAME
; Name
: 'COMPUTER_NETWORK_NAME'),
494 (Tag
: PR_COMPUTER_NETWORK_NAME_W
; Name
: 'COMPUTER_NETWORK_NAME_W'),
495 (Tag
: PR_COMPUTER_NETWORK_NAME_A
; Name
: 'COMPUTER_NETWORK_NAME_A'),
496 (Tag
: PR_CUSTOMER_ID
; Name
: 'CUSTOMER_ID'),
497 (Tag
: PR_CUSTOMER_ID_W
; Name
: 'CUSTOMER_ID_W'),
498 (Tag
: PR_CUSTOMER_ID_A
; Name
: 'CUSTOMER_ID_A'),
499 (Tag
: PR_TTYTDD_PHONE_NUMBER
; Name
: 'TTYTDD_PHONE_NUMBER'),
500 (Tag
: PR_TTYTDD_PHONE_NUMBER_W
; Name
: 'TTYTDD_PHONE_NUMBER_W'),
501 (Tag
: PR_TTYTDD_PHONE_NUMBER_A
; Name
: 'TTYTDD_PHONE_NUMBER_A'),
502 (Tag
: PR_FTP_SITE
; Name
: 'FTP_SITE'),
503 (Tag
: PR_FTP_SITE_W
; Name
: 'FTP_SITE_W'),
504 (Tag
: PR_FTP_SITE_A
; Name
: 'FTP_SITE_A'),
505 (Tag
: PR_GENDER
; Name
: 'GENDER'),
506 (Tag
: PR_MANAGER_NAME
; Name
: 'MANAGER_NAME'),
507 (Tag
: PR_MANAGER_NAME_W
; Name
: 'MANAGER_NAME_W'),
508 (Tag
: PR_MANAGER_NAME_A
; Name
: 'MANAGER_NAME_A'),
509 (Tag
: PR_NICKNAME
; Name
: 'NICKNAME'),
510 (Tag
: PR_NICKNAME_W
; Name
: 'NICKNAME_W'),
511 (Tag
: PR_NICKNAME_A
; Name
: 'NICKNAME_A'),
512 (Tag
: PR_PERSONAL_HOME_PAGE
; Name
: 'PERSONAL_HOME_PAGE'),
513 (Tag
: PR_PERSONAL_HOME_PAGE_W
; Name
: 'PERSONAL_HOME_PAGE_W'),
514 (Tag
: PR_PERSONAL_HOME_PAGE_A
; Name
: 'PERSONAL_HOME_PAGE_A'),
515 (Tag
: PR_BUSINESS_HOME_PAGE
; Name
: 'BUSINESS_HOME_PAGE'),
516 (Tag
: PR_BUSINESS_HOME_PAGE_W
; Name
: 'BUSINESS_HOME_PAGE_W'),
517 (Tag
: PR_BUSINESS_HOME_PAGE_A
; Name
: 'BUSINESS_HOME_PAGE_A'),
518 (Tag
: PR_CONTACT_VERSION
; Name
: 'CONTACT_VERSION'),
519 (Tag
: PR_CONTACT_ENTRYIDS
; Name
: 'CONTACT_ENTRYIDS'),
520 (Tag
: PR_CONTACT_ADDRTYPES
; Name
: 'CONTACT_ADDRTYPES'),
521 (Tag
: PR_CONTACT_ADDRTYPES_W
; Name
: 'CONTACT_ADDRTYPES_W'),
522 (Tag
: PR_CONTACT_ADDRTYPES_A
; Name
: 'CONTACT_ADDRTYPES_A'),
523 (Tag
: PR_CONTACT_DEFAULT_ADDRESS_INDEX
; Name
: 'CONTACT_DEFAULT_ADDRESS_INDEX'),
524 (Tag
: PR_CONTACT_EMAIL_ADDRESSES
; Name
: 'CONTACT_EMAIL_ADDRESSES'),
525 (Tag
: PR_CONTACT_EMAIL_ADDRESSES_W
; Name
: 'CONTACT_EMAIL_ADDRESSES_W'),
526 (Tag
: PR_CONTACT_EMAIL_ADDRESSES_A
; Name
: 'CONTACT_EMAIL_ADDRESSES_A'),
527 (Tag
: PR_COMPANY_MAIN_PHONE_NUMBER
; Name
: 'COMPANY_MAIN_PHONE_NUMBER'),
528 (Tag
: PR_COMPANY_MAIN_PHONE_NUMBER_W
; Name
: 'COMPANY_MAIN_PHONE_NUMBER_W'),
529 (Tag
: PR_COMPANY_MAIN_PHONE_NUMBER_A
; Name
: 'COMPANY_MAIN_PHONE_NUMBER_A'),
530 (Tag
: PR_CHILDRENS_NAMES
; Name
: 'CHILDRENS_NAMES'),
531 (Tag
: PR_CHILDRENS_NAMES_W
; Name
: 'CHILDRENS_NAMES_W'),
532 (Tag
: PR_CHILDRENS_NAMES_A
; Name
: 'CHILDRENS_NAMES_A'),
533 (Tag
: PR_HOME_ADDRESS_CITY
; Name
: 'HOME_ADDRESS_CITY'),
534 (Tag
: PR_HOME_ADDRESS_CITY_W
; Name
: 'HOME_ADDRESS_CITY_W'),
535 (Tag
: PR_HOME_ADDRESS_CITY_A
; Name
: 'HOME_ADDRESS_CITY_A'),
536 (Tag
: PR_HOME_ADDRESS_COUNTRY
; Name
: 'HOME_ADDRESS_COUNTRY'),
537 (Tag
: PR_HOME_ADDRESS_COUNTRY_W
; Name
: 'HOME_ADDRESS_COUNTRY_W'),
538 (Tag
: PR_HOME_ADDRESS_COUNTRY_A
; Name
: 'HOME_ADDRESS_COUNTRY_A'),
539 (Tag
: PR_HOME_ADDRESS_POSTAL_CODE
; Name
: 'HOME_ADDRESS_POSTAL_CODE'),
540 (Tag
: PR_HOME_ADDRESS_POSTAL_CODE_W
; Name
: 'HOME_ADDRESS_POSTAL_CODE_W'),
541 (Tag
: PR_HOME_ADDRESS_POSTAL_CODE_A
; Name
: 'HOME_ADDRESS_POSTAL_CODE_A'),
542 (Tag
: PR_HOME_ADDRESS_STATE_OR_PROVINCE
; Name
: 'HOME_ADDRESS_STATE_OR_PROVINCE'),
543 (Tag
: PR_HOME_ADDRESS_STATE_OR_PROVINCE_W
; Name
: 'HOME_ADDRESS_STATE_OR_PROVINCE_W'),
544 (Tag
: PR_HOME_ADDRESS_STATE_OR_PROVINCE_A
; Name
: 'HOME_ADDRESS_STATE_OR_PROVINCE_A'),
545 (Tag
: PR_HOME_ADDRESS_STREET
; Name
: 'HOME_ADDRESS_STREET'),
546 (Tag
: PR_HOME_ADDRESS_STREET_W
; Name
: 'HOME_ADDRESS_STREET_W'),
547 (Tag
: PR_HOME_ADDRESS_STREET_A
; Name
: 'HOME_ADDRESS_STREET_A'),
548 (Tag
: PR_HOME_ADDRESS_POST_OFFICE_BOX
; Name
: 'HOME_ADDRESS_POST_OFFICE_BOX'),
549 (Tag
: PR_HOME_ADDRESS_POST_OFFICE_BOX_W
; Name
: 'HOME_ADDRESS_POST_OFFICE_BOX_W'),
550 (Tag
: PR_HOME_ADDRESS_POST_OFFICE_BOX_A
; Name
: 'HOME_ADDRESS_POST_OFFICE_BOX_A'),
551 (Tag
: PR_OTHER_ADDRESS_CITY
; Name
: 'OTHER_ADDRESS_CITY'),
552 (Tag
: PR_OTHER_ADDRESS_CITY_W
; Name
: 'OTHER_ADDRESS_CITY_W'),
553 (Tag
: PR_OTHER_ADDRESS_CITY_A
; Name
: 'OTHER_ADDRESS_CITY_A'),
554 (Tag
: PR_OTHER_ADDRESS_COUNTRY
; Name
: 'OTHER_ADDRESS_COUNTRY'),
555 (Tag
: PR_OTHER_ADDRESS_COUNTRY_W
; Name
: 'OTHER_ADDRESS_COUNTRY_W'),
556 (Tag
: PR_OTHER_ADDRESS_COUNTRY_A
; Name
: 'OTHER_ADDRESS_COUNTRY_A'),
557 (Tag
: PR_OTHER_ADDRESS_POSTAL_CODE
; Name
: 'OTHER_ADDRESS_POSTAL_CODE'),
558 (Tag
: PR_OTHER_ADDRESS_POSTAL_CODE_W
; Name
: 'OTHER_ADDRESS_POSTAL_CODE_W'),
559 (Tag
: PR_OTHER_ADDRESS_POSTAL_CODE_A
; Name
: 'OTHER_ADDRESS_POSTAL_CODE_A'),
560 (Tag
: PR_OTHER_ADDRESS_STATE_OR_PROVINCE
; Name
: 'OTHER_ADDRESS_STATE_OR_PROVINCE'),
561 (Tag
: PR_OTHER_ADDRESS_STATE_OR_PROVINCE_W
; Name
: 'OTHER_ADDRESS_STATE_OR_PROVINCE_W'),
562 (Tag
: PR_OTHER_ADDRESS_STATE_OR_PROVINCE_A
; Name
: 'OTHER_ADDRESS_STATE_OR_PROVINCE_A'),
563 (Tag
: PR_OTHER_ADDRESS_STREET
; Name
: 'OTHER_ADDRESS_STREET'),
564 (Tag
: PR_OTHER_ADDRESS_STREET_W
; Name
: 'OTHER_ADDRESS_STREET_W'),
565 (Tag
: PR_OTHER_ADDRESS_STREET_A
; Name
: 'OTHER_ADDRESS_STREET_A'),
566 (Tag
: PR_OTHER_ADDRESS_POST_OFFICE_BOX
; Name
: 'OTHER_ADDRESS_POST_OFFICE_BOX'),
567 (Tag
: PR_OTHER_ADDRESS_POST_OFFICE_BOX_W
; Name
: 'OTHER_ADDRESS_POST_OFFICE_BOX_W'),
568 (Tag
: PR_OTHER_ADDRESS_POST_OFFICE_BOX_A
; Name
: 'OTHER_ADDRESS_POST_OFFICE_BOX_A'),
569 (Tag
: PR_USER_X509_CERTIFICATE
; Name
: 'USER_X509_CERTIFICATE'),
570 (Tag
: PR_SEND_INTERNET_ENCODING
; Name
: 'SEND_INTERNET_ENCODING'),
571 (Tag
: PR_BUSINESS_ADDRESS_CITY
; Name
: 'BUSINESS_ADDRESS_CITY'),
572 (Tag
: PR_BUSINESS_ADDRESS_COUNTRY
; Name
: 'BUSINESS_ADDRESS_COUNTRY'),
573 (Tag
: PR_BUSINESS_ADDRESS_POSTAL_CODE
; Name
: 'BUSINESS_ADDRESS_POSTAL_CODE'),
574 (Tag
: PR_BUSINESS_ADDRESS_STATE_OR_PROVINCE
; Name
: 'BUSINESS_ADDRESS_STATE_OR_PROVINCE'),
575 (Tag
: PR_BUSINESS_ADDRESS_STREET
; Name
: 'BUSINESS_ADDRESS_STREET'),
576 (Tag
: PR_RECIPIENT_TYPE
; Name
: 'RECIPIENT_TYPE')
583 PropID
:= PROP_ID(PropValue
.ulPropTag
);
584 for I
:= Low(TagNames
) to High(TagNames
) do
585 if PROP_ID(TagNames
[I
].Tag
) = PropID
then
587 Result
:= TagNames
[I
].Name
;
590 if Result
= '' then Result
:= Format('[%x]', [PropID
]);