mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-07 09:25:33 +00:00
2851 lines
94 KiB
ObjectPascal
2851 lines
94 KiB
ObjectPascal
{******************************************************************************}
|
|
{ }
|
|
{ Windows Address Book (WAB) API interface Unit for Object Pascal }
|
|
{ }
|
|
{ Portions created by Microsoft are Copyright (C) 1995-2008 Microsoft }
|
|
{ Corporation. All Rights Reserved. }
|
|
{ }
|
|
{ Portions created by Microsoft are }
|
|
{ Copyright (C) 1995-2000 Microsoft Corporation. }
|
|
{ All Rights Reserved. }
|
|
{ }
|
|
{ The original file is: wabdefs.h, released 31 Jan 2000. }
|
|
{ The original Pascal code is: WabDefs.pas, released 15 Mar 2000. }
|
|
{ The initial developer of the Pascal code is Petr Vones }
|
|
{ (petr.v@mujmail.cz). }
|
|
{ }
|
|
{ Portions created by Petr Vones are }
|
|
{ Copyright (C) 2000 Petr Vones }
|
|
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
|
|
{ }
|
|
{ You may retrieve the latest version of this file at the Project JEDI }
|
|
{ APILIB home page, located at http://jedi-apilib.sourceforge.net }
|
|
{ }
|
|
{ The contents of this file are used with permission, subject to the Mozilla }
|
|
{ Public License Version 1.1 (the "License"); you may not use this file except }
|
|
{ in compliance with the License. You may obtain a copy of the License at }
|
|
{ http://www.mozilla.org/MPL/MPL-1.1.html }
|
|
{ }
|
|
{ Software distributed under the License is distributed on an "AS IS" basis, }
|
|
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
|
|
{ the specific language governing rights and limitations under the License. }
|
|
{ }
|
|
{ Alternatively, the contents of this file may be used under the terms of the }
|
|
{ GNU Lesser General Public License (the "LGPL License"), in which case the }
|
|
{ provisions of the LGPL License are applicable instead of those above. }
|
|
{ If you wish to allow use of your version of this file only under the terms }
|
|
{ of the LGPL License and not to allow others to use your version of this file }
|
|
{ under the MPL, indicate your decision by deleting the provisions above and }
|
|
{ replace them with the notice and other provisions required by the LGPL }
|
|
{ License. If you do not delete the provisions above, a recipient may use }
|
|
{ your version of this file under either the MPL or the LGPL License. }
|
|
{ }
|
|
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
|
|
{ }
|
|
{******************************************************************************}
|
|
{$IFNDEF JWA_OMIT_SECTIONS}
|
|
unit JwaWabDefs;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, ActiveX;
|
|
|
|
{$I ..\Includes\JediAPILib.inc}
|
|
|
|
|
|
{$ALIGN ON}
|
|
{$MINENUMSIZE 4}
|
|
{$WEAKPACKAGEUNIT}
|
|
|
|
(*$HPPEMIT '#include <wabdefs.h>'*)
|
|
(*$HPPEMIT '#include <windows.h>'*)
|
|
(*$HPPEMIT '#include <objerror.h>'*)
|
|
(*$HPPEMIT '#include <objbase.h>'*)
|
|
(*$HPPEMIT '#include <stddef.h>'*)
|
|
|
|
{$ENDIF JWA_OMIT_SECTIONS}
|
|
|
|
{ Array dimension for structures with variable-sized arrays at the end. }
|
|
|
|
{$IFNDEF JWA_IMPLEMENTATIONSECTION}
|
|
|
|
const
|
|
MAPI_DIM = 1;
|
|
{$EXTERNALSYM MAPI_DIM}
|
|
|
|
|
|
{* This flag is used in many different MAPI calls to signify that
|
|
* the object opened by the call should be modifiable (MAPI_MODIFY).
|
|
* If the flag MAPI_MAX_ACCESS is set, the object returned should be
|
|
* returned at the maximum access level allowed. An additional
|
|
* property available on the object (PR_ACCESS_LEVEL) uses the same
|
|
* MAPI_MODIFY flag to say just what this new access level is.
|
|
}
|
|
|
|
MAPI_MODIFY = ULONG($00000001);
|
|
{$EXTERNALSYM MAPI_MODIFY}
|
|
|
|
{* The following flags are used to indicate to the client what access
|
|
* level is permissible in the object. They appear in PR_ACCESS in
|
|
* message and folder objects as well as in contents and associated
|
|
* contents tables
|
|
}
|
|
|
|
MAPI_ACCESS_MODIFY = ULONG($00000001);
|
|
{$EXTERNALSYM MAPI_ACCESS_MODIFY}
|
|
MAPI_ACCESS_READ = ULONG($00000002);
|
|
{$EXTERNALSYM MAPI_ACCESS_READ}
|
|
MAPI_ACCESS_DELETE = ULONG($00000004);
|
|
{$EXTERNALSYM MAPI_ACCESS_DELETE}
|
|
MAPI_ACCESS_CREATE_HIERARCHY = ULONG($00000008);
|
|
{$EXTERNALSYM MAPI_ACCESS_CREATE_HIERARCHY}
|
|
MAPI_ACCESS_CREATE_CONTENTS = ULONG($00000010);
|
|
{$EXTERNALSYM MAPI_ACCESS_CREATE_CONTENTS}
|
|
MAPI_ACCESS_CREATE_ASSOCIATED = ULONG($00000020);
|
|
{$EXTERNALSYM MAPI_ACCESS_CREATE_ASSOCIATED}
|
|
|
|
{* The MAPI_UNICODE flag is used in many different MAPI calls to signify
|
|
* that strings passed through the interface are in Unicode (a 16-bit
|
|
* character set). The default is an 8-bit character set.
|
|
*
|
|
* The value fMapiUnicode can be used as the 'normal' value for
|
|
* that bit, given the application's default character set.
|
|
}
|
|
|
|
MAPI_UNICODE = ULONG($80000000);
|
|
{$EXTERNALSYM MAPI_UNICODE}
|
|
|
|
hrSuccess = 0;
|
|
{$EXTERNALSYM hrSuccess}
|
|
|
|
{ Recipient types }
|
|
MAPI_ORIG = 0; // Recipient is message originator
|
|
{$EXTERNALSYM MAPI_ORIG}
|
|
MAPI_TO = 1; // Recipient is a primary recipient
|
|
{$EXTERNALSYM MAPI_TO}
|
|
MAPI_CC = 2; // Recipient is a copy recipient
|
|
{$EXTERNALSYM MAPI_CC}
|
|
MAPI_BCC = 3; // Recipient is blind copy recipient
|
|
{$EXTERNALSYM MAPI_BCC}
|
|
MAPI_P1 = $10000000; // Recipient is a P1 resend recipient
|
|
{$EXTERNALSYM MAPI_P1}
|
|
MAPI_SUBMITTED = $80000000; // Recipient is already processed
|
|
{$EXTERNALSYM MAPI_SUBMITTED}
|
|
MAPI_AUTHORIZE = 4; // Recipient is a CMC authorizing user
|
|
{$EXTERNALSYM MAPI_AUTHORIZE}
|
|
MAPI_DISCRETE = $10000000; // Recipient is a P1 resend recipient
|
|
{$EXTERNALSYM MAPI_DISCRETE}
|
|
|
|
{ Bit definitions for abFlags[0] of ENTRYID }
|
|
MAPI_SHORTTERM = $80;
|
|
{$EXTERNALSYM MAPI_SHORTTERM}
|
|
MAPI_NOTRECIP = $40;
|
|
{$EXTERNALSYM MAPI_NOTRECIP}
|
|
MAPI_THISSESSION = $20;
|
|
{$EXTERNALSYM MAPI_THISSESSION}
|
|
MAPI_NOW = $10;
|
|
{$EXTERNALSYM MAPI_NOW}
|
|
MAPI_NOTRESERVED = $08;
|
|
{$EXTERNALSYM MAPI_NOTRESERVED}
|
|
|
|
{ Bit definitions for abFlags[1] of ENTRYID }
|
|
MAPI_COMPOUND = $80;
|
|
{$EXTERNALSYM MAPI_COMPOUND}
|
|
|
|
type
|
|
PEntryID = ^TEntryID;
|
|
_ENTRYID = record
|
|
abFlags: array[0..3] of Byte;
|
|
ab: array[0..MAPI_DIM-1] of Byte;
|
|
end;
|
|
{$EXTERNALSYM _ENTRYID}
|
|
TEntryID = _ENTRYID;
|
|
ENTRYID = _ENTRYID;
|
|
{$EXTERNALSYM ENTRYID}
|
|
|
|
(*!!!
|
|
#define CbNewENTRYID(_cb) (offsetof(ENTRYID,ab) + (_cb))
|
|
#define CbENTRYID(_cb) (offsetof(ENTRYID,ab) + (_cb))
|
|
#define SizedENTRYID(_cb, _name) \
|
|
struct _ENTRYID_ ## _name \
|
|
{ \
|
|
BYTE abFlags[4]; \
|
|
BYTE ab[_cb]; \
|
|
} _name
|
|
*)
|
|
|
|
{ Byte-order-independent version of GUID (world-unique identifier) }
|
|
|
|
PMapiUID = ^TMapiUID;
|
|
_MAPIUID = record
|
|
ab: array[0..15] of Byte;
|
|
end;
|
|
{$EXTERNALSYM _MAPIUID}
|
|
TMapiUID = _MAPIUID;
|
|
MAPIUID = _MAPIUID;
|
|
{$EXTERNALSYM MAPIUID}
|
|
|
|
function IsEqualMAPIUID(lpuid1, lpuid2: TMapiUID): Boolean;
|
|
{$EXTERNALSYM IsEqualMAPIUID}
|
|
|
|
const
|
|
MAPI_STORE = ULONG($00000001); // Message Store
|
|
{$EXTERNALSYM MAPI_STORE}
|
|
MAPI_ADDRBOOK = ULONG($00000002); // Address Book
|
|
{$EXTERNALSYM MAPI_ADDRBOOK}
|
|
MAPI_FOLDER = ULONG($00000003); // Folder
|
|
{$EXTERNALSYM MAPI_FOLDER}
|
|
MAPI_ABCONT = ULONG($00000004); // Address Book Container
|
|
{$EXTERNALSYM MAPI_ABCONT}
|
|
MAPI_MESSAGE = ULONG($00000005); // Message
|
|
{$EXTERNALSYM MAPI_MESSAGE}
|
|
MAPI_MAILUSER = ULONG($00000006); // Individual Recipient
|
|
{$EXTERNALSYM MAPI_MAILUSER}
|
|
MAPI_ATTACH = ULONG($00000007); // Attachment
|
|
{$EXTERNALSYM MAPI_ATTACH}
|
|
MAPI_DISTLIST = ULONG($00000008); // Distribution List Recipient
|
|
{$EXTERNALSYM MAPI_DISTLIST}
|
|
MAPI_PROFSECT = ULONG($00000009); // Profile Section
|
|
{$EXTERNALSYM MAPI_PROFSECT}
|
|
MAPI_STATUS = ULONG($0000000A); // Status Object
|
|
{$EXTERNALSYM MAPI_STATUS}
|
|
MAPI_SESSION = ULONG($0000000B); // Session
|
|
{$EXTERNALSYM MAPI_SESSION}
|
|
MAPI_FORMINFO = ULONG($0000000C); // Form Information
|
|
{$EXTERNALSYM MAPI_FORMINFO}
|
|
|
|
|
|
{ Maximum length of profile names and passwords, not including the null termination character. }
|
|
|
|
cchProfileNameMax = 64;
|
|
{$EXTERNALSYM cchProfileNameMax}
|
|
cchProfilePassMax = 64;
|
|
{$EXTERNALSYM cchProfilePassMax}
|
|
|
|
{ Property Types }
|
|
|
|
MV_FLAG = $1000; // Multi-value flag
|
|
{$EXTERNALSYM MV_FLAG}
|
|
|
|
PT_UNSPECIFIED = ULONG(0); // (Reserved for interface use) type doesn't matter to caller
|
|
{$EXTERNALSYM PT_UNSPECIFIED}
|
|
PT_NULL = ULONG(1); // NULL property value
|
|
{$EXTERNALSYM PT_NULL}
|
|
PT_I2 = ULONG(2); // Signed 16-bit value
|
|
{$EXTERNALSYM PT_I2}
|
|
PT_LONG = ULONG(3); // Signed 32-bit value
|
|
{$EXTERNALSYM PT_LONG}
|
|
PT_R4 = ULONG(4); // 4-byte floating point
|
|
{$EXTERNALSYM PT_R4}
|
|
PT_DOUBLE = ULONG(5); // Floating point double
|
|
{$EXTERNALSYM PT_DOUBLE}
|
|
PT_CURRENCY = ULONG(6); // Signed 64-bit int (decimal w/ 4 digits right of decimal pt)
|
|
{$EXTERNALSYM PT_CURRENCY}
|
|
PT_APPTIME = ULONG(7); // Application time
|
|
{$EXTERNALSYM PT_APPTIME}
|
|
PT_ERROR = ULONG(10); // 32-bit error value
|
|
{$EXTERNALSYM PT_ERROR}
|
|
PT_BOOLEAN = ULONG(11); // 16-bit boolean (non-zero true)
|
|
{$EXTERNALSYM PT_BOOLEAN}
|
|
PT_OBJECT = ULONG(13); // Embedded object in a property
|
|
{$EXTERNALSYM PT_OBJECT}
|
|
PT_I8 = ULONG(20); // 8-byte signed integer
|
|
{$EXTERNALSYM PT_I8}
|
|
PT_STRING8 = ULONG(30); // Null terminated 8-bit character string
|
|
{$EXTERNALSYM PT_STRING8}
|
|
PT_UNICODE = ULONG(31); // Null terminated Unicode string
|
|
{$EXTERNALSYM PT_UNICODE}
|
|
PT_SYSTIME = ULONG(64); // FILETIME 64-bit int w/ number of 100ns periods since Jan 1,1601
|
|
{$EXTERNALSYM PT_SYSTIME}
|
|
PT_CLSID = ULONG(72); // OLE GUID
|
|
{$EXTERNALSYM PT_CLSID}
|
|
PT_BINARY = ULONG(258); // Uninterpreted (counted byte array)
|
|
{$EXTERNALSYM PT_BINARY}
|
|
|
|
{ Alternate property type names for ease of use }
|
|
PT_SHORT = PT_I2;
|
|
{$EXTERNALSYM PT_SHORT}
|
|
PT_I4 = PT_LONG;
|
|
{$EXTERNALSYM PT_I4}
|
|
PT_FLOAT = PT_R4;
|
|
{$EXTERNALSYM PT_FLOAT}
|
|
PT_R8 = PT_DOUBLE;
|
|
{$EXTERNALSYM PT_R8}
|
|
PT_LONGLONG = PT_I8;
|
|
{$EXTERNALSYM PT_LONGLONG}
|
|
|
|
{* The type of a MAPI-defined string property is indirected, so
|
|
* that it defaults to Unicode string on a Unicode platform and to
|
|
* String8 on an ANSI or DBCS platform.
|
|
*
|
|
* Macros are defined here both for the property type, and for the
|
|
* field of the property value structure which should be
|
|
* dereferenced to obtain the string pointer.
|
|
}
|
|
|
|
{$IFDEF UNICODE}
|
|
PT_TSTRING = PT_UNICODE;
|
|
{$EXTERNALSYM PT_TSTRING}
|
|
PT_MV_TSTRING = MV_FLAG or PT_UNICODE;
|
|
{$EXTERNALSYM PT_MV_TSTRING}
|
|
{$ELSE}
|
|
PT_TSTRING = PT_STRING8;
|
|
{$EXTERNALSYM PT_TSTRING}
|
|
PT_MV_TSTRING = MV_FLAG or PT_STRING8;
|
|
{$EXTERNALSYM PT_MV_TSTRING}
|
|
{$ENDIF}
|
|
|
|
{* Property Tags
|
|
*
|
|
* By convention, MAPI never uses 0 or FFFF as a property ID.
|
|
* Use as null values, initializers, sentinels, or what have you.
|
|
}
|
|
|
|
PROP_TYPE_MASK = ULONG($0000FFFF); // Mask for Property type
|
|
{$EXTERNALSYM PROP_TYPE_MASK}
|
|
PROP_ID_NULL = 0;
|
|
{$EXTERNALSYM PROP_ID_NULL}
|
|
PROP_ID_INVALID = $FFFF;
|
|
{$EXTERNALSYM PROP_ID_INVALID}
|
|
PR_NULL = PT_NULL shl 16 or PROP_ID_NULL;
|
|
{$EXTERNALSYM PR_NULL}
|
|
|
|
function PROP_TYPE(ulPropTag: ULONG): ULONG;
|
|
{$EXTERNALSYM PROP_TYPE}
|
|
function PROP_ID(ulPropTag: ULONG): ULONG;
|
|
{$EXTERNALSYM PROP_ID}
|
|
function PROP_TAG(ulPropType, ulPropID: ULONG): ULONG;
|
|
{$EXTERNALSYM PROP_TAG}
|
|
function CHANGE_PROP_TYPE(ulPropTag, ulPropType: ULONG): ULONG;
|
|
{$EXTERNALSYM CHANGE_PROP_TYPE}
|
|
|
|
const
|
|
{ Multi-valued Property Types }
|
|
PT_MV_I2 = (MV_FLAG or PT_I2);
|
|
{$EXTERNALSYM PT_MV_I2}
|
|
PT_MV_LONG = (MV_FLAG or PT_LONG);
|
|
{$EXTERNALSYM PT_MV_LONG}
|
|
PT_MV_R4 = (MV_FLAG or PT_R4);
|
|
{$EXTERNALSYM PT_MV_R4}
|
|
PT_MV_DOUBLE = (MV_FLAG or PT_DOUBLE);
|
|
{$EXTERNALSYM PT_MV_DOUBLE}
|
|
PT_MV_CURRENCY = (MV_FLAG or PT_CURRENCY);
|
|
{$EXTERNALSYM PT_MV_CURRENCY}
|
|
PT_MV_APPTIME = (MV_FLAG or PT_APPTIME);
|
|
{$EXTERNALSYM PT_MV_APPTIME}
|
|
PT_MV_SYSTIME = (MV_FLAG or PT_SYSTIME);
|
|
{$EXTERNALSYM PT_MV_SYSTIME}
|
|
PT_MV_STRING8 = (MV_FLAG or PT_STRING8);
|
|
{$EXTERNALSYM PT_MV_STRING8}
|
|
PT_MV_BINARY = (MV_FLAG or PT_BINARY);
|
|
{$EXTERNALSYM PT_MV_BINARY}
|
|
PT_MV_UNICODE = (MV_FLAG or PT_UNICODE);
|
|
{$EXTERNALSYM PT_MV_UNICODE}
|
|
PT_MV_CLSID = (MV_FLAG or PT_CLSID);
|
|
{$EXTERNALSYM PT_MV_CLSID}
|
|
PT_MV_I8 = (MV_FLAG or PT_I8);
|
|
{$EXTERNALSYM PT_MV_I8}
|
|
|
|
{ Alternate property type names for ease of use }
|
|
PT_MV_SHORT = PT_MV_I2;
|
|
{$EXTERNALSYM PT_MV_SHORT}
|
|
PT_MV_I4 = PT_MV_LONG;
|
|
{$EXTERNALSYM PT_MV_I4}
|
|
PT_MV_FLOAT = PT_MV_R4;
|
|
{$EXTERNALSYM PT_MV_FLOAT}
|
|
PT_MV_R8 = PT_MV_DOUBLE;
|
|
{$EXTERNALSYM PT_MV_R8}
|
|
PT_MV_LONGLONG = PT_MV_I8;
|
|
{$EXTERNALSYM PT_MV_LONGLONG}
|
|
|
|
{* Property type reserved bits
|
|
*
|
|
* MV_INSTANCE is used as a flag in table operations to request
|
|
* that a multi-valued property be presented as a single-valued
|
|
* property appearing in multiple rows.
|
|
}
|
|
|
|
MV_INSTANCE = $2000;
|
|
{$EXTERNALSYM MV_INSTANCE}
|
|
MVI_FLAG = (MV_FLAG or MV_INSTANCE);
|
|
{$EXTERNALSYM MVI_FLAG}
|
|
function MVI_PROP(tag: ULONG): ULONG;
|
|
{$EXTERNALSYM MVI_PROP}
|
|
|
|
{ Data Structures }
|
|
|
|
{ Property Tag Array }
|
|
|
|
type
|
|
PSPropTagArray = ^TSPropTagArray;
|
|
_SPropTagArray = record
|
|
cValues: ULONG;
|
|
aulPropTag: array[0..MAPI_DIM-1] of ULONG;
|
|
end;
|
|
{$EXTERNALSYM _SPropTagArray}
|
|
TSPropTagArray = _SPropTagArray;
|
|
SPropTagArray = _SPropTagArray;
|
|
{$EXTERNALSYM SPropTagArray}
|
|
|
|
(*!!!
|
|
#define CbNewSPropTagArray(_ctag) \
|
|
(offsetof(SPropTagArray,aulPropTag) + (_ctag)*sizeof(ULONG))
|
|
#define CbSPropTagArray(_lparray) \
|
|
(offsetof(SPropTagArray,aulPropTag) + \
|
|
(UINT)((_lparray)->cValues)*sizeof(ULONG))
|
|
/* SPropTagArray
|
|
#define SizedSPropTagArray(_ctag, _name) \
|
|
struct _SPropTagArray_ ## _name \
|
|
{ \
|
|
ULONG cValues; \
|
|
ULONG aulPropTag[_ctag]; \
|
|
} _name
|
|
*)
|
|
|
|
{ 32-bit CURRENCY definition stolen from oaidl.h }
|
|
|
|
{ real definition that makes the C++ compiler happy }
|
|
|
|
type
|
|
PCY = ^TCY;
|
|
tagCY = record
|
|
case Integer of
|
|
1: (
|
|
{$IFDEF _MAC}
|
|
Hi : Longint;
|
|
Lo : Longint;
|
|
{$ELSE}
|
|
Lo : Longint;
|
|
Hi : Longint;
|
|
{$ENDIF}
|
|
);
|
|
2: (
|
|
int64: LONGLONG;
|
|
);
|
|
end;
|
|
{$EXTERNALSYM tagCY}
|
|
TCY = tagCY;
|
|
CY = tagCY;
|
|
{$EXTERNALSYM CY}
|
|
|
|
TCURRENCY = TCY;
|
|
|
|
PSBinary = ^TSBinary;
|
|
_SBinary = record
|
|
cb: ULONG;
|
|
lpb: Pointer;
|
|
end;
|
|
{$EXTERNALSYM _SBinary}
|
|
TSBinary = _SBinary;
|
|
SBinary = _SBinary;
|
|
{$EXTERNALSYM SBinary}
|
|
|
|
PSShortArray = ^TSShortArray;
|
|
_SShortArray = record
|
|
cValues: ULONG;
|
|
lpi: ^SmallInt;
|
|
end;
|
|
{$EXTERNALSYM _SShortArray}
|
|
TSShortArray = _SShortArray;
|
|
SShortArray = _SShortArray;
|
|
{$EXTERNALSYM SShortArray}
|
|
|
|
PSGuidArray = ^TSGuidArray;
|
|
_SGuidArray = record
|
|
cValues: ULONG;
|
|
lpguid: ^TGUID;
|
|
end;
|
|
{$EXTERNALSYM _SGuidArray}
|
|
TSGuidArray = _SGuidArray;
|
|
SGuidArray = _SGuidArray;
|
|
{$EXTERNALSYM SGuidArray}
|
|
|
|
PSRealArray = ^TSRealArray;
|
|
_SRealArray = record
|
|
cValues: ULONG;
|
|
lpflt: ^Single;
|
|
end;
|
|
{$EXTERNALSYM _SRealArray}
|
|
TSRealArray = _SRealArray;
|
|
SRealArray = _SRealArray;
|
|
{$EXTERNALSYM SRealArray}
|
|
|
|
PSLongArray = ^TSLongArray;
|
|
_SLongArray = record
|
|
cValues: ULONG;
|
|
lpl: ^LongInt;
|
|
end;
|
|
{$EXTERNALSYM _SLongArray}
|
|
TSLongArray = _SLongArray;
|
|
SLongArray = _SLongArray;
|
|
{$EXTERNALSYM SLongArray}
|
|
|
|
PSLargeIntegerArray = ^TSLargeIntegerArray;
|
|
_SLargeIntegerArray = record
|
|
cValues: ULONG;
|
|
lpli: ^TLargeInteger;
|
|
end;
|
|
{$EXTERNALSYM _SLargeIntegerArray}
|
|
TSLargeIntegerArray = _SLargeIntegerArray;
|
|
SLargeIntegerArray = _SLargeIntegerArray;
|
|
{$EXTERNALSYM SLargeIntegerArray}
|
|
|
|
PSDateTimeArray = ^TSDateTimeArray;
|
|
_SDateTimeArray = record
|
|
cValues: ULONG;
|
|
lpft: ^TFileTime;
|
|
end;
|
|
{$EXTERNALSYM _SDateTimeArray}
|
|
TSDateTimeArray = _SDateTimeArray;
|
|
SDateTimeArray = _SDateTimeArray;
|
|
{$EXTERNALSYM SDateTimeArray}
|
|
|
|
PSAppTimeArray = ^TSAppTimeArray;
|
|
_SAppTimeArray = record
|
|
cValues: ULONG;
|
|
lpat: ^Double;
|
|
end;
|
|
{$EXTERNALSYM _SAppTimeArray}
|
|
TSAppTimeArray = _SAppTimeArray;
|
|
SAppTimeArray = _SAppTimeArray;
|
|
{$EXTERNALSYM SAppTimeArray}
|
|
|
|
PSCurrencyArray = ^TSCurrencyArray;
|
|
_SCurrencyArray = record
|
|
cValues: ULONG;
|
|
lpcur: ^Currency;
|
|
end;
|
|
{$EXTERNALSYM _SCurrencyArray}
|
|
TSCurrencyArray = _SCurrencyArray;
|
|
SCurrencyArray = _SCurrencyArray;
|
|
{$EXTERNALSYM SCurrencyArray}
|
|
|
|
PSBinaryArray = ^TSBinaryArray;
|
|
_SBinaryArray = record
|
|
cValues: ULONG;
|
|
lpbin: PSBinary;
|
|
end;
|
|
{$EXTERNALSYM _SBinaryArray}
|
|
TSBinaryArray = _SBinaryArray;
|
|
SBinaryArray = _SBinaryArray;
|
|
{$EXTERNALSYM SBinaryArray}
|
|
|
|
PSDoubleArray = ^TSDoubleArray;
|
|
_SDoubleArray = record
|
|
cValues: ULONG;
|
|
lpdbl: ^Double;
|
|
end;
|
|
{$EXTERNALSYM _SDoubleArray}
|
|
TSDoubleArray = _SDoubleArray;
|
|
SDoubleArray = _SDoubleArray;
|
|
{$EXTERNALSYM SDoubleArray}
|
|
|
|
PSWStringArray = ^TSWStringArray;
|
|
_SWStringArray = record
|
|
cValues: ULONG;
|
|
lppszW: ^LPWSTR;
|
|
end;
|
|
{$EXTERNALSYM _SWStringArray}
|
|
TSWStringArray = _SWStringArray;
|
|
SWStringArray = _SWStringArray;
|
|
{$EXTERNALSYM SWStringArray}
|
|
|
|
PSLPSTRArray = ^TSLPSTRArray;
|
|
_SLPSTRArray = record
|
|
cValues: ULONG;
|
|
lppszA: ^LPSTR;
|
|
end;
|
|
{$EXTERNALSYM _SLPSTRArray}
|
|
TSLPSTRArray = _SLPSTRArray;
|
|
SLPSTRArray = _SLPSTRArray;
|
|
{$EXTERNALSYM SLPSTRArray}
|
|
|
|
__UPV = record
|
|
case Integer of
|
|
0: (i: SmallInt;); // case PT_I2
|
|
1: (l: LongInt;); // case PT_LONG
|
|
2: (ul: ULONG;); // alias for PT_LONG
|
|
3: (flt: Single;); // case PT_R4
|
|
4: (dbl: Double;); // case PT_DOUBLE
|
|
5: (b: Word;); // case PT_BOOLEAN
|
|
6: (cur: Currency;); // case PT_CURRENCY
|
|
7: (at: Double;); // case PT_APPTIME
|
|
8: (ft: TFileTime;); // case PT_SYSTIME
|
|
9: (lpszA: LPSTR;); // case PT_STRING8
|
|
10: (bin: TSBinary;); // case PT_BINARY
|
|
11: (lpszW: LPWSTR;); // case PT_UNICODE
|
|
12: (lpguid: PGUID;); // case PT_CLSID
|
|
13: (li: TLargeInteger;); // case PT_I8
|
|
14: (MVi: TSShortArray;); // case PT_MV_I2
|
|
15: (MVl: TSLongArray;); // case PT_MV_LONG
|
|
16: (MVflt: TSRealArray;); // case PT_MV_R4
|
|
17: (MVdbl: TSDoubleArray;); // case PT_MV_DOUBLE
|
|
18: (MVcur: TSCurrencyArray;); // case PT_MV_CURRENCY
|
|
19: (MVat: TSAppTimeArray;); // case PT_MV_APPTIME
|
|
20: (MVft: TSDateTimeArray;); // case PT_MV_SYSTIME
|
|
21: (MVbin: TSBinaryArray;); // case PT_MV_BINARY
|
|
22: (MVszA: TSLPSTRArray;); // case PT_MV_STRING8
|
|
23: (MVszW: TSWStringArray;); // case PT_MV_UNICODE
|
|
24: (MVguid: TSGuidArray;); // case PT_MV_CLSID
|
|
25: (MVli: TSLargeIntegerArray;); // case PT_MV_I8
|
|
26: (err: SCODE;); // case PT_ERROR
|
|
27: (x: LongInt;); // case PT_NULL, PT_OBJECT (no usable value) *
|
|
end;
|
|
{$EXTERNALSYM __UPV}
|
|
_PV = __UPV;
|
|
{$EXTERNALSYM _PV}
|
|
|
|
PSPropValue = ^TSPropValue;
|
|
_SPropValue = record
|
|
ulPropTag: ULONG;
|
|
dwAlignPad: ULONG;
|
|
Value: _PV;
|
|
end;
|
|
{$EXTERNALSYM _SPropValue}
|
|
TSPropValue = _SPropValue;
|
|
SPropValue = _SPropValue;
|
|
{$EXTERNALSYM SPropValue}
|
|
|
|
{ Property Problem and Property Problem Arrays }
|
|
|
|
PSPropProblem = ^TSPropProblem;
|
|
_SPropProblem = record
|
|
ulIndex: ULONG;
|
|
ulPropTag: ULONG;
|
|
_scode: SCODE;
|
|
end;
|
|
{$EXTERNALSYM _SPropProblem}
|
|
TSPropProblem = _SPropProblem;
|
|
SPropProblem = _SPropProblem;
|
|
{$EXTERNALSYM SPropProblem}
|
|
|
|
PSPropProblemArray = ^TSPropProblemArray;
|
|
_SPropProblemArray = record
|
|
cProblem: ULONG;
|
|
aProblem: array[0..MAPI_DIM-1] of TSPropProblem;
|
|
end;
|
|
{$EXTERNALSYM _SPropProblemArray}
|
|
TSPropProblemArray = _SPropProblemArray;
|
|
SPropProblemArray = _SPropProblemArray;
|
|
{$EXTERNALSYM SPropProblemArray}
|
|
|
|
(*!!!
|
|
#define CbNewSPropProblemArray(_cprob) \
|
|
(offsetof(SPropProblemArray,aProblem) + (_cprob)*sizeof(SPropProblem))
|
|
#define CbSPropProblemArray(_lparray) \
|
|
(offsetof(SPropProblemArray,aProblem) + \
|
|
(UINT) ((_lparray)->cProblem*sizeof(SPropProblem)))
|
|
#define SizedSPropProblemArray(_cprob, _name) \
|
|
struct _SPropProblemArray_ ## _name \
|
|
{ \
|
|
ULONG cProblem; \
|
|
SPropProblem aProblem[_cprob]; \
|
|
} _name
|
|
*)
|
|
|
|
{ ENTRYLIST }
|
|
|
|
PEntryList = ^TEntryList;
|
|
ENTRYLIST = TSBinaryArray;
|
|
{$EXTERNALSYM ENTRYLIST}
|
|
TEntryList = ENTRYLIST;
|
|
|
|
{ FLATENTRYLIST }
|
|
{ MTSID }
|
|
{ FLATMTSIDLIST }
|
|
|
|
PFlatEntry = ^TFlatEntry;
|
|
FLATENTRY = record
|
|
cb: ULONG;
|
|
abEntry: array[0..MAPI_DIM-1] of Byte;
|
|
end;
|
|
{$EXTERNALSYM FLATENTRY}
|
|
TFlatEntry = FLATENTRY;
|
|
|
|
PFlatEntryList = ^TFlatEntryList;
|
|
FLATENTRYLIST = record
|
|
cEntries: ULONG;
|
|
cbEntries: ULONG;
|
|
abEntries: array[0..MAPI_DIM-1] of Byte;
|
|
end;
|
|
{$EXTERNALSYM FLATENTRYLIST}
|
|
TFlatEntryList = FLATENTRYLIST;
|
|
|
|
PMTSID = ^TMTSID;
|
|
TMTSID = record
|
|
cb: ULONG;
|
|
ab: array[0..MAPI_DIM-1] of Byte;
|
|
end;
|
|
{$EXTERNALSYM TMTSID}
|
|
|
|
PFlatMtsIdList = ^TFlatMtsIdList;
|
|
FLATMTSIDLIST = record
|
|
cMTSIDs: ULONG;
|
|
cbMTSIDs: ULONG;
|
|
abMTSIDs: array[0..MAPI_DIM-1] of Byte;
|
|
end;
|
|
{$EXTERNALSYM FLATMTSIDLIST}
|
|
TFlatMtsIdList = FLATMTSIDLIST;
|
|
|
|
(*!!!
|
|
#define CbNewFLATENTRY(_cb) (offsetof(FLATENTRY,abEntry) + (_cb))
|
|
#define CbFLATENTRY(_lpentry) (offsetof(FLATENTRY,abEntry) + (_lpentry)->cb)
|
|
#define CbNewFLATENTRYLIST(_cb) (offsetof(FLATENTRYLIST,abEntries) + (_cb))
|
|
#define CbFLATENTRYLIST(_lplist) (offsetof(FLATENTRYLIST,abEntries) + (_lplist)->cbEntries)
|
|
#define CbNewMTSID(_cb) (offsetof(MTSID,ab) + (_cb))
|
|
#define CbMTSID(_lpentry) (offsetof(MTSID,ab) + (_lpentry)->cb)
|
|
#define CbNewFLATMTSIDLIST(_cb) (offsetof(FLATMTSIDLIST,abMTSIDs) + (_cb))
|
|
#define CbFLATMTSIDLIST(_lplist) (offsetof(FLATMTSIDLIST,abMTSIDs) + (_lplist)->cbMTSIDs)
|
|
/* No SizedXXX macros for these types.
|
|
*)
|
|
|
|
PAdrEntry = ^TAdrEntry;
|
|
_ADRENTRY = record
|
|
ulReserved1: ULONG; // Never used
|
|
cValues: ULONG;
|
|
rgPropVals: PSPropValue;
|
|
end;
|
|
{$EXTERNALSYM _ADRENTRY}
|
|
TAdrEntry = _ADRENTRY;
|
|
ADRENTRY = _ADRENTRY;
|
|
{$EXTERNALSYM ADRENTRY}
|
|
|
|
PAdrList = ^TAdrList;
|
|
_ADRLIST = record
|
|
cEntries: ULONG;
|
|
aEntries: array[0..MAPI_DIM-1] of TAdrEntry;
|
|
end;
|
|
{$EXTERNALSYM _ADRLIST}
|
|
TAdrList = _ADRLIST;
|
|
ADRLIST = _ADRLIST;
|
|
{$EXTERNALSYM ADRLIST}
|
|
|
|
(*!!!
|
|
#define CbNewADRLIST(_centries) \
|
|
(offsetof(ADRLIST,aEntries) + (_centries)*sizeof(ADRENTRY))
|
|
#define CbADRLIST(_lpadrlist) \
|
|
(offsetof(ADRLIST,aEntries) + (UINT)(_lpadrlist)->cEntries*sizeof(ADRENTRY))
|
|
#define SizedADRLIST(_centries, _name) \
|
|
struct _ADRLIST_ ## _name \
|
|
{ \
|
|
ULONG cEntries; \
|
|
ADRENTRY aEntries[_centries]; \
|
|
} _name
|
|
*)
|
|
|
|
PSPropsArray = ^TSPropsArray;
|
|
TSPropsArray = array[Byte] of TSPropValue;
|
|
{$NODEFINE TSPropsArray}
|
|
|
|
PSRow = ^TSRow;
|
|
_SRow = record
|
|
ulAdrEntryPad: ULONG; // Pad so SRow's can map to ADRENTRY's
|
|
cValues: ULONG; // Count of property values
|
|
lpProps: PSPropsArray ; // Property value array
|
|
end;
|
|
{$EXTERNALSYM _SRow}
|
|
TSRow = _SRow;
|
|
SRow = _SRow;
|
|
{$EXTERNALSYM SRow}
|
|
|
|
PSRowSet = ^TSRowSet;
|
|
_SRowSet = record
|
|
cRows: ULONG; // Count of rows
|
|
aRow: array[0..MAPI_DIM-1] of TSRow; // Array of rows
|
|
end;
|
|
{$EXTERNALSYM _SRowSet}
|
|
TSRowSet = _SRowSet;
|
|
SRowSet = _SRowSet;
|
|
{$EXTERNALSYM SRowSet}
|
|
|
|
(*!!!
|
|
#define CbNewSRowSet(_crow) (offsetof(SRowSet,aRow) + (_crow)*sizeof(SRow))
|
|
#define CbSRowSet(_lprowset) (offsetof(SRowSet,aRow) + \
|
|
(UINT)((_lprowset)->cRows*sizeof(SRow)))
|
|
#define SizedSRowSet(_crow, _name) \
|
|
struct _SRowSet_ ## _name \
|
|
{ \
|
|
ULONG cRows; \
|
|
SRow aRow[_crow]; \
|
|
} _name
|
|
*)
|
|
|
|
{ MAPI Allocation Routines ------------------------------------------------ }
|
|
|
|
type
|
|
PAllocateBuffer = ^TAllocateBuffer;
|
|
ALLOCATEBUFFER = function (cbSize: ULONG; var lppBuffer: Pointer): SCODE; stdcall;
|
|
{$EXTERNALSYM ALLOCATEBUFFER}
|
|
TAllocateBuffer = ALLOCATEBUFFER;
|
|
|
|
PAllocateMore = ^TAllocateMore;
|
|
ALLOCATEMORE = function (cbSize: ULONG; lpObject: Pointer; var lppBuffer: Pointer): SCODE; stdcall;
|
|
{$EXTERNALSYM ALLOCATEMORE}
|
|
TAllocateMore = ALLOCATEMORE;
|
|
|
|
PFreeBuffer = ^TFreeBuffer;
|
|
FREEBUFFER = function (lpBuffer: Pointer): ULONG; stdcall;
|
|
{$EXTERNALSYM FREEBUFFER}
|
|
TFreeBuffer = FREEBUFFER;
|
|
|
|
{ Pointers to MAPI Interfaces --------------------------------------------- }
|
|
|
|
PCIID = ^TIID;
|
|
|
|
{ Extended MAPI Error Information ----------------------------------------- }
|
|
|
|
PMapiError = ^TMapiError;
|
|
_MAPIERROR = record
|
|
ulVersion: ULONG;
|
|
lpszError: LPTSTR;
|
|
lpszComponent: LPTSTR;
|
|
ulLowLevelError: ULONG;
|
|
ulContext: ULONG;
|
|
end;
|
|
{$EXTERNALSYM _MAPIERROR}
|
|
TMapiError = _MAPIERROR;
|
|
MAPIERROR = _MAPIERROR;
|
|
{$EXTERNALSYM MAPIERROR}
|
|
|
|
{ IMAPIAdviseSink Interface ----------------------------------------------- }
|
|
|
|
{*
|
|
* Notification event types. The event types can be combined in a bitmask
|
|
* for filtering. Each one has a parameter structure associated with it:
|
|
*
|
|
* fnevCriticalError ERROR_NOTIFICATION
|
|
* fnevNewMail NEWMAIL_NOTIFICATION
|
|
* fnevObjectCreated OBJECT_NOTIFICATION
|
|
* fnevObjectDeleted OBJECT_NOTIFICATION
|
|
* fnevObjectModified OBJECT_NOTIFICATION
|
|
* fnevObjectCopied OBJECT_NOTIFICATION
|
|
* fnevSearchComplete OBJECT_NOTIFICATION
|
|
* fnevTableModified TABLE_NOTIFICATION
|
|
* fnevStatusObjectModified OBJECT_NOTIFICATION
|
|
*
|
|
* fnevExtended EXTENDED_NOTIFICATION
|
|
}
|
|
|
|
const
|
|
fnevCriticalError = ULONG($00000001);
|
|
{$EXTERNALSYM fnevCriticalError}
|
|
fnevNewMail = ULONG($00000002);
|
|
{$EXTERNALSYM fnevNewMail}
|
|
fnevObjectCreated = ULONG($00000004);
|
|
{$EXTERNALSYM fnevObjectCreated}
|
|
fnevObjectDeleted = ULONG($00000008);
|
|
{$EXTERNALSYM fnevObjectDeleted}
|
|
fnevObjectModified = ULONG($00000010);
|
|
{$EXTERNALSYM fnevObjectModified}
|
|
fnevObjectMoved = ULONG($00000020);
|
|
{$EXTERNALSYM fnevObjectMoved}
|
|
fnevObjectCopied = ULONG($00000040);
|
|
{$EXTERNALSYM fnevObjectCopied}
|
|
fnevSearchComplete = ULONG($00000080);
|
|
{$EXTERNALSYM fnevSearchComplete}
|
|
fnevTableModified = ULONG($00000100);
|
|
{$EXTERNALSYM fnevTableModified}
|
|
fnevStatusObjectModified = ULONG($00000200);
|
|
{$EXTERNALSYM fnevStatusObjectModified}
|
|
fnevReservedForMapi = ULONG($40000000);
|
|
{$EXTERNALSYM fnevReservedForMapi}
|
|
fnevExtended = ULONG($80000000);
|
|
{$EXTERNALSYM fnevExtended}
|
|
|
|
{ TABLE_NOTIFICATION event types passed in ulTableEvent }
|
|
|
|
TABLE_CHANGED = 1;
|
|
{$EXTERNALSYM TABLE_CHANGED}
|
|
TABLE_ERROR = 2;
|
|
{$EXTERNALSYM TABLE_ERROR}
|
|
TABLE_ROW_ADDED = 3;
|
|
{$EXTERNALSYM TABLE_ROW_ADDED}
|
|
TABLE_ROW_DELETED = 4;
|
|
{$EXTERNALSYM TABLE_ROW_DELETED}
|
|
TABLE_ROW_MODIFIED = 5;
|
|
{$EXTERNALSYM TABLE_ROW_MODIFIED}
|
|
TABLE_SORT_DONE = 6;
|
|
{$EXTERNALSYM TABLE_SORT_DONE}
|
|
TABLE_RESTRICT_DONE = 7;
|
|
{$EXTERNALSYM TABLE_RESTRICT_DONE}
|
|
TABLE_SETCOL_DONE = 8;
|
|
{$EXTERNALSYM TABLE_SETCOL_DONE}
|
|
TABLE_RELOAD = 9;
|
|
{$EXTERNALSYM TABLE_RELOAD}
|
|
|
|
{ Event Structures }
|
|
|
|
type
|
|
PErrorNotification = ^TErrorNotification;
|
|
_ERROR_NOTIFICATION = record
|
|
cbEntryID: ULONG;
|
|
lpEntryID: PEntryID;
|
|
scode: SCODE;
|
|
ulFlags: ULONG; // 0 or MAPI_UNICODE
|
|
lpMAPIError: PMapiError; // Detailed error information
|
|
end;
|
|
{$EXTERNALSYM _ERROR_NOTIFICATION}
|
|
TErrorNotification = _ERROR_NOTIFICATION;
|
|
ERROR_NOTIFICATION = _ERROR_NOTIFICATION;
|
|
{$EXTERNALSYM ERROR_NOTIFICATION}
|
|
|
|
PNewMailNotification = ^TNewMailNotification;
|
|
_NEWMAIL_NOTIFICATION = record
|
|
cbEntryID: ULONG;
|
|
lpEntryID: PEntryID; // identifies the new message
|
|
cbParentID: ULONG;
|
|
lpParentID: PEntryID; // identifies the folder it lives in
|
|
ulFlags: ULONG; // 0 or MAPI_UNICODE
|
|
lpszMessageClass: LPTSTR; // message class (UNICODE or string8)
|
|
ulMessageFlags: ULONG; // copy of PR_MESSAGE_FLAGS
|
|
end;
|
|
{$EXTERNALSYM _NEWMAIL_NOTIFICATION}
|
|
TNewMailNotification = _NEWMAIL_NOTIFICATION;
|
|
NEWMAIL_NOTIFICATION = _NEWMAIL_NOTIFICATION;
|
|
{$EXTERNALSYM NEWMAIL_NOTIFICATION}
|
|
|
|
PObjectNotification = ^TObjectNotification;
|
|
_OBJECT_NOTIFICATION = record
|
|
cbEntryID: ULONG;
|
|
lpEntryID: PEntryID; // EntryID of object
|
|
ulObjType: ULONG; // Type of object
|
|
cbParentID: ULONG;
|
|
lpParentID: PEntryID; // EntryID of parent object
|
|
cbOldID: ULONG;
|
|
lpOldID: PEntryID; // EntryID of old object
|
|
cbOldParentID: ULONG;
|
|
lpOldParentID: PEntryID; // EntryID of old parent
|
|
lpPropTagArray: PSPropTagArray;
|
|
end;
|
|
{$EXTERNALSYM _OBJECT_NOTIFICATION}
|
|
TObjectNotification = _OBJECT_NOTIFICATION;
|
|
OBJECT_NOTIFICATION = _OBJECT_NOTIFICATION;
|
|
{$EXTERNALSYM OBJECT_NOTIFICATION}
|
|
|
|
PTableNotification = ^TTableNotification;
|
|
_TABLE_NOTIFICATION = record
|
|
ulTableEvent: ULONG; // Identifies WHICH table event
|
|
hResult: HRESULT; // Value for TABLE_ERROR
|
|
propIndex: TSPropValue; // This row's "index property"
|
|
propPrior: TSPropValue; // Preceding row's "index property"
|
|
row: TSRow; // New data of added/modified row
|
|
ulPad: ULONG; // Force to 8-byte boundary
|
|
end;
|
|
{$EXTERNALSYM _TABLE_NOTIFICATION}
|
|
TTableNotification = _TABLE_NOTIFICATION;
|
|
TABLE_NOTIFICATION = _TABLE_NOTIFICATION;
|
|
{$EXTERNALSYM TABLE_NOTIFICATION}
|
|
|
|
PExtendedNotification = ^TExtendedNotification;
|
|
_EXTENDED_NOTIFICATION = record
|
|
ulEvent: ULONG; // extended event code
|
|
cb: ULONG; // size of event parameters
|
|
pbEventParameters: Pointer; // event parameters
|
|
end;
|
|
{$EXTERNALSYM _EXTENDED_NOTIFICATION}
|
|
TExtendedNotification = _EXTENDED_NOTIFICATION;
|
|
EXTENDED_NOTIFICATION = _EXTENDED_NOTIFICATION;
|
|
{$EXTERNALSYM EXTENDED_NOTIFICATION}
|
|
|
|
PStatusObjectNotification = ^TStatusObjectNotification;
|
|
STATUS_OBJECT_NOTIFICATION = record
|
|
cbEntryID: ULONG;
|
|
lpEntryID: PEntryID;
|
|
cValues: ULONG;
|
|
lpPropVals: PSPropValue;
|
|
end;
|
|
TStatusObjectNotification = STATUS_OBJECT_NOTIFICATION;
|
|
{$EXTERNALSYM STATUS_OBJECT_NOTIFICATION}
|
|
|
|
PNotification = ^TNotification;
|
|
_NOTIFICATION = record
|
|
ulEventType: ULONG; // notification type, i.e. fnevSomething
|
|
ulAlignPad: ULONG; // Force to 8-byte boundary
|
|
case Integer of
|
|
1: (err: TErrorNotification;);
|
|
2: (newmail: TNewMailNotification;);
|
|
3: (obj: TObjectNotification;);
|
|
4: (tab: TTableNotification;);
|
|
5: (ext: TExtendedNotification;);
|
|
6: (statobj: TStatusObjectNotification;);
|
|
end;
|
|
{$EXTERNALSYM _NOTIFICATION}
|
|
TNotification = _NOTIFICATION;
|
|
NOTIFICATION = _NOTIFICATION;
|
|
{$EXTERNALSYM NOTIFICATION}
|
|
|
|
{ Interface used for registering and issuing notification callbacks. }
|
|
|
|
IMAPIAdviseSink = interface(IUnknown)
|
|
function OnNotify(cNotif: ULONG; lpNotifications: PNotification): ULONG; stdcall;
|
|
end;
|
|
{$EXTERNALSYM IMAPIAdviseSink}
|
|
|
|
{ Callback function type for MAPIAllocAdviseSink }
|
|
|
|
PNotifyCallback = ^TNotifyCallback;
|
|
NOTIFCALLBACK = function (lpvContext: Pointer; cNotification: ULONG;
|
|
lpNotifications: PNotification): Integer; stdcall;
|
|
{$EXTERNALSYM NOTIFCALLBACK}
|
|
TNotifyCallback = NOTIFCALLBACK;
|
|
|
|
{ IMAPIProgress Interface ------------------------------------------------- }
|
|
|
|
{ Flag values for the progress indicator }
|
|
|
|
const
|
|
MAPI_TOP_LEVEL = ULONG($00000001);
|
|
{$EXTERNALSYM MAPI_TOP_LEVEL}
|
|
|
|
type
|
|
IMAPIProgress = interface(IUnknown)
|
|
function Progress(ulValue, ulCount, ulTotal: ULONG): HResult; stdcall;
|
|
function GetFlags(var lpulFlags: ULONG): HResult; stdcall;
|
|
function GetMax(var lpulMax: ULONG): HResult; stdcall;
|
|
function GetMin(var lpulMin: ULONG): HResult; stdcall;
|
|
function SetLimits(lpulMin, lpulMax, lpulFlags: PULONG): HResult; stdcall;
|
|
end;
|
|
{$EXTERNALSYM IMAPIProgress}
|
|
|
|
{ IMAPIProp Interface ----------------------------------------------------- }
|
|
|
|
const
|
|
MAPI_ERROR_VERSION = $00000000;
|
|
{$EXTERNALSYM MAPI_ERROR_VERSION}
|
|
|
|
{ SaveChanges }
|
|
|
|
KEEP_OPEN_READONLY = ULONG($00000001);
|
|
{$EXTERNALSYM KEEP_OPEN_READONLY}
|
|
KEEP_OPEN_READWRITE = ULONG($00000002);
|
|
{$EXTERNALSYM KEEP_OPEN_READWRITE}
|
|
FORCE_SAVE = ULONG($00000004);
|
|
{$EXTERNALSYM FORCE_SAVE}
|
|
// define MAPI_DEFERRED_ERRORS ((ULONG) 0x00000008) below
|
|
|
|
{ OpenProperty - ulFlags }
|
|
//***** MAPI_MODIFY ((ULONG) 0x00000001) above
|
|
MAPI_CREATE = ULONG($00000002);
|
|
{$EXTERNALSYM MAPI_CREATE}
|
|
STREAM_APPEND = ULONG($00000004);
|
|
{$EXTERNALSYM STREAM_APPEND}
|
|
//***** MAPI_DEFERRED_ERRORS ((ULONG) 0x00000008) below
|
|
|
|
{ OpenProperty - ulInterfaceOptions, IID_IMAPITable }
|
|
//***** MAPI_UNICODE ((ULONG) 0x80000000) above
|
|
|
|
{ CopyTo, CopyProps }
|
|
|
|
MAPI_MOVE = ULONG($00000001);
|
|
{$EXTERNALSYM MAPI_MOVE}
|
|
MAPI_NOREPLACE = ULONG($00000002);
|
|
{$EXTERNALSYM MAPI_NOREPLACE}
|
|
MAPI_DECLINE_OK = ULONG($00000004);
|
|
{$EXTERNALSYM MAPI_DECLINE_OK}
|
|
|
|
MAPI_DIALOG = ULONG($00000008);
|
|
{$EXTERNALSYM MAPI_DIALOG}
|
|
|
|
MAPI_USE_DEFAULT = $00000040; // Use default profile in logon
|
|
{$EXTERNALSYM MAPI_USE_DEFAULT}
|
|
|
|
{ Flags used in GetIDsFromNames }
|
|
//***** MAPI_CREATE ((ULONG) 0x00000002) above
|
|
|
|
{ Flags used in GetNamesFromIDs (bit fields) }
|
|
MAPI_NO_STRINGS = ULONG($00000001);
|
|
{$EXTERNALSYM MAPI_NO_STRINGS}
|
|
MAPI_NO_IDS = ULONG($00000002);
|
|
{$EXTERNALSYM MAPI_NO_IDS}
|
|
|
|
{ Union discriminator }
|
|
MNID_ID = 0;
|
|
{$EXTERNALSYM MNID_ID}
|
|
MNID_STRING = 1;
|
|
{$EXTERNALSYM MNID_STRING}
|
|
|
|
type
|
|
PMapiNameID = ^TMapiNameID;
|
|
_MAPINAMEID = record
|
|
lpguid: PGUID;
|
|
ulKind: ULONG;
|
|
case Integer of
|
|
MNID_ID: (lID: LongInt;);
|
|
MNID_STRING: (lpwstrName: LPWSTR;);
|
|
end;
|
|
{$EXTERNALSYM _MAPINAMEID}
|
|
TMapiNameID = _MAPINAMEID;
|
|
MAPINAMEID = _MAPINAMEID;
|
|
{$EXTERNALSYM MAPINAMEID}
|
|
|
|
IMAPIProp = interface(IUnknown)
|
|
function GetLastError(hResult: HRESULT; ulFlags: ULONG;
|
|
var lppMAPIError: TMapiError): HResult; stdcall;
|
|
function SaveChanges(ulFlags: ULONG): HResult; stdcall;
|
|
function GetProps(lpPropTagArray: PSPropTagArray; ulFlags: ULONG;
|
|
lpcValues: PULONG; var lppPropArray: PSPropValue): HResult; stdcall;
|
|
function GetPropList(ulFlags: ULONG; var lppPropTagArray: PSPropTagArray): HResult; stdcall;
|
|
function OpenProperty(ulPropTag: ULONG; const lpiid: TIID;
|
|
ulInterfaceOptions, ulFlags: ULONG; out lppUnk: IUnknown): HResult; stdcall;
|
|
function SetProps(cValues: ULONG; lpPropArray: PSPropValue;
|
|
lppProblems: PSPropProblemArray): HResult; stdcall;
|
|
function DeleteProps(lpPropTagArray: PSPropTagArray;
|
|
lppProblems: PSPropProblemArray): HResult; stdcall;
|
|
function CopyTo(ciidExclude: ULONG; rgiidExclude: PCIID;
|
|
lpExcludeProps: PSPropTagArray; ulUIParam: ULONG; lpProgress: IMAPIProgress;
|
|
lpInterface: PIID; lpDestObj: Pointer; ulFlags: ULONG;
|
|
lppProblems: PSPropProblemArray): HResult; stdcall;
|
|
function CopyProps(lpIncludeProps: PSPropTagArray; ulUIParam: ULONG;
|
|
lpProgress: IMAPIProgress; lpInterface: PIID; lpDestObj: Pointer;
|
|
ulFlags: ULONG; lppProblems: PSPropProblemArray): HResult; stdcall;
|
|
function GetNamesFromIDs(lppPropTags: PSPropTagArray; lpPropSetGuid: PGUID;
|
|
ulFlags: ULONG; var lpcPropNames: ULONG; var lpppPropNames: TMapiNameID): HResult; stdcall;
|
|
function GetIDsFromNames(cPropNames: ULONG; lppPropNames: PMapiNameID;
|
|
ulFlags: ULONG; var lppPropTags: PSPropTagArray): HResult; stdcall;
|
|
end;
|
|
{$EXTERNALSYM IMAPIProp}
|
|
|
|
{ IMAPITable Interface ---------------------------------------------------- }
|
|
|
|
{ Table status }
|
|
|
|
const
|
|
TBLSTAT_COMPLETE = ULONG(0);
|
|
{$EXTERNALSYM TBLSTAT_COMPLETE}
|
|
TBLSTAT_QCHANGED = ULONG(7);
|
|
{$EXTERNALSYM TBLSTAT_QCHANGED}
|
|
TBLSTAT_SORTING = ULONG(9);
|
|
{$EXTERNALSYM TBLSTAT_SORTING}
|
|
TBLSTAT_SORT_ERROR = ULONG(10);
|
|
{$EXTERNALSYM TBLSTAT_SORT_ERROR}
|
|
TBLSTAT_SETTING_COLS = ULONG(11);
|
|
{$EXTERNALSYM TBLSTAT_SETTING_COLS}
|
|
TBLSTAT_SETCOL_ERROR = ULONG(13);
|
|
{$EXTERNALSYM TBLSTAT_SETCOL_ERROR}
|
|
TBLSTAT_RESTRICTING = ULONG(14);
|
|
{$EXTERNALSYM TBLSTAT_RESTRICTING}
|
|
TBLSTAT_RESTRICT_ERROR = ULONG(15);
|
|
{$EXTERNALSYM TBLSTAT_RESTRICT_ERROR}
|
|
|
|
{ Table Type }
|
|
|
|
TBLTYPE_SNAPSHOT = ULONG(0);
|
|
{$EXTERNALSYM TBLTYPE_SNAPSHOT}
|
|
TBLTYPE_KEYSET = ULONG(1);
|
|
{$EXTERNALSYM TBLTYPE_KEYSET}
|
|
TBLTYPE_DYNAMIC = ULONG(2);
|
|
{$EXTERNALSYM TBLTYPE_DYNAMIC}
|
|
|
|
{ Sort order }
|
|
|
|
{ bit 0: set if descending, clear if ascending }
|
|
|
|
TABLE_SORT_ASCEND = ULONG($00000000);
|
|
{$EXTERNALSYM TABLE_SORT_ASCEND}
|
|
TABLE_SORT_DESCEND = ULONG($00000001);
|
|
{$EXTERNALSYM TABLE_SORT_DESCEND}
|
|
TABLE_SORT_COMBINE = ULONG($00000002);
|
|
{$EXTERNALSYM TABLE_SORT_COMBINE}
|
|
|
|
{ Data structures }
|
|
|
|
type
|
|
PSSortOrder = ^TSSortOrder;
|
|
_SSortOrder = record
|
|
ulPropTag: ULONG; // Column to sort on
|
|
ulOrder: ULONG; // Ascending, descending, combine to left
|
|
end;
|
|
{$EXTERNALSYM _SSortOrder}
|
|
TSSortOrder = _SSortOrder;
|
|
SSortOrder = _SSortOrder;
|
|
{$EXTERNALSYM SSortOrder}
|
|
|
|
PSSortOrderSet = ^TSSortOrderSet;
|
|
_SSortOrderSet = record
|
|
cSorts: ULONG; // Number of sort columns in aSort below
|
|
cCategories: ULONG; // 0 for non-categorized, up to cSorts
|
|
cExpanded: ULONG; // 0 if no categories start expanded,
|
|
// up to cExpanded
|
|
aSort: array[0..MAPI_DIM-1] of TSSortOrder; // The sort orders
|
|
end;
|
|
{$EXTERNALSYM _SSortOrderSet}
|
|
TSSortOrderSet = _SSortOrderSet;
|
|
SSortOrderSet = _SSortOrderSet;
|
|
{$EXTERNALSYM SSortOrderSet}
|
|
|
|
(*!!!
|
|
#define CbNewSSortOrderSet(_csort) \
|
|
(offsetof(SSortOrderSet,aSort) + (_csort)*sizeof(SSortOrder))
|
|
#define CbSSortOrderSet(_lpset) \
|
|
(offsetof(SSortOrderSet,aSort) + \
|
|
(UINT)((_lpset)->cSorts*sizeof(SSortOrder)))
|
|
#define SizedSSortOrderSet(_csort, _name) \
|
|
struct _SSortOrderSet_ ## _name \
|
|
{ \
|
|
ULONG cSorts; \
|
|
ULONG cCategories; \
|
|
ULONG cExpanded; \
|
|
SSortOrder aSort[_csort]; \
|
|
} _name
|
|
*)
|
|
|
|
PBookMark = ^TBookMark;
|
|
BOOKMARK = ULONG;
|
|
{$EXTERNALSYM BOOKMARK}
|
|
TBookMark = BOOKMARK;
|
|
|
|
const
|
|
BOOKMARK_BEGINNING = TBookMark(0); // Before first row
|
|
{$EXTERNALSYM BOOKMARK_BEGINNING}
|
|
BOOKMARK_CURRENT = TBookMark(1); // Before current row
|
|
{$EXTERNALSYM BOOKMARK_CURRENT}
|
|
BOOKMARK_END = TBookMark(2); // After last row
|
|
{$EXTERNALSYM BOOKMARK_END}
|
|
|
|
{ Fuzzy Level }
|
|
|
|
FL_FULLSTRING = ULONG($00000000);
|
|
{$EXTERNALSYM FL_FULLSTRING}
|
|
FL_SUBSTRING = ULONG($00000001);
|
|
{$EXTERNALSYM FL_SUBSTRING}
|
|
FL_PREFIX = ULONG($00000002);
|
|
{$EXTERNALSYM FL_PREFIX}
|
|
|
|
FL_IGNORECASE = ULONG($00010000);
|
|
{$EXTERNALSYM FL_IGNORECASE}
|
|
FL_IGNORENONSPACE = ULONG($00020000);
|
|
{$EXTERNALSYM FL_IGNORENONSPACE}
|
|
FL_LOOSE = ULONG($00040000);
|
|
{$EXTERNALSYM FL_LOOSE}
|
|
|
|
{ Restrictions }
|
|
|
|
{ Restriction types }
|
|
|
|
const
|
|
RES_AND = ULONG($00000000);
|
|
{$EXTERNALSYM RES_AND}
|
|
RES_OR = ULONG($00000001);
|
|
{$EXTERNALSYM RES_OR}
|
|
RES_NOT = ULONG($00000002);
|
|
{$EXTERNALSYM RES_NOT}
|
|
RES_CONTENT = ULONG($00000003);
|
|
{$EXTERNALSYM RES_CONTENT}
|
|
RES_PROPERTY = ULONG($00000004);
|
|
{$EXTERNALSYM RES_PROPERTY}
|
|
RES_COMPAREPROPS = ULONG($00000005);
|
|
{$EXTERNALSYM RES_COMPAREPROPS}
|
|
RES_BITMASK = ULONG($00000006);
|
|
{$EXTERNALSYM RES_BITMASK}
|
|
RES_SIZE = ULONG($00000007);
|
|
{$EXTERNALSYM RES_SIZE}
|
|
RES_EXIST = ULONG($00000008);
|
|
{$EXTERNALSYM RES_EXIST}
|
|
RES_SUBRESTRICTION = ULONG($00000009);
|
|
{$EXTERNALSYM RES_SUBRESTRICTION}
|
|
RES_COMMENT = ULONG($0000000A);
|
|
{$EXTERNALSYM RES_COMMENT}
|
|
|
|
{ Relational operators. These apply to all property comparison restrictions. }
|
|
|
|
RELOP_LT = ULONG(0); // <
|
|
{$EXTERNALSYM RELOP_LT}
|
|
RELOP_LE = ULONG(1); // <=
|
|
{$EXTERNALSYM RELOP_LE}
|
|
RELOP_GT = ULONG(2); // >
|
|
{$EXTERNALSYM RELOP_GT}
|
|
RELOP_GE = ULONG(3); // >=
|
|
{$EXTERNALSYM RELOP_GE}
|
|
RELOP_EQ = ULONG(4); // ==
|
|
{$EXTERNALSYM RELOP_EQ}
|
|
RELOP_NE = ULONG(5); // !=
|
|
{$EXTERNALSYM RELOP_NE}
|
|
RELOP_RE = ULONG(6); // LIKE (Regular expression)
|
|
{$EXTERNALSYM RELOP_RE}
|
|
|
|
{ Bitmask operators, for RES_BITMASK only. }
|
|
|
|
BMR_EQZ = ULONG(0); // ==0
|
|
{$EXTERNALSYM BMR_EQZ}
|
|
BMR_NEZ = ULONG(1); // !=0
|
|
{$EXTERNALSYM BMR_NEZ}
|
|
|
|
{ Subobject identifiers for RES_SUBRESTRICTION only. See MAPITAGS.H. }
|
|
|
|
// #define PR_MESSAGE_RECIPIENTS PROP_TAG(PT_OBJECT,0x0E12)
|
|
// #define PR_MESSAGE_ATTACHMENTS PROP_TAG(PT_OBJECT,0x0E13)
|
|
|
|
type
|
|
|
|
PSRestriction = ^TSRestriction;
|
|
|
|
PSAndRestriction = ^TSAndRestriction;
|
|
_SAndRestriction = record
|
|
cRes: ULONG;
|
|
lpRes: PSRestriction;
|
|
end;
|
|
{$EXTERNALSYM _SAndRestriction}
|
|
TSAndRestriction = _SAndRestriction;
|
|
SAndRestriction = _SAndRestriction;
|
|
{$EXTERNALSYM SAndRestriction}
|
|
|
|
PSOrRestriction = ^TSOrRestriction;
|
|
_SOrRestriction = record
|
|
cRes: ULONG;
|
|
lpRes: PSRestriction;
|
|
end;
|
|
{$EXTERNALSYM _SOrRestriction}
|
|
TSOrRestriction = _SOrRestriction;
|
|
SOrRestriction = _SOrRestriction;
|
|
{$EXTERNALSYM SOrRestriction}
|
|
|
|
PSNotRestriction = ^TSNotRestriction;
|
|
_SNotRestriction = record
|
|
ulReserved: ULONG;
|
|
lpRes: PSRestriction;
|
|
end;
|
|
{$EXTERNALSYM _SNotRestriction}
|
|
TSNotRestriction = _SNotRestriction;
|
|
SNotRestriction = _SNotRestriction;
|
|
{$EXTERNALSYM SNotRestriction}
|
|
|
|
PSContentRestriction = ^TSContentRestriction;
|
|
_SContentRestriction = record
|
|
ulFuzzyLevel: ULONG;
|
|
ulPropTag: ULONG;
|
|
lpProp: PSPropValue;
|
|
end;
|
|
{$EXTERNALSYM _SContentRestriction}
|
|
TSContentRestriction = _SContentRestriction;
|
|
SContentRestriction = _SContentRestriction;
|
|
{$EXTERNALSYM SContentRestriction}
|
|
|
|
PSBitMaskRestriction = ^TSBitMaskRestriction;
|
|
_SBitMaskRestriction = record
|
|
relBMR: ULONG;
|
|
ulPropTag: ULONG;
|
|
ulMask: ULONG;
|
|
end;
|
|
{$EXTERNALSYM _SBitMaskRestriction}
|
|
TSBitMaskRestriction = _SBitMaskRestriction;
|
|
SBitMaskRestriction = _SBitMaskRestriction;
|
|
{$EXTERNALSYM SBitMaskRestriction}
|
|
|
|
PSPropertyRestriction = ^TSPropertyRestriction;
|
|
_SPropertyRestriction = record
|
|
relop: ULONG;
|
|
ulPropTag: ULONG;
|
|
lpProp: PSPropValue;
|
|
end;
|
|
{$EXTERNALSYM _SPropertyRestriction}
|
|
TSPropertyRestriction = _SPropertyRestriction;
|
|
SPropertyRestriction = _SPropertyRestriction;
|
|
{$EXTERNALSYM SPropertyRestriction}
|
|
|
|
PSComparePropsRestriction = ^TSComparePropsRestriction;
|
|
_SComparePropsRestriction = record
|
|
relop: ULONG;
|
|
ulPropTag1: ULONG;
|
|
ulPropTag2: ULONG;
|
|
end;
|
|
{$EXTERNALSYM _SComparePropsRestriction}
|
|
TSComparePropsRestriction = _SComparePropsRestriction;
|
|
SComparePropsRestriction = _SComparePropsRestriction;
|
|
{$EXTERNALSYM SComparePropsRestriction}
|
|
|
|
PSSizeRestriction = ^TSSizeRestriction;
|
|
_SSizeRestriction = record
|
|
relop: ULONG;
|
|
ulPropTag: ULONG;
|
|
cb: ULONG;
|
|
end;
|
|
{$EXTERNALSYM _SSizeRestriction}
|
|
TSSizeRestriction = _SSizeRestriction;
|
|
SSizeRestriction = _SSizeRestriction;
|
|
{$EXTERNALSYM SSizeRestriction}
|
|
|
|
PSExistRestriction = ^TSExistRestriction;
|
|
_SExistRestriction = record
|
|
ulReserved1: ULONG;
|
|
ulPropTag: ULONG;
|
|
ulReserved2: ULONG;
|
|
end;
|
|
{$EXTERNALSYM _SExistRestriction}
|
|
TSExistRestriction = _SExistRestriction;
|
|
SExistRestriction = _SExistRestriction;
|
|
{$EXTERNALSYM SExistRestriction}
|
|
|
|
PSSubRestriction = ^TSSubRestriction;
|
|
_SSubRestriction = record
|
|
ulSubObject: ULONG;
|
|
lpRes: PSRestriction;
|
|
end;
|
|
{$EXTERNALSYM _SSubRestriction}
|
|
TSSubRestriction = _SSubRestriction;
|
|
SSubRestriction = _SSubRestriction;
|
|
{$EXTERNALSYM SSubRestriction}
|
|
|
|
PSCommentRestriction = ^TSCommentRestriction;
|
|
_SCommentRestriction = record
|
|
cValues: ULONG; // # of properties in lpProp *:
|
|
lpRes: PSRestriction;
|
|
lpProp: PSPropValue;
|
|
end;
|
|
{$EXTERNALSYM _SCommentRestriction}
|
|
TSCommentRestriction = _SCommentRestriction;
|
|
SCommentRestriction = _SCommentRestriction;
|
|
{$EXTERNALSYM SCommentRestriction}
|
|
|
|
_SRestriction = record
|
|
rt: ULONG; // Restriction type
|
|
case Integer of
|
|
1: (resCompareProps: SComparePropsRestriction;); // first
|
|
2: (resAnd: TSAndRestriction;);
|
|
3: (resOr: TSOrRestriction;);
|
|
4: (resNot: TSNotRestriction;);
|
|
5: (resContent: TSContentRestriction;);
|
|
6: (resProperty: TSPropertyRestriction;);
|
|
7: (resBitMask: TSBitMaskRestriction;);
|
|
8: (resSize: TSSizeRestriction;);
|
|
9: (resExist: TSExistRestriction;);
|
|
10: (resSub: TSSubRestriction;);
|
|
11: (resComment: TSCommentRestriction;);
|
|
end;
|
|
{$EXTERNALSYM _SRestriction}
|
|
TSRestriction = _SRestriction;
|
|
|
|
{ SComparePropsRestriction is first in the union so that static initializations }
|
|
{ of 3-value restriction work }
|
|
|
|
{ Flags of the methods of IMAPITable }
|
|
|
|
{ QueryColumn }
|
|
|
|
const
|
|
TBL_ALL_COLUMNS = ULONG($00000001);
|
|
{$EXTERNALSYM TBL_ALL_COLUMNS}
|
|
|
|
{ QueryRows }
|
|
{ Possible values for PR_ROW_TYPE (for categorization) }
|
|
|
|
TBL_LEAF_ROW = ULONG(1);
|
|
{$EXTERNALSYM TBL_LEAF_ROW}
|
|
TBL_EMPTY_CATEGORY = ULONG(2);
|
|
{$EXTERNALSYM TBL_EMPTY_CATEGORY}
|
|
TBL_EXPANDED_CATEGORY = ULONG(3);
|
|
{$EXTERNALSYM TBL_EXPANDED_CATEGORY}
|
|
TBL_COLLAPSED_CATEGORY = ULONG(4);
|
|
{$EXTERNALSYM TBL_COLLAPSED_CATEGORY}
|
|
|
|
{ Table wait flag }
|
|
|
|
TBL_NOWAIT = ULONG($00000001);
|
|
{$EXTERNALSYM TBL_NOWAIT}
|
|
{ alternative name for TBL_NOWAIT }
|
|
TBL_ASYNC = ULONG($00000001);
|
|
{$EXTERNALSYM TBL_ASYNC}
|
|
TBL_BATCH = ULONG($00000002);
|
|
{$EXTERNALSYM TBL_BATCH}
|
|
|
|
{ FindRow }
|
|
|
|
DIR_BACKWARD = ULONG($00000001);
|
|
{$EXTERNALSYM DIR_BACKWARD}
|
|
|
|
{ Table cursor states }
|
|
|
|
TBL_NOADVANCE = ULONG($00000001);
|
|
{$EXTERNALSYM TBL_NOADVANCE}
|
|
|
|
type
|
|
IMAPITable = interface(IUnknown)
|
|
function GetLastError(hResult: HRESULT; ulFlags: ULONG;
|
|
var lppMAPIError: TMapiError): HResult; stdcall;
|
|
function Advise(ulEventMask: ULONG; lpAdviseSink: IMAPIAdviseSink;
|
|
var lpulConnection: ULONG): HResult; stdcall;
|
|
function Unadvise(ulConnection: ULONG): HResult; stdcall;
|
|
function GetStatus(var lpulTableStatus, lpulTableType: ULONG): HResult; stdcall;
|
|
function SetColumns(lpPropTagArray: PSPropTagArray; ulFlags: ULONG): HResult; stdcall;
|
|
function QueryColumns(ulFlags: ULONG; var lpPropTagArray: PSPropTagArray): HResult; stdcall;
|
|
function GetRowCount(ulFlags: ULONG; var lpulCount: ULONG): HResult; stdcall;
|
|
function SeekRow(bkOrigin: TBookMark; lRowCount: LongInt; lplRowsSought: PLongInt): HResult; stdcall;
|
|
function SeekRowApprox(ulNumerator, ulDenominator: ULONG): HResult; stdcall;
|
|
function QueryPosition(var lpulRow, lpulNumerator, lpulDenominator: ULONG): HResult; stdcall;
|
|
function FindRow(lpRestriction: PSRestriction; bkOrigin: TBookMark;
|
|
ulFlags: ULONG): HResult; stdcall;
|
|
function Restrict(lpRestriction: PSRestriction; ulFlags: ULONG): HResult; stdcall;
|
|
function CreateBookmark(var lpbkPosition: TBookMark): HResult; stdcall;
|
|
function FreeBookmark(bkPosition: TBookMark): HResult; stdcall;
|
|
function SortTable(lpSortCriteria: PSSortOrderSet; ulFlags: ULONG): HResult; stdcall;
|
|
function QuerySortOrder(var lppSortCriteria: PSSortOrderSet): HResult; stdcall;
|
|
function QueryRows(lRowCount: LongInt; ulFlags: ULONG; var lppRows: PSRowSet): HResult; stdcall;
|
|
function Abort: HResult; stdcall;
|
|
function ExpandRow(cbInstanceKey: ULONG; pbInstanceKey: Pointer;
|
|
ulRowCount, ulFlags: ULONG; lppRows: PSRowSet; var lpulMoreRows: ULONG): HResult; stdcall;
|
|
function CollapseRow(cbInstanceKey: ULONG; pbInstanceKey: Pointer;
|
|
ulFlags: ULONG; var lpulRowCount: ULONG): HResult; stdcall;
|
|
function WaitForCompletion(ulFlags, ulTimeout: ULONG; lpulTableStatus: PULONG): HResult; stdcall;
|
|
function GetCollapseState(ulFlags, cbInstanceKey: ULONG; lpbInstanceKey: Pointer;
|
|
var lpcbCollapseState: ULONG; var lppbCollapseState: Pointer): HResult; stdcall;
|
|
function SetCollapseState(ulFlags, cbCollapseState: ULONG; pbCollapseState: Pointer;
|
|
var lpbkLocation: TBookMark): HResult; stdcall;
|
|
end;
|
|
{$EXTERNALSYM IMAPITable}
|
|
|
|
{ IProfSect Interface ----------------------------------------------------- }
|
|
|
|
{ Standard section for public profile properties }
|
|
|
|
const
|
|
PS_PROFILE_PROPERTIES_INIT: array[0..15] of Byte =
|
|
($98, $15, $AC, $08, $AA, $B0, $10, $1A,
|
|
$8C, $93, $08, $00, $2B, $2A, $56, $C2);
|
|
{$EXTERNALSYM PS_PROFILE_PROPERTIES_INIT}
|
|
|
|
type
|
|
IProfSect = interface(IMAPIProp)
|
|
end;
|
|
{$EXTERNALSYM IProfSect}
|
|
|
|
{ IMAPIStatus Interface --------------------------------------------------- }
|
|
|
|
{ Values for PR_RESOURCE_TYPE, _METHODS, _FLAGS }
|
|
|
|
const
|
|
MAPI_STORE_PROVIDER = ULONG(33); // Message Store
|
|
{$EXTERNALSYM MAPI_STORE_PROVIDER}
|
|
MAPI_AB = ULONG(34); // Address Book
|
|
{$EXTERNALSYM MAPI_AB}
|
|
MAPI_AB_PROVIDER = ULONG(35); // Address Book Provider
|
|
{$EXTERNALSYM MAPI_AB_PROVIDER}
|
|
MAPI_TRANSPORT_PROVIDER = ULONG(36); // Transport Provider
|
|
{$EXTERNALSYM MAPI_TRANSPORT_PROVIDER}
|
|
MAPI_SPOOLER = ULONG(37); // Message Spooler
|
|
{$EXTERNALSYM MAPI_SPOOLER}
|
|
MAPI_PROFILE_PROVIDER = ULONG(38); // Profile Provider
|
|
{$EXTERNALSYM MAPI_PROFILE_PROVIDER}
|
|
MAPI_SUBSYSTEM = ULONG(39); // Overall Subsystem Status
|
|
{$EXTERNALSYM MAPI_SUBSYSTEM}
|
|
MAPI_HOOK_PROVIDER = ULONG(40); // Spooler Hook
|
|
{$EXTERNALSYM MAPI_HOOK_PROVIDER}
|
|
|
|
STATUS_VALIDATE_STATE = ULONG($00000001);
|
|
{$EXTERNALSYM STATUS_VALIDATE_STATE}
|
|
STATUS_SETTINGS_DIALOG = ULONG($00000002);
|
|
{$EXTERNALSYM STATUS_SETTINGS_DIALOG}
|
|
STATUS_CHANGE_PASSWORD = ULONG($00000004);
|
|
{$EXTERNALSYM STATUS_CHANGE_PASSWORD}
|
|
STATUS_FLUSH_QUEUES = ULONG($00000008);
|
|
{$EXTERNALSYM STATUS_FLUSH_QUEUES}
|
|
|
|
STATUS_DEFAULT_OUTBOUND = ULONG($00000001);
|
|
{$EXTERNALSYM STATUS_DEFAULT_OUTBOUND}
|
|
STATUS_DEFAULT_STORE = ULONG($00000002);
|
|
{$EXTERNALSYM STATUS_DEFAULT_STORE}
|
|
STATUS_PRIMARY_IDENTITY = ULONG($00000004);
|
|
{$EXTERNALSYM STATUS_PRIMARY_IDENTITY}
|
|
STATUS_SIMPLE_STORE = ULONG($00000008);
|
|
{$EXTERNALSYM STATUS_SIMPLE_STORE}
|
|
STATUS_XP_PREFER_LAST = ULONG($00000010);
|
|
{$EXTERNALSYM STATUS_XP_PREFER_LAST}
|
|
STATUS_NO_PRIMARY_IDENTITY = ULONG($00000020);
|
|
{$EXTERNALSYM STATUS_NO_PRIMARY_IDENTITY}
|
|
STATUS_NO_DEFAULT_STORE = ULONG($00000040);
|
|
{$EXTERNALSYM STATUS_NO_DEFAULT_STORE}
|
|
STATUS_TEMP_SECTION = ULONG($00000080);
|
|
{$EXTERNALSYM STATUS_TEMP_SECTION}
|
|
STATUS_OWN_STORE = ULONG($00000100);
|
|
{$EXTERNALSYM STATUS_OWN_STORE}
|
|
//***** HOOK_INBOUND ((ULONG) 0x00000200) Defined in MAPIHOOK.H
|
|
//***** HOOK_OUTBOUND ((ULONG) 0x00000400) Defined in MAPIHOOK.H
|
|
STATUS_NEED_IPM_TREE = ULONG($00000800);
|
|
{$EXTERNALSYM STATUS_NEED_IPM_TREE}
|
|
STATUS_PRIMARY_STORE = ULONG($00001000);
|
|
{$EXTERNALSYM STATUS_PRIMARY_STORE}
|
|
STATUS_SECONDARY_STORE = ULONG($00002000);
|
|
{$EXTERNALSYM STATUS_SECONDARY_STORE}
|
|
|
|
|
|
{* PR_STATUS_CODE bit. Low 16 bits for common values; High 16 bits
|
|
* for provider type-specific values. (DCR 304)
|
|
}
|
|
|
|
STATUS_AVAILABLE = ULONG($00000001);
|
|
{$EXTERNALSYM STATUS_AVAILABLE}
|
|
STATUS_OFFLINE = ULONG($00000002);
|
|
{$EXTERNALSYM STATUS_OFFLINE}
|
|
STATUS_FAILURE = ULONG($00000004);
|
|
{$EXTERNALSYM STATUS_FAILURE}
|
|
|
|
{ Transport values of PR_STATUS_CODE }
|
|
|
|
STATUS_INBOUND_ENABLED = ULONG($00010000);
|
|
{$EXTERNALSYM STATUS_INBOUND_ENABLED}
|
|
STATUS_INBOUND_ACTIVE = ULONG($00020000);
|
|
{$EXTERNALSYM STATUS_INBOUND_ACTIVE}
|
|
STATUS_INBOUND_FLUSH = ULONG($00040000);
|
|
{$EXTERNALSYM STATUS_INBOUND_FLUSH}
|
|
STATUS_OUTBOUND_ENABLED = ULONG($00100000);
|
|
{$EXTERNALSYM STATUS_OUTBOUND_ENABLED}
|
|
STATUS_OUTBOUND_ACTIVE = ULONG($00200000);
|
|
{$EXTERNALSYM STATUS_OUTBOUND_ACTIVE}
|
|
STATUS_OUTBOUND_FLUSH = ULONG($00400000);
|
|
{$EXTERNALSYM STATUS_OUTBOUND_FLUSH}
|
|
STATUS_REMOTE_ACCESS = ULONG($00800000);
|
|
{$EXTERNALSYM STATUS_REMOTE_ACCESS}
|
|
|
|
{ ValidateState flags }
|
|
|
|
SUPPRESS_UI = ULONG($00000001);
|
|
{$EXTERNALSYM SUPPRESS_UI}
|
|
REFRESH_XP_HEADER_CACHE = ULONG($00010000);
|
|
{$EXTERNALSYM REFRESH_XP_HEADER_CACHE}
|
|
PROCESS_XP_HEADER_CACHE = ULONG($00020000);
|
|
{$EXTERNALSYM PROCESS_XP_HEADER_CACHE}
|
|
FORCE_XP_CONNECT = ULONG($00040000);
|
|
{$EXTERNALSYM FORCE_XP_CONNECT}
|
|
FORCE_XP_DISCONNECT = ULONG($00080000);
|
|
{$EXTERNALSYM FORCE_XP_DISCONNECT}
|
|
CONFIG_CHANGED = ULONG($00100000);
|
|
{$EXTERNALSYM CONFIG_CHANGED}
|
|
ABORT_XP_HEADER_OPERATION = ULONG($00200000);
|
|
{$EXTERNALSYM ABORT_XP_HEADER_OPERATION}
|
|
SHOW_XP_SESSION_UI = ULONG($00400000);
|
|
{$EXTERNALSYM SHOW_XP_SESSION_UI}
|
|
|
|
{ SettingsDialog flags }
|
|
|
|
UI_READONLY = ULONG($00000001);
|
|
{$EXTERNALSYM UI_READONLY}
|
|
|
|
{ FlushQueues flags }
|
|
|
|
FLUSH_UPLOAD = ULONG($00000002);
|
|
{$EXTERNALSYM FLUSH_UPLOAD}
|
|
FLUSH_DOWNLOAD = ULONG($00000004);
|
|
{$EXTERNALSYM FLUSH_DOWNLOAD}
|
|
FLUSH_FORCE = ULONG($00000008);
|
|
{$EXTERNALSYM FLUSH_FORCE}
|
|
FLUSH_NO_UI = ULONG($00000010);
|
|
{$EXTERNALSYM FLUSH_NO_UI}
|
|
FLUSH_ASYNC_OK = ULONG($00000020);
|
|
{$EXTERNALSYM FLUSH_ASYNC_OK}
|
|
|
|
type
|
|
IMAPIStatus = interface(IMAPIProp)
|
|
function ValidateState(ulUIParam, ulFlags: ULONG): HResult; stdcall;
|
|
function SettingsDialog(ulUIParam, ulFlags: ULONG): HResult; stdcall;
|
|
function ChangePassword(lpOldPass, lpNewPass: LPTSTR; ulFlags: ULONG): HResult; stdcall;
|
|
function FlushQueues(ulUIParam, cbTargetTransport: ULONG;
|
|
lpTargetTransport: PEntryID; ulFlags: ULONG): HResult; stdcall;
|
|
end;
|
|
{$EXTERNALSYM IMAPIStatus}
|
|
|
|
{ IMAPIContainer Interface ------------------------------------------------ }
|
|
|
|
{ Flags for OpenEntry() }
|
|
|
|
const
|
|
//***** MAPI_MODIFY ((ULONG) 0x00000001) above
|
|
//***** MAPI_DEFERRED_ERRORS ((ULONG) 0x00000008) below
|
|
MAPI_BEST_ACCESS = ULONG($00000010);
|
|
{$EXTERNALSYM MAPI_BEST_ACCESS}
|
|
|
|
{ GetContentsTable() }
|
|
//***** MAPI_UNICODE ((ULONG) 0x80000000) above
|
|
//***** MAPI_DEFERRED_ERRORS ((ULONG) 0x00000008) below
|
|
//***** MAPI_ASSOCIATED ((ULONG) 0x00000040) below
|
|
WAB_LOCAL_CONTAINERS = $00100000;
|
|
{$EXTERNALSYM WAB_LOCAL_CONTAINERS}
|
|
WAB_PROFILE_CONTENTS = $00200000;
|
|
{$EXTERNALSYM WAB_PROFILE_CONTENTS}
|
|
|
|
{ GetHierarchyTable() }
|
|
//***** MAPI_UNICODE ((ULONG) 0x80000000) above
|
|
CONVENIENT_DEPTH = ULONG($00000001);
|
|
//***** MAPI_DEFERRED_ERRORS ((ULONG) 0x00000008) below
|
|
|
|
{ GetSearchCriteria }
|
|
//***** MAPI_UNICODE ((ULONG) 0x80000000) above
|
|
SEARCH_RUNNING = ULONG($00000001);
|
|
{$EXTERNALSYM SEARCH_RUNNING}
|
|
SEARCH_REBUILD = ULONG($00000002);
|
|
{$EXTERNALSYM SEARCH_REBUILD}
|
|
SEARCH_RECURSIVE = ULONG($00000004);
|
|
{$EXTERNALSYM SEARCH_RECURSIVE}
|
|
SEARCH_FOREGROUND = ULONG($00000008);
|
|
{$EXTERNALSYM SEARCH_FOREGROUND}
|
|
|
|
{ SetSearchCriteria }
|
|
STOP_SEARCH = ULONG($00000001);
|
|
{$EXTERNALSYM STOP_SEARCH}
|
|
RESTART_SEARCH = ULONG($00000002);
|
|
{$EXTERNALSYM RESTART_SEARCH}
|
|
RECURSIVE_SEARCH = ULONG($00000004);
|
|
{$EXTERNALSYM RECURSIVE_SEARCH}
|
|
SHALLOW_SEARCH = ULONG($00000008);
|
|
{$EXTERNALSYM SHALLOW_SEARCH}
|
|
FOREGROUND_SEARCH = ULONG($00000010);
|
|
{$EXTERNALSYM FOREGROUND_SEARCH}
|
|
BACKGROUND_SEARCH = ULONG($00000020);
|
|
{$EXTERNALSYM BACKGROUND_SEARCH}
|
|
|
|
type
|
|
IMAPIContainer = interface(IMAPIProp)
|
|
function GetContentsTable(ulFlags: ULONG; out lppTable: IMAPITable): HResult; stdcall;
|
|
function GetHierarchyTable(ulFlags: ULONG; out lppTable: IMAPITable): HResult; stdcall;
|
|
function OpenEntry(cbEntryID: ULONG; lpEntryID: PEntryID; lpInterface: PIID;
|
|
ulFlags: ULONG; var lpulObjType: ULONG; out lppUnk: IUnknown): HResult; stdcall;
|
|
function SetSearchCriteria(lpRestriction: PSRestriction;
|
|
lpContainerList: PEntryList; ulSearchFlags: ULONG): HResult; stdcall;
|
|
function GetSearchCriteria(ulFlags: ULONG; var lppRestriction: PSRestriction;
|
|
var lppContainerList: PEntryList; var lpulSearchState: ULONG): HResult; stdcall;
|
|
end;
|
|
{$EXTERNALSYM IMAPIContainer}
|
|
|
|
{ IABContainer Interface -------------------------------------------------- }
|
|
|
|
{* IABContainer PR_CONTAINER_FLAGS values
|
|
* If AB_UNMODIFIABLE and AB_MODIFIABLE are both set, it means the container
|
|
* doesn't know if it's modifiable or not, and the client should
|
|
* try to modify the contents but we won't expect it to work.
|
|
* If the AB_RECIPIENTS flag is set and neither AB_MODIFIABLE or AB_UNMODIFIABLE
|
|
* bits are set, it is an error.
|
|
}
|
|
|
|
PFlagList = ^TFlagList;
|
|
_flaglist = record
|
|
cFlags: ULONG;
|
|
ulFlag: array[0..MAPI_DIM-1] of ULONG;
|
|
end;
|
|
{$EXTERNALSYM _flaglist}
|
|
TFlagList = _flaglist;
|
|
|
|
{ Container flags }
|
|
|
|
const
|
|
AB_RECIPIENTS = ULONG($00000001);
|
|
{$EXTERNALSYM AB_RECIPIENTS}
|
|
AB_SUBCONTAINERS = ULONG($00000002);
|
|
{$EXTERNALSYM AB_SUBCONTAINERS}
|
|
AB_MODIFIABLE = ULONG($00000004);
|
|
{$EXTERNALSYM AB_MODIFIABLE}
|
|
AB_UNMODIFIABLE = ULONG($00000008);
|
|
{$EXTERNALSYM AB_UNMODIFIABLE}
|
|
AB_FIND_ON_OPEN = ULONG($00000010);
|
|
{$EXTERNALSYM AB_FIND_ON_OPEN}
|
|
AB_NOT_DEFAULT = ULONG($00000020);
|
|
{$EXTERNALSYM AB_NOT_DEFAULT}
|
|
|
|
{ CreateEntry() }
|
|
|
|
CREATE_CHECK_DUP_STRICT = ULONG($00000001);
|
|
{$EXTERNALSYM CREATE_CHECK_DUP_STRICT}
|
|
CREATE_CHECK_DUP_LOOSE = ULONG($00000002);
|
|
{$EXTERNALSYM CREATE_CHECK_DUP_LOOSE}
|
|
CREATE_REPLACE = ULONG($00000004);
|
|
{$EXTERNALSYM CREATE_REPLACE}
|
|
CREATE_MERGE = ULONG($00000008);
|
|
{$EXTERNALSYM CREATE_MERGE}
|
|
|
|
{ ResolveNames() - ulFlags }
|
|
//***** MAPI_UNICODE ((ULONG) 0x80000000) above
|
|
WAB_IGNORE_PROFILES = $00800000;
|
|
{$EXTERNALSYM WAB_IGNORE_PROFILES}
|
|
|
|
{ ResolveNames() - rgulFlags }
|
|
MAPI_UNRESOLVED = ULONG($00000000);
|
|
{$EXTERNALSYM MAPI_UNRESOLVED}
|
|
MAPI_AMBIGUOUS = ULONG($00000001);
|
|
{$EXTERNALSYM MAPI_AMBIGUOUS}
|
|
MAPI_RESOLVED = ULONG($00000002);
|
|
{$EXTERNALSYM MAPI_RESOLVED}
|
|
|
|
type
|
|
IABContainer = interface(IMAPIContainer)
|
|
function CreateEntry(cbEntryID: ULONG; lpEntryID: PEntryID;
|
|
ulCreateFlags: ULONG; out lppMAPIPropEntry: IMAPIProp): HResult; stdcall;
|
|
function CopyEntries(lpEntries: PEntryList; ulUIParam: ULONG;
|
|
lpProgress: IMAPIProgress; ulFlags: ULONG): HResult; stdcall;
|
|
function DeleteEntries(lpEntries: PEntryList; ulFlags: ULONG): HResult; stdcall;
|
|
function ResolveNames(lpPropTagArray: PSPropTagArray; ulFlags: ULONG;
|
|
lpAdrList: PAdrList; lpFlagList: PFlagList): HResult; stdcall;
|
|
end;
|
|
{$EXTERNALSYM IABContainer}
|
|
|
|
{ IMailUser Interface ----------------------------------------------------- }
|
|
|
|
{* Any call which can create a one-off entryID (i.e. MAPISupport::CreateOneOff
|
|
or IAddrBook::CreateOneOff) can encode the value for PR_SEND_RICH_INFO by
|
|
passing in the following flag in the ulFlags parameter. Setting this flag
|
|
indicates that PR_SEND_RICH_INFO will be FALSE.
|
|
*}
|
|
|
|
const
|
|
MAPI_SEND_NO_RICH_INFO = ULONG($00010000);
|
|
{$EXTERNALSYM MAPI_SEND_NO_RICH_INFO}
|
|
|
|
{ Values of PR_NDR_DIAG_CODE }
|
|
|
|
MAPI_DIAG_NO_DIAGNOSTIC = -1;
|
|
{$EXTERNALSYM MAPI_DIAG_NO_DIAGNOSTIC}
|
|
MAPI_DIAG_OR_NAME_UNRECOGNIZED = 0;
|
|
{$EXTERNALSYM MAPI_DIAG_OR_NAME_UNRECOGNIZED}
|
|
MAPI_DIAG_OR_NAME_AMBIGUOUS = 1;
|
|
{$EXTERNALSYM MAPI_DIAG_OR_NAME_AMBIGUOUS}
|
|
MAPI_DIAG_MTS_CONGESTED = 2;
|
|
{$EXTERNALSYM MAPI_DIAG_MTS_CONGESTED}
|
|
MAPI_DIAG_LOOP_DETECTED = 3;
|
|
{$EXTERNALSYM MAPI_DIAG_LOOP_DETECTED}
|
|
MAPI_DIAG_RECIPIENT_UNAVAILABLE = 4;
|
|
{$EXTERNALSYM MAPI_DIAG_RECIPIENT_UNAVAILABLE}
|
|
MAPI_DIAG_MAXIMUM_TIME_EXPIRED = 5;
|
|
{$EXTERNALSYM MAPI_DIAG_MAXIMUM_TIME_EXPIRED}
|
|
MAPI_DIAG_EITS_UNSUPPORTED = 6;
|
|
{$EXTERNALSYM MAPI_DIAG_EITS_UNSUPPORTED}
|
|
MAPI_DIAG_CONTENT_TOO_LONG = 7;
|
|
{$EXTERNALSYM MAPI_DIAG_CONTENT_TOO_LONG}
|
|
MAPI_DIAG_IMPRACTICAL_TO_CONVERT = 8;
|
|
{$EXTERNALSYM MAPI_DIAG_IMPRACTICAL_TO_CONVERT}
|
|
MAPI_DIAG_PROHIBITED_TO_CONVERT = 9;
|
|
{$EXTERNALSYM MAPI_DIAG_PROHIBITED_TO_CONVERT}
|
|
MAPI_DIAG_CONVERSION_UNSUBSCRIBED = 10;
|
|
{$EXTERNALSYM MAPI_DIAG_CONVERSION_UNSUBSCRIBED}
|
|
MAPI_DIAG_PARAMETERS_INVALID = 11;
|
|
{$EXTERNALSYM MAPI_DIAG_PARAMETERS_INVALID}
|
|
MAPI_DIAG_CONTENT_SYNTAX_IN_ERROR = 12;
|
|
{$EXTERNALSYM MAPI_DIAG_CONTENT_SYNTAX_IN_ERROR}
|
|
MAPI_DIAG_LENGTH_CONSTRAINT_VIOLATD = 13;
|
|
{$EXTERNALSYM MAPI_DIAG_LENGTH_CONSTRAINT_VIOLATD}
|
|
MAPI_DIAG_NUMBER_CONSTRAINT_VIOLATD = 14;
|
|
{$EXTERNALSYM MAPI_DIAG_NUMBER_CONSTRAINT_VIOLATD}
|
|
MAPI_DIAG_CONTENT_TYPE_UNSUPPORTED = 15;
|
|
{$EXTERNALSYM MAPI_DIAG_CONTENT_TYPE_UNSUPPORTED}
|
|
MAPI_DIAG_TOO_MANY_RECIPIENTS = 16;
|
|
{$EXTERNALSYM MAPI_DIAG_TOO_MANY_RECIPIENTS}
|
|
MAPI_DIAG_NO_BILATERAL_AGREEMENT = 17;
|
|
{$EXTERNALSYM MAPI_DIAG_NO_BILATERAL_AGREEMENT}
|
|
MAPI_DIAG_CRITICAL_FUNC_UNSUPPORTED = 18;
|
|
{$EXTERNALSYM MAPI_DIAG_CRITICAL_FUNC_UNSUPPORTED}
|
|
MAPI_DIAG_CONVERSION_LOSS_PROHIB = 19;
|
|
{$EXTERNALSYM MAPI_DIAG_CONVERSION_LOSS_PROHIB}
|
|
MAPI_DIAG_LINE_TOO_LONG = 20;
|
|
{$EXTERNALSYM MAPI_DIAG_LINE_TOO_LONG}
|
|
MAPI_DIAG_PAGE_TOO_LONG = 21;
|
|
{$EXTERNALSYM MAPI_DIAG_PAGE_TOO_LONG}
|
|
MAPI_DIAG_PICTORIAL_SYMBOL_LOST = 22;
|
|
{$EXTERNALSYM MAPI_DIAG_PICTORIAL_SYMBOL_LOST}
|
|
MAPI_DIAG_PUNCTUATION_SYMBOL_LOST = 23;
|
|
{$EXTERNALSYM MAPI_DIAG_PUNCTUATION_SYMBOL_LOST}
|
|
MAPI_DIAG_ALPHABETIC_CHARACTER_LOST = 24;
|
|
{$EXTERNALSYM MAPI_DIAG_ALPHABETIC_CHARACTER_LOST}
|
|
MAPI_DIAG_MULTIPLE_INFO_LOSSES = 25;
|
|
{$EXTERNALSYM MAPI_DIAG_MULTIPLE_INFO_LOSSES}
|
|
MAPI_DIAG_REASSIGNMENT_PROHIBITED = 26;
|
|
{$EXTERNALSYM MAPI_DIAG_REASSIGNMENT_PROHIBITED}
|
|
MAPI_DIAG_REDIRECTION_LOOP_DETECTED = 27;
|
|
{$EXTERNALSYM MAPI_DIAG_REDIRECTION_LOOP_DETECTED}
|
|
MAPI_DIAG_EXPANSION_PROHIBITED = 28;
|
|
{$EXTERNALSYM MAPI_DIAG_EXPANSION_PROHIBITED}
|
|
MAPI_DIAG_SUBMISSION_PROHIBITED = 29;
|
|
{$EXTERNALSYM MAPI_DIAG_SUBMISSION_PROHIBITED}
|
|
MAPI_DIAG_EXPANSION_FAILED = 30;
|
|
{$EXTERNALSYM MAPI_DIAG_EXPANSION_FAILED}
|
|
MAPI_DIAG_RENDITION_UNSUPPORTED = 31;
|
|
{$EXTERNALSYM MAPI_DIAG_RENDITION_UNSUPPORTED}
|
|
MAPI_DIAG_MAIL_ADDRESS_INCORRECT = 32;
|
|
{$EXTERNALSYM MAPI_DIAG_MAIL_ADDRESS_INCORRECT}
|
|
MAPI_DIAG_MAIL_OFFICE_INCOR_OR_INVD = 33;
|
|
{$EXTERNALSYM MAPI_DIAG_MAIL_OFFICE_INCOR_OR_INVD}
|
|
MAPI_DIAG_MAIL_ADDRESS_INCOMPLETE = 34;
|
|
{$EXTERNALSYM MAPI_DIAG_MAIL_ADDRESS_INCOMPLETE}
|
|
MAPI_DIAG_MAIL_RECIPIENT_UNKNOWN = 35;
|
|
{$EXTERNALSYM MAPI_DIAG_MAIL_RECIPIENT_UNKNOWN}
|
|
MAPI_DIAG_MAIL_RECIPIENT_DECEASED = 36;
|
|
{$EXTERNALSYM MAPI_DIAG_MAIL_RECIPIENT_DECEASED}
|
|
MAPI_DIAG_MAIL_ORGANIZATION_EXPIRED = 37;
|
|
{$EXTERNALSYM MAPI_DIAG_MAIL_ORGANIZATION_EXPIRED}
|
|
MAPI_DIAG_MAIL_REFUSED = 38;
|
|
{$EXTERNALSYM MAPI_DIAG_MAIL_REFUSED}
|
|
MAPI_DIAG_MAIL_UNCLAIMED = 39;
|
|
{$EXTERNALSYM MAPI_DIAG_MAIL_UNCLAIMED}
|
|
MAPI_DIAG_MAIL_RECIPIENT_MOVED = 40;
|
|
{$EXTERNALSYM MAPI_DIAG_MAIL_RECIPIENT_MOVED}
|
|
MAPI_DIAG_MAIL_RECIPIENT_TRAVELLING = 41;
|
|
{$EXTERNALSYM MAPI_DIAG_MAIL_RECIPIENT_TRAVELLING}
|
|
MAPI_DIAG_MAIL_RECIPIENT_DEPARTED = 42;
|
|
{$EXTERNALSYM MAPI_DIAG_MAIL_RECIPIENT_DEPARTED}
|
|
MAPI_DIAG_MAIL_NEW_ADDRESS_UNKNOWN = 43;
|
|
{$EXTERNALSYM MAPI_DIAG_MAIL_NEW_ADDRESS_UNKNOWN}
|
|
MAPI_DIAG_MAIL_FORWARDING_UNWANTED = 44;
|
|
{$EXTERNALSYM MAPI_DIAG_MAIL_FORWARDING_UNWANTED}
|
|
MAPI_DIAG_MAIL_FORWARDING_PROHIB = 45;
|
|
{$EXTERNALSYM MAPI_DIAG_MAIL_FORWARDING_PROHIB}
|
|
MAPI_DIAG_SECURE_MESSAGING_ERROR = 46;
|
|
{$EXTERNALSYM MAPI_DIAG_SECURE_MESSAGING_ERROR}
|
|
MAPI_DIAG_DOWNGRADING_IMPOSSIBLE = 47;
|
|
{$EXTERNALSYM MAPI_DIAG_DOWNGRADING_IMPOSSIBLE}
|
|
|
|
type
|
|
IMailUser = interface(IMAPIProp)
|
|
end;
|
|
{$EXTERNALSYM IMailUser}
|
|
|
|
|
|
{ IDistList Interface ----------------------------------------------------- }
|
|
|
|
IDistList = interface(IMAPIContainer)
|
|
function CreateEntry(cbEntryID: ULONG; lpEntryID: PEntryID;
|
|
ulCreateFlags: ULONG; out lppMAPIPropEntry: IMAPIProp): HResult; stdcall;
|
|
function CopyEntries(lpEntries: PEntryList; ulUIParam: ULONG;
|
|
lpProgress: IMAPIProgress; ulFlags: ULONG): HResult; stdcall;
|
|
function DeleteEntries(lpEntries: PEntryList; ulFlags: ULONG): HResult; stdcall;
|
|
function ResolveNames(lpPropTagArray: PSPropTagArray; ulFlags: ULONG;
|
|
lpAdrList: PAdrList; lpFlagList: PFlagList): HResult; stdcall;
|
|
end;
|
|
{$EXTERNALSYM IDistList}
|
|
|
|
{ IMAPIFolder Interface --------------------------------------------------- }
|
|
|
|
{ IMAPIFolder folder type (enum) }
|
|
|
|
const
|
|
FOLDER_ROOT = ULONG($00000000);
|
|
{$EXTERNALSYM FOLDER_ROOT}
|
|
FOLDER_GENERIC = ULONG($00000001);
|
|
{$EXTERNALSYM FOLDER_GENERIC}
|
|
FOLDER_SEARCH = ULONG($00000002);
|
|
{$EXTERNALSYM FOLDER_SEARCH}
|
|
|
|
{ CreateMessage }
|
|
//***** MAPI_DEFERRED_ERRORS ((ULONG) 0x00000008) below
|
|
//***** MAPI_ASSOCIATED ((ULONG) 0x00000040) below
|
|
|
|
{ CopyMessages }
|
|
|
|
MESSAGE_MOVE = ULONG($00000001);
|
|
{$EXTERNALSYM MESSAGE_MOVE}
|
|
MESSAGE_DIALOG = ULONG($00000002);
|
|
{$EXTERNALSYM MESSAGE_DIALOG}
|
|
//***** MAPI_DECLINE_OK ((ULONG) 0x00000004) above
|
|
|
|
{ CreateFolder }
|
|
|
|
OPEN_IF_EXISTS = ULONG($00000001);
|
|
{$EXTERNALSYM OPEN_IF_EXISTS}
|
|
//***** MAPI_DEFERRED_ERRORS ((ULONG) 0x00000008) below
|
|
//***** MAPI_UNICODE ((ULONG) 0x80000000) above
|
|
|
|
{ DeleteFolder }
|
|
|
|
DEL_MESSAGES = ULONG($00000001);
|
|
{$EXTERNALSYM DEL_MESSAGES}
|
|
FOLDER_DIALOG = ULONG($00000002);
|
|
{$EXTERNALSYM FOLDER_DIALOG}
|
|
DEL_FOLDERS = ULONG($00000004);
|
|
{$EXTERNALSYM DEL_FOLDERS}
|
|
|
|
{ EmptyFolder }
|
|
|
|
DEL_ASSOCIATED = ULONG($00000008);
|
|
{$EXTERNALSYM DEL_ASSOCIATED}
|
|
|
|
{ CopyFolder }
|
|
|
|
FOLDER_MOVE = ULONG($00000001);
|
|
{$EXTERNALSYM FOLDER_MOVE}
|
|
//***** FOLDER_DIALOG ((ULONG) 0x00000002) above
|
|
//***** MAPI_DECLINE_OK ((ULONG) 0x00000004) above
|
|
COPY_SUBFOLDERS = ULONG($00000010);
|
|
{$EXTERNALSYM COPY_SUBFOLDERS}
|
|
//***** MAPI_UNICODE ((ULONG) 0x80000000) above
|
|
|
|
|
|
{ SetReadFlags }
|
|
|
|
//***** SUPPRESS_RECEIPT ((ULONG) 0x00000001) below
|
|
//***** MESSAGE_DIALOG ((ULONG) 0x00000002) above
|
|
//***** CLEAR_READ_FLAG ((ULONG) 0x00000004) below
|
|
//***** MAPI_DEFERRED_ERRORS ((ULONG) 0x00000008) below
|
|
GENERATE_RECEIPT_ONLY = ULONG($00000010);
|
|
{$EXTERNALSYM GENERATE_RECEIPT_ONLY}
|
|
|
|
|
|
{ GetMessageStatus }
|
|
|
|
MSGSTATUS_HIGHLIGHTED = ULONG($00000001);
|
|
{$EXTERNALSYM MSGSTATUS_HIGHLIGHTED}
|
|
MSGSTATUS_TAGGED = ULONG($00000002);
|
|
{$EXTERNALSYM MSGSTATUS_TAGGED}
|
|
MSGSTATUS_HIDDEN = ULONG($00000004);
|
|
{$EXTERNALSYM MSGSTATUS_HIDDEN}
|
|
MSGSTATUS_DELMARKED = ULONG($00000008);
|
|
{$EXTERNALSYM MSGSTATUS_DELMARKED}
|
|
|
|
{ Bits for remote message status }
|
|
|
|
MSGSTATUS_REMOTE_DOWNLOAD = ULONG($00001000);
|
|
{$EXTERNALSYM MSGSTATUS_REMOTE_DOWNLOAD}
|
|
MSGSTATUS_REMOTE_DELETE = ULONG($00002000);
|
|
{$EXTERNALSYM MSGSTATUS_REMOTE_DELETE}
|
|
|
|
{ SaveContentsSort }
|
|
|
|
RECURSIVE_SORT = ULONG($00000002);
|
|
{$EXTERNALSYM RECURSIVE_SORT}
|
|
|
|
{ PR_STATUS property }
|
|
|
|
FLDSTATUS_HIGHLIGHTED = ULONG($00000001);
|
|
{$EXTERNALSYM FLDSTATUS_HIGHLIGHTED}
|
|
FLDSTATUS_TAGGED = ULONG($00000002);
|
|
{$EXTERNALSYM FLDSTATUS_TAGGED}
|
|
FLDSTATUS_HIDDEN = ULONG($00000004);
|
|
{$EXTERNALSYM FLDSTATUS_HIDDEN}
|
|
FLDSTATUS_DELMARKED = ULONG($00000008);
|
|
{$EXTERNALSYM FLDSTATUS_DELMARKED}
|
|
|
|
|
|
{ IMsgStore Interface ----------------------------------------------------- }
|
|
|
|
{ PR_STORE_SUPPORT_MASK bits }
|
|
const
|
|
STORE_ENTRYID_UNIQUE = ULONG($00000001);
|
|
{$EXTERNALSYM STORE_ENTRYID_UNIQUE}
|
|
STORE_READONLY = ULONG($00000002);
|
|
{$EXTERNALSYM STORE_READONLY}
|
|
STORE_SEARCH_OK = ULONG($00000004);
|
|
{$EXTERNALSYM STORE_SEARCH_OK}
|
|
STORE_MODIFY_OK = ULONG($00000008);
|
|
{$EXTERNALSYM STORE_MODIFY_OK}
|
|
STORE_CREATE_OK = ULONG($00000010);
|
|
{$EXTERNALSYM STORE_CREATE_OK}
|
|
STORE_ATTACH_OK = ULONG($00000020);
|
|
{$EXTERNALSYM STORE_ATTACH_OK}
|
|
STORE_OLE_OK = ULONG($00000040);
|
|
{$EXTERNALSYM STORE_OLE_OK}
|
|
STORE_SUBMIT_OK = ULONG($00000080);
|
|
{$EXTERNALSYM STORE_SUBMIT_OK}
|
|
STORE_NOTIFY_OK = ULONG($00000100);
|
|
{$EXTERNALSYM STORE_NOTIFY_OK}
|
|
STORE_MV_PROPS_OK = ULONG($00000200);
|
|
{$EXTERNALSYM STORE_MV_PROPS_OK}
|
|
STORE_CATEGORIZE_OK = ULONG($00000400);
|
|
{$EXTERNALSYM STORE_CATEGORIZE_OK}
|
|
STORE_RTF_OK = ULONG($00000800);
|
|
{$EXTERNALSYM STORE_RTF_OK}
|
|
STORE_RESTRICTION_OK = ULONG($00001000);
|
|
{$EXTERNALSYM STORE_RESTRICTION_OK}
|
|
STORE_SORT_OK = ULONG($00002000);
|
|
{$EXTERNALSYM STORE_SORT_OK}
|
|
|
|
{ PR_STORE_STATE bits, try not to collide with PR_STORE_SUPPORT_MASK }
|
|
|
|
STORE_HAS_SEARCHES = ULONG($01000000);
|
|
{$EXTERNALSYM STORE_HAS_SEARCHES}
|
|
|
|
{ OpenEntry() }
|
|
|
|
//***** MAPI_MODIFY ((ULONG) 0x00000001) above
|
|
//***** MAPI_DEFERRED_ERRORS ((ULONG) 0x00000008) below
|
|
//***** MAPI_BEST_ACCESS ((ULONG) 0x00000010) above
|
|
|
|
{ SetReceiveFolder() }
|
|
|
|
//***** MAPI_UNICODE ((ULONG) 0x80000000) above
|
|
|
|
{ GetReceiveFolder() }
|
|
|
|
//***** MAPI_UNICODE ((ULONG) 0x80000000) above
|
|
|
|
{ GetReceiveFolderTable() }
|
|
|
|
//***** MAPI_DEFERRED_ERRORS ((ULONG) 0x00000008) below
|
|
|
|
{ StoreLogoff() }
|
|
|
|
LOGOFF_NO_WAIT = ULONG($00000001);
|
|
{$EXTERNALSYM LOGOFF_NO_WAIT}
|
|
LOGOFF_ORDERLY = ULONG($00000002);
|
|
{$EXTERNALSYM LOGOFF_ORDERLY}
|
|
LOGOFF_PURGE = ULONG($00000004);
|
|
{$EXTERNALSYM LOGOFF_PURGE}
|
|
LOGOFF_ABORT = ULONG($00000008);
|
|
{$EXTERNALSYM LOGOFF_ABORT}
|
|
LOGOFF_QUIET = ULONG($00000010);
|
|
{$EXTERNALSYM LOGOFF_QUIET}
|
|
|
|
LOGOFF_COMPLETE = ULONG($00010000);
|
|
{$EXTERNALSYM LOGOFF_COMPLETE}
|
|
LOGOFF_INBOUND = ULONG($00020000);
|
|
{$EXTERNALSYM LOGOFF_INBOUND}
|
|
LOGOFF_OUTBOUND = ULONG($00040000);
|
|
{$EXTERNALSYM LOGOFF_OUTBOUND}
|
|
LOGOFF_OUTBOUND_QUEUE = ULONG($00080000);
|
|
{$EXTERNALSYM LOGOFF_OUTBOUND_QUEUE}
|
|
|
|
{ SetLockState() }
|
|
|
|
MSG_LOCKED = ULONG($00000001);
|
|
{$EXTERNALSYM MSG_LOCKED}
|
|
MSG_UNLOCKED = ULONG($00000000);
|
|
{$EXTERNALSYM MSG_UNLOCKED}
|
|
|
|
{ Flag bits for PR_VALID_FOLDER_MASK }
|
|
|
|
FOLDER_IPM_SUBTREE_VALID = ULONG($00000001);
|
|
{$EXTERNALSYM FOLDER_IPM_SUBTREE_VALID}
|
|
FOLDER_IPM_INBOX_VALID = ULONG($00000002);
|
|
{$EXTERNALSYM FOLDER_IPM_INBOX_VALID}
|
|
FOLDER_IPM_OUTBOX_VALID = ULONG($00000004);
|
|
{$EXTERNALSYM FOLDER_IPM_OUTBOX_VALID}
|
|
FOLDER_IPM_WASTEBASKET_VALID = ULONG($00000008);
|
|
{$EXTERNALSYM FOLDER_IPM_WASTEBASKET_VALID}
|
|
FOLDER_IPM_SENTMAIL_VALID = ULONG($00000010);
|
|
{$EXTERNALSYM FOLDER_IPM_SENTMAIL_VALID}
|
|
FOLDER_VIEWS_VALID = ULONG($00000020);
|
|
{$EXTERNALSYM FOLDER_VIEWS_VALID}
|
|
FOLDER_COMMON_VIEWS_VALID = ULONG($00000040);
|
|
{$EXTERNALSYM FOLDER_COMMON_VIEWS_VALID}
|
|
FOLDER_FINDER_VALID = ULONG($00000080);
|
|
{$EXTERNALSYM FOLDER_FINDER_VALID}
|
|
|
|
{ IMessage Interface ------------------------------------------------------ }
|
|
|
|
{ SubmitMessage }
|
|
|
|
const
|
|
FORCE_SUBMIT = ULONG($00000001);
|
|
{$EXTERNALSYM FORCE_SUBMIT}
|
|
|
|
{ Flags defined in PR_MESSAGE_FLAGS }
|
|
|
|
MSGFLAG_READ = ULONG($00000001);
|
|
{$EXTERNALSYM MSGFLAG_READ}
|
|
MSGFLAG_UNMODIFIED = ULONG($00000002);
|
|
{$EXTERNALSYM MSGFLAG_UNMODIFIED}
|
|
MSGFLAG_SUBMIT = ULONG($00000004);
|
|
{$EXTERNALSYM MSGFLAG_SUBMIT}
|
|
MSGFLAG_UNSENT = ULONG($00000008);
|
|
{$EXTERNALSYM MSGFLAG_UNSENT}
|
|
MSGFLAG_HASATTACH = ULONG($00000010);
|
|
{$EXTERNALSYM MSGFLAG_HASATTACH}
|
|
MSGFLAG_FROMME = ULONG($00000020);
|
|
{$EXTERNALSYM MSGFLAG_FROMME}
|
|
MSGFLAG_ASSOCIATED = ULONG($00000040);
|
|
{$EXTERNALSYM MSGFLAG_ASSOCIATED}
|
|
MSGFLAG_RESEND = ULONG($00000080);
|
|
{$EXTERNALSYM MSGFLAG_RESEND}
|
|
MSGFLAG_RN_PENDING = ULONG($00000100);
|
|
{$EXTERNALSYM MSGFLAG_RN_PENDING}
|
|
MSGFLAG_NRN_PENDING = ULONG($00000200);
|
|
{$EXTERNALSYM MSGFLAG_NRN_PENDING}
|
|
|
|
{ Flags defined in PR_SUBMIT_FLAGS }
|
|
|
|
SUBMITFLAG_LOCKED = ULONG($00000001);
|
|
{$EXTERNALSYM SUBMITFLAG_LOCKED}
|
|
SUBMITFLAG_PREPROCESS = ULONG($00000002);
|
|
{$EXTERNALSYM SUBMITFLAG_PREPROCESS}
|
|
|
|
{ GetAttachmentTable() }
|
|
//***** MAPI_UNICODE ((ULONG) 0x80000000) above
|
|
|
|
{ GetRecipientTable() }
|
|
//***** MAPI_UNICODE ((ULONG) 0x80000000) above
|
|
|
|
{ ModifyRecipients }
|
|
|
|
{ ((ULONG) 0x00000001 is not a valid flag on ModifyRecipients. }
|
|
MODRECIP_ADD = ULONG($00000002);
|
|
{$EXTERNALSYM MODRECIP_ADD}
|
|
MODRECIP_MODIFY = ULONG($00000004);
|
|
{$EXTERNALSYM MODRECIP_MODIFY}
|
|
MODRECIP_REMOVE = ULONG($00000008);
|
|
{$EXTERNALSYM MODRECIP_REMOVE}
|
|
|
|
{ SetReadFlag }
|
|
|
|
SUPPRESS_RECEIPT = ULONG($00000001);
|
|
{$EXTERNALSYM SUPPRESS_RECEIPT}
|
|
CLEAR_READ_FLAG = ULONG($00000004);
|
|
{$EXTERNALSYM CLEAR_READ_FLAG}
|
|
//***** MAPI_DEFERRED_ERRORS ((ULONG) 0x00000008) below
|
|
//***** GENERATE_RECEIPT_ONLY ((ULONG) 0x00000010) above
|
|
CLEAR_RN_PENDING = ULONG($00000020);
|
|
{$EXTERNALSYM CLEAR_RN_PENDING}
|
|
CLEAR_NRN_PENDING = ULONG($00000040);
|
|
{$EXTERNALSYM CLEAR_NRN_PENDING}
|
|
|
|
{ DeleteAttach }
|
|
|
|
ATTACH_DIALOG = ULONG($00000001);
|
|
{$EXTERNALSYM ATTACH_DIALOG}
|
|
|
|
{ PR_SECURITY values }
|
|
SECURITY_SIGNED = ULONG($00000001);
|
|
{$EXTERNALSYM SECURITY_SIGNED}
|
|
SECURITY_ENCRYPTED = ULONG($00000002);
|
|
{$EXTERNALSYM SECURITY_ENCRYPTED}
|
|
|
|
{ PR_PRIORITY values }
|
|
PRIO_URGENT = LongInt(1);
|
|
{$EXTERNALSYM PRIO_URGENT}
|
|
PRIO_NORMAL = LongInt(0);
|
|
{$EXTERNALSYM PRIO_NORMAL}
|
|
PRIO_NONURGENT = LongInt(-1);
|
|
{$EXTERNALSYM PRIO_NONURGENT}
|
|
|
|
{ PR_SENSITIVITY values }
|
|
SENSITIVITY_NONE = ULONG($00000000);
|
|
{$EXTERNALSYM SENSITIVITY_NONE}
|
|
SENSITIVITY_PERSONAL = ULONG($00000001);
|
|
{$EXTERNALSYM SENSITIVITY_PERSONAL}
|
|
SENSITIVITY_PRIVATE = ULONG($00000002);
|
|
{$EXTERNALSYM SENSITIVITY_PRIVATE}
|
|
SENSITIVITY_COMPANY_CONFIDENTIAL = ULONG($00000003);
|
|
{$EXTERNALSYM SENSITIVITY_COMPANY_CONFIDENTIAL}
|
|
|
|
{ PR_IMPORTANCE values }
|
|
IMPORTANCE_LOW = LongInt(0);
|
|
{$EXTERNALSYM IMPORTANCE_LOW}
|
|
IMPORTANCE_NORMAL = LongInt(1);
|
|
{$EXTERNALSYM IMPORTANCE_NORMAL}
|
|
IMPORTANCE_HIGH = LongInt(2);
|
|
{$EXTERNALSYM IMPORTANCE_HIGH}
|
|
|
|
{ IAttach Interface ------------------------------------------------------- }
|
|
|
|
{ IAttach attachment methods: PR_ATTACH_METHOD values }
|
|
|
|
const
|
|
NO_ATTACHMENT = ULONG($00000000);
|
|
{$EXTERNALSYM NO_ATTACHMENT}
|
|
ATTACH_BY_VALUE = ULONG($00000001);
|
|
{$EXTERNALSYM ATTACH_BY_VALUE}
|
|
ATTACH_BY_REFERENCE = ULONG($00000002);
|
|
{$EXTERNALSYM ATTACH_BY_REFERENCE}
|
|
ATTACH_BY_REF_RESOLVE = ULONG($00000003);
|
|
{$EXTERNALSYM ATTACH_BY_REF_RESOLVE}
|
|
ATTACH_BY_REF_ONLY = ULONG($00000004);
|
|
{$EXTERNALSYM ATTACH_BY_REF_ONLY}
|
|
ATTACH_EMBEDDED_MSG = ULONG($00000005);
|
|
{$EXTERNALSYM ATTACH_EMBEDDED_MSG}
|
|
ATTACH_OLE = ULONG($00000006);
|
|
{$EXTERNALSYM ATTACH_OLE}
|
|
|
|
{ Address Book interface definition }
|
|
|
|
{ ADRPARM ulFlags - top 4 bits used for versioning }
|
|
|
|
function GET_ADRPARM_VERSION(ulFlags: ULONG): ULONG;
|
|
{$EXTERNALSYM GET_ADRPARM_VERSION}
|
|
function SET_ADRPARM_VERSION(ulFlags, ulVersion: ULONG): ULONG;
|
|
{$EXTERNALSYM SET_ADRPARM_VERSION}
|
|
|
|
{ Current versions of ADRPARM }
|
|
const
|
|
ADRPARM_HELP_CTX = ULONG($00000000);
|
|
{$EXTERNALSYM ADRPARM_HELP_CTX}
|
|
|
|
{ ulFlags - bit fields }
|
|
DIALOG_MODAL = ULONG($00000001);
|
|
{$EXTERNALSYM DIALOG_MODAL}
|
|
DIALOG_SDI = ULONG($00000002);
|
|
{$EXTERNALSYM DIALOG_SDI}
|
|
DIALOG_OPTIONS = ULONG($00000004);
|
|
{$EXTERNALSYM DIALOG_OPTIONS}
|
|
ADDRESS_ONE = ULONG($00000008);
|
|
{$EXTERNALSYM ADDRESS_ONE}
|
|
AB_SELECTONLY = ULONG($00000010);
|
|
{$EXTERNALSYM AB_SELECTONLY}
|
|
AB_RESOLVE = ULONG($00000020);
|
|
{$EXTERNALSYM AB_RESOLVE}
|
|
|
|
// ---------------------------------
|
|
// PR_DISPLAY_TYPEs
|
|
//
|
|
// * These standard display types are
|
|
// * by default handled by MAPI.
|
|
// * They have default icons associated
|
|
// * with them.
|
|
|
|
{ For address book contents tables }
|
|
DT_MAILUSER = ULONG($00000000);
|
|
{$EXTERNALSYM DT_MAILUSER}
|
|
DT_DISTLIST = ULONG($00000001);
|
|
{$EXTERNALSYM DT_DISTLIST}
|
|
DT_FORUM = ULONG($00000002);
|
|
{$EXTERNALSYM DT_FORUM}
|
|
DT_AGENT = ULONG($00000003);
|
|
{$EXTERNALSYM DT_AGENT}
|
|
DT_ORGANIZATION = ULONG($00000004);
|
|
{$EXTERNALSYM DT_ORGANIZATION}
|
|
DT_PRIVATE_DISTLIST = ULONG($00000005);
|
|
{$EXTERNALSYM DT_PRIVATE_DISTLIST}
|
|
DT_REMOTE_MAILUSER = ULONG($00000006);
|
|
{$EXTERNALSYM DT_REMOTE_MAILUSER}
|
|
|
|
{ For address book hierarchy tables }
|
|
DT_MODIFIABLE = ULONG($00010000);
|
|
{$EXTERNALSYM DT_MODIFIABLE}
|
|
DT_GLOBAL = ULONG($00020000);
|
|
{$EXTERNALSYM DT_GLOBAL}
|
|
DT_LOCAL = ULONG($00030000);
|
|
{$EXTERNALSYM DT_LOCAL}
|
|
DT_WAN = ULONG($00040000);
|
|
{$EXTERNALSYM DT_WAN}
|
|
DT_NOT_SPECIFIC = ULONG($00050000);
|
|
{$EXTERNALSYM DT_NOT_SPECIFIC}
|
|
|
|
{ For folder hierarchy tables }
|
|
DT_FOLDER = ULONG($01000000);
|
|
{$EXTERNALSYM DT_FOLDER}
|
|
DT_FOLDER_LINK = ULONG($02000000);
|
|
{$EXTERNALSYM DT_FOLDER_LINK}
|
|
|
|
{ Accelerator callback for DIALOG_SDI form of AB UI }
|
|
type
|
|
PFnABSDI = ^TAccelerateABSDI;
|
|
ACCELERATEABSDI = function (ulUIParam: ULONG; lpvmsg: Pointer): BOOL; stdcall;
|
|
{$EXTERNALSYM ACCELERATEABSDI}
|
|
TAccelerateABSDI = ACCELERATEABSDI;
|
|
|
|
{ Callback to application telling it that the DIALOG_SDI form of the
|
|
AB UI has been dismissed. This is so that the above LPFNABSDI
|
|
function doesn't keep being called. }
|
|
|
|
PFnDismiss = ^TDismissModeless;
|
|
DISMISSMODELESS = function (ulUIParam: ULONG; lpvContext: Pointer): Pointer; stdcall;
|
|
{$EXTERNALSYM DISMISSMODELESS}
|
|
TDismissModeless = DISMISSMODELESS;
|
|
|
|
{ Prototype for the client function hooked to an optional button on
|
|
the address book dialog }
|
|
|
|
PFnButton = ^TFnButton;
|
|
FNBUTTON = function (ulUIParam: ULONG; lpvContext: Pointer; cbEntryID: ULONG;
|
|
lpSelection: PEntryID; ulFlags: ULONG): SCODE; stdcall;
|
|
{$EXTERNALSYM FNBUTTON}
|
|
TFnButton = FNBUTTON;
|
|
|
|
{ Parameters for the address book dialog }
|
|
|
|
PAdrParam = ^TAdrParam;
|
|
_ADRPARM = record
|
|
cbABContEntryID: ULONG;
|
|
lpABContEntryID: PEntryID;
|
|
ulFlags: ULONG;
|
|
lpReserved: Pointer;
|
|
ulHelpContext: ULONG;
|
|
lpszHelpFileName: LPTSTR;
|
|
lpfnABSDI: PFnABSDI;
|
|
lpfnDismiss: PFnDismiss;
|
|
lpvDismissContext: Pointer;
|
|
lpszCaption: LPTSTR;
|
|
lpszNewEntryTitle: LPTSTR;
|
|
lpszDestWellsTitle: LPTSTR;
|
|
cDestFields: ULONG;
|
|
nDestFieldFocus: ULONG;
|
|
lppszDestTitles: ^LPTSTR;
|
|
lpulDestComps: ^ULONG;
|
|
lpContRestriction: PSRestriction;
|
|
lpHierRestriction: PSRestriction;
|
|
end;
|
|
{$EXTERNALSYM _ADRPARM}
|
|
TAdrParam = _ADRPARM;
|
|
ADRPARM = _ADRPARM;
|
|
{$EXTERNALSYM ADRPARM}
|
|
|
|
{ Random flags }
|
|
const
|
|
{ Flag set in MAPI one off entryids }
|
|
MAPI_ONE_OFF_NO_RICH_INFO = $0001;
|
|
{$EXTERNALSYM MAPI_ONE_OFF_NO_RICH_INFO}
|
|
|
|
{ Flag for deferred error }
|
|
MAPI_DEFERRED_ERRORS = ULONG($00000008);
|
|
{$EXTERNALSYM MAPI_DEFERRED_ERRORS}
|
|
|
|
{ Flag for creating and using Folder Associated Information Messages }
|
|
MAPI_ASSOCIATED = ULONG($00000040);
|
|
{$EXTERNALSYM MAPI_ASSOCIATED}
|
|
|
|
{ Flags for OpenMessageStore() }
|
|
|
|
MDB_NO_DIALOG = ULONG($00000001);
|
|
{$EXTERNALSYM MDB_NO_DIALOG}
|
|
MDB_WRITE = ULONG($00000004);
|
|
{$EXTERNALSYM MDB_WRITE}
|
|
//***** MAPI_DEFERRED_ERRORS ((ULONG) 0x00000008) above
|
|
//***** MAPI_BEST_ACCESS ((ULONG) 0x00000010) above
|
|
MDB_TEMPORARY = ULONG($00000020);
|
|
{$EXTERNALSYM MDB_TEMPORARY}
|
|
MDB_NO_MAIL = ULONG($00000080);
|
|
{$EXTERNALSYM MDB_NO_MAIL}
|
|
|
|
{ Flags for OpenAddressBook }
|
|
|
|
AB_NO_DIALOG = ULONG($00000001);
|
|
{$EXTERNALSYM AB_NO_DIALOG}
|
|
|
|
{ IMAPIControl Interface -------------------------------------------------- }
|
|
|
|
{ Interface used in controls (particularly the button) defined by Display Tables }
|
|
|
|
{ Flags for GetState }
|
|
|
|
MAPI_ENABLED = ULONG($00000000);
|
|
{$EXTERNALSYM MAPI_ENABLED}
|
|
MAPI_DISABLED = ULONG($00000001);
|
|
{$EXTERNALSYM MAPI_DISABLED}
|
|
|
|
type
|
|
IMAPIControl = interface(IUnknown)
|
|
function GetLastError(hResult: HRESULT; ulFlags: ULONG;
|
|
var lppMAPIError: TMapiError): HResult; stdcall;
|
|
function Activate(ulFlags, ulUIParam: ULONG): HResult; stdcall;
|
|
function GetState(ulFlags: ULONG; var lpulState: ULONG): HResult; stdcall;
|
|
end;
|
|
{$EXTERNALSYM IMAPIControl}
|
|
|
|
{ Display Tables ---------------------------------------------------------- }
|
|
|
|
{ Flags used in display tables - that is, PR_CONTROL_FLAGS }
|
|
|
|
const
|
|
DT_MULTILINE = ULONG($00000001);
|
|
{$EXTERNALSYM DT_MULTILINE}
|
|
DT_EDITABLE = ULONG($00000002);
|
|
{$EXTERNALSYM DT_EDITABLE}
|
|
DT_REQUIRED = ULONG($00000004);
|
|
{$EXTERNALSYM DT_REQUIRED}
|
|
DT_SET_IMMEDIATE = ULONG($00000008);
|
|
{$EXTERNALSYM DT_SET_IMMEDIATE}
|
|
DT_PASSWORD_EDIT = ULONG($00000010);
|
|
{$EXTERNALSYM DT_PASSWORD_EDIT}
|
|
DT_ACCEPT_DBCS = ULONG($00000020);
|
|
{$EXTERNALSYM DT_ACCEPT_DBCS}
|
|
DT_SET_SELECTION = ULONG($00000040);
|
|
{$EXTERNALSYM DT_SET_SELECTION}
|
|
|
|
{ Display Table structures }
|
|
|
|
DTCT_LABEL = ULONG($00000000);
|
|
{$EXTERNALSYM DTCT_LABEL}
|
|
DTCT_EDIT = ULONG($00000001);
|
|
{$EXTERNALSYM DTCT_EDIT}
|
|
DTCT_LBX = ULONG($00000002);
|
|
{$EXTERNALSYM DTCT_LBX}
|
|
DTCT_COMBOBOX = ULONG($00000003);
|
|
{$EXTERNALSYM DTCT_COMBOBOX}
|
|
DTCT_DDLBX = ULONG($00000004);
|
|
{$EXTERNALSYM DTCT_DDLBX}
|
|
DTCT_CHECKBOX = ULONG($00000005);
|
|
{$EXTERNALSYM DTCT_CHECKBOX}
|
|
DTCT_GROUPBOX = ULONG($00000006);
|
|
{$EXTERNALSYM DTCT_GROUPBOX}
|
|
DTCT_BUTTON = ULONG($00000007);
|
|
{$EXTERNALSYM DTCT_BUTTON}
|
|
DTCT_PAGE = ULONG($00000008);
|
|
{$EXTERNALSYM DTCT_PAGE}
|
|
DTCT_RADIOBUTTON = ULONG($00000009);
|
|
{$EXTERNALSYM DTCT_RADIOBUTTON}
|
|
DTCT_MVLISTBOX = ULONG($0000000B);
|
|
{$EXTERNALSYM DTCT_MVLISTBOX}
|
|
DTCT_MVDDLBX = ULONG($0000000C);
|
|
{$EXTERNALSYM DTCT_MVDDLBX}
|
|
|
|
type
|
|
{ Labels }
|
|
PDTblLabel = ^TDTblLabel;
|
|
_DTBLLABEL = record
|
|
ulbLpszLabelName: ULONG;
|
|
ulFlags: ULONG;
|
|
end;
|
|
{$EXTERNALSYM _DTBLLABEL}
|
|
TDTblLabel = _DTBLLABEL;
|
|
DTBLLABEL = _DTBLLABEL;
|
|
{$EXTERNALSYM DTBLLABEL}
|
|
|
|
(*!!!
|
|
#define SizedDtblLabel(n,u) \
|
|
struct _DTBLLABEL_ ## u \
|
|
{ \
|
|
DTBLLABEL dtbllabel; \
|
|
TCHAR lpszLabelName[n]; \
|
|
} u
|
|
*)
|
|
|
|
{ Simple Text Edits }
|
|
PDTblEdit = ^TDTblEdit;
|
|
_DTBLEDIT = record
|
|
ulbLpszCharsAllowed: ULONG;
|
|
ulFlags: ULONG;
|
|
ulNumCharsAllowed: ULONG;
|
|
ulPropTag: ULONG;
|
|
end;
|
|
{$EXTERNALSYM _DTBLEDIT}
|
|
TDTblEdit = _DTBLEDIT;
|
|
DTBLEDIT = _DTBLEDIT;
|
|
{$EXTERNALSYM DTBLEDIT}
|
|
|
|
(*!!!
|
|
#define SizedDtblEdit(n,u) \
|
|
struct _DTBLEDIT_ ## u \
|
|
{ \
|
|
DTBLEDIT dtbledit; \
|
|
TCHAR lpszCharsAllowed[n]; \
|
|
} u
|
|
*)
|
|
|
|
{ List Box }
|
|
const
|
|
MAPI_NO_HBAR = ULONG($00000001);
|
|
{$EXTERNALSYM MAPI_NO_HBAR}
|
|
MAPI_NO_VBAR = ULONG($00000002);
|
|
{$EXTERNALSYM MAPI_NO_VBAR}
|
|
|
|
type
|
|
PDTblLbx = ^TDTblLbx;
|
|
_DTBLLBX = record
|
|
ulFlags: ULONG;
|
|
ulPRSetProperty: ULONG;
|
|
ulPRTableName: ULONG;
|
|
end;
|
|
{$EXTERNALSYM _DTBLLBX}
|
|
TDTblLbx = _DTBLLBX;
|
|
DTBLLBX = _DTBLLBX;
|
|
{$EXTERNALSYM DTBLLBX}
|
|
|
|
{ Combo Box }
|
|
PDTblComboBox = ^TDTblComboBox;
|
|
_DTBLCOMBOBOX = record
|
|
ulbLpszCharsAllowed: ULONG;
|
|
ulFlags: ULONG;
|
|
ulNumCharsAllowed: ULONG;
|
|
ulPRPropertyName: ULONG;
|
|
ulPRTableName: ULONG;
|
|
end;
|
|
{$EXTERNALSYM _DTBLCOMBOBOX}
|
|
TDTblComboBox = _DTBLCOMBOBOX;
|
|
DTBLCOMBOBOX = _DTBLCOMBOBOX;
|
|
{$EXTERNALSYM DTBLCOMBOBOX}
|
|
|
|
(*!!!
|
|
#define SizedDtblComboBox(n,u) \
|
|
struct _DTBLCOMBOBOX_ ## u \
|
|
{ \
|
|
DTBLCOMBOBOX dtblcombobox; \
|
|
TCHAR lpszCharsAllowed[n]; \
|
|
} u
|
|
*)
|
|
|
|
{ Drop Down }
|
|
PDTblDDLbx = ^TDTblDDLbx;
|
|
_DTBLDDLBX = record
|
|
ulFlags: ULONG;
|
|
ulPRDisplayProperty: ULONG;
|
|
ulPRSetProperty: ULONG;
|
|
ulPRTableName: ULONG;
|
|
end;
|
|
{$EXTERNALSYM _DTBLDDLBX}
|
|
TDTblDDLbx = _DTBLDDLBX;
|
|
DTBLDDLBX = _DTBLDDLBX;
|
|
{$EXTERNALSYM DTBLDDLBX}
|
|
|
|
{ Check Box }
|
|
PDTblCheckBox = ^TDTblCheckBox;
|
|
_DTBLCHECKBOX = record
|
|
ulbLpszLabel: ULONG;
|
|
ulFlags: ULONG;
|
|
ulPRPropertyName: ULONG;
|
|
end;
|
|
{$EXTERNALSYM _DTBLCHECKBOX}
|
|
TDTblCheckBox = _DTBLCHECKBOX;
|
|
DTBLCHECKBOX = _DTBLCHECKBOX;
|
|
{$EXTERNALSYM DTBLCHECKBOX}
|
|
|
|
(*!!!
|
|
#define SizedDtblCheckBox(n,u) \
|
|
struct _DTBLCHECKBOX_ ## u \
|
|
{ \
|
|
DTBLCHECKBOX dtblcheckbox; \
|
|
TCHAR lpszLabel[n]; \
|
|
} u
|
|
*)
|
|
|
|
{ Group Box }
|
|
PDTblGroupBox = ^TDTblGroupBox;
|
|
_DTBLGROUPBOX = record
|
|
ulbLpszLabel: ULONG;
|
|
ulFlags: ULONG;
|
|
end;
|
|
{$EXTERNALSYM _DTBLGROUPBOX}
|
|
TDTblGroupBox = _DTBLGROUPBOX;
|
|
DTBLGROUPBOX = _DTBLGROUPBOX;
|
|
{$EXTERNALSYM DTBLGROUPBOX}
|
|
|
|
(*!!!
|
|
#define SizedDtblGroupBox(n,u) \
|
|
struct _DTBLGROUPBOX_ ## u \
|
|
{ \
|
|
DTBLGROUPBOX dtblgroupbox; \
|
|
TCHAR lpszLabel[n]; \
|
|
} u
|
|
*)
|
|
|
|
{ Button control }
|
|
PDTblButton = ^TDTblButton;
|
|
_DTBLBUTTON = record
|
|
ulbLpszLabel: ULONG;
|
|
ulFlags: ULONG;
|
|
ulPRControl: ULONG;
|
|
end;
|
|
{$EXTERNALSYM _DTBLBUTTON}
|
|
TDTblButton = _DTBLBUTTON;
|
|
DTBLBUTTON = _DTBLBUTTON;
|
|
{$EXTERNALSYM DTBLBUTTON}
|
|
|
|
(*!!!
|
|
#define SizedDtblButton(n,u) \
|
|
struct _DTBLBUTTON_ ## u \
|
|
{ \
|
|
DTBLBUTTON dtblbutton; \
|
|
TCHAR lpszLabel[n]; \
|
|
} u
|
|
*)
|
|
|
|
{ Pages }
|
|
PDTblPage = ^TDTblPage;
|
|
_DTBLPAGE = record
|
|
ulbLpszLabel: ULONG;
|
|
ulFlags: ULONG;
|
|
ulbLpszComponent: ULONG;
|
|
ulContext: ULONG;
|
|
end;
|
|
{$EXTERNALSYM _DTBLPAGE}
|
|
TDTblPage = _DTBLPAGE;
|
|
DTBLPAGE = _DTBLPAGE;
|
|
{$EXTERNALSYM DTBLPAGE}
|
|
|
|
(*!!!
|
|
#define SizedDtblPage(n,n1,u) \
|
|
struct _DTBLPAGE_ ## u \
|
|
{ \
|
|
DTBLPAGE dtblpage; \
|
|
TCHAR lpszLabel[n]; \
|
|
TCHAR lpszComponent[n1]; \
|
|
} u
|
|
*)
|
|
|
|
{ Radio button }
|
|
PDTblRadioButton = ^TDTblRadioButton;
|
|
_DTBLRADIOBUTTON = record
|
|
ulbLpszLabel: ULONG;
|
|
ulFlags: ULONG;
|
|
ulcButtons: ULONG;
|
|
ulPropTag: ULONG;
|
|
lReturnValue: LongInt;
|
|
end;
|
|
{$EXTERNALSYM _DTBLRADIOBUTTON}
|
|
TDTblRadioButton = _DTBLRADIOBUTTON;
|
|
DTBLRADIOBUTTON = _DTBLRADIOBUTTON;
|
|
{$EXTERNALSYM DTBLRADIOBUTTON}
|
|
|
|
(*!!!
|
|
#define SizedDtblRadioButton(n,u) \
|
|
struct _DTBLRADIOBUTTON_ ## u \
|
|
{ \
|
|
DTBLRADIOBUTTON dtblradiobutton; \
|
|
TCHAR lpszLabel[n]; \
|
|
} u
|
|
*)
|
|
|
|
{ MultiValued listbox }
|
|
PDTblMvListBox = ^TDTblMvListBox;
|
|
_DTBLMVLISTBOX = record
|
|
ulFlags: ULONG;
|
|
ulMVPropTag: ULONG;
|
|
end;
|
|
{$EXTERNALSYM _DTBLMVLISTBOX}
|
|
TDTblMvListBox = _DTBLMVLISTBOX;
|
|
DTBLMVLISTBOX = _DTBLMVLISTBOX;
|
|
{$EXTERNALSYM DTBLMVLISTBOX}
|
|
|
|
{ MultiValued dropdown }
|
|
PDTblMvDDLbx = ^TDTblMvDDLbx;
|
|
_DTBLMVDDLBX = record
|
|
ulFlags: ULONG;
|
|
ulMVPropTag: ULONG;
|
|
end;
|
|
{$EXTERNALSYM _DTBLMVDDLBX}
|
|
TDTblMvDDLbx = _DTBLMVDDLBX;
|
|
DTBLMVDDLBX = _DTBLMVDDLBX;
|
|
{$EXTERNALSYM DTBLMVDDLBX}
|
|
|
|
{ IProviderAdmin Interface ---------------------------------------------- }
|
|
|
|
{ Flags for ConfigureMsgService }
|
|
const
|
|
UI_SERVICE = $00000002;
|
|
{$EXTERNALSYM UI_SERVICE}
|
|
SERVICE_UI_ALWAYS = $00000002; // Duplicate UI_SERVICE for consistency and compatibility
|
|
{$EXTERNALSYM SERVICE_UI_ALWAYS}
|
|
SERVICE_UI_ALLOWED = $00000010;
|
|
{$EXTERNALSYM SERVICE_UI_ALLOWED}
|
|
UI_CURRENT_PROVIDER_FIRST = $00000004;
|
|
{$EXTERNALSYM UI_CURRENT_PROVIDER_FIRST}
|
|
// MSG_SERVICE_UI_READ_ONLY 0x00000008 - in MAPISPI.H
|
|
|
|
{ GetProviderTable() }
|
|
//***** MAPI_UNICODE ((ULONG) 0x80000000) above
|
|
|
|
{ Values for PR_RESOURCE_FLAGS in message service table }
|
|
|
|
type
|
|
IMessage = interface;
|
|
|
|
IMAPIFolder = interface(IMAPIContainer)
|
|
function CreateMessage(lpInterface: PIID; ulFlags: ULONG;
|
|
out lppMessage: IMessage): HResult; stdcall;
|
|
function CopyMessages(lpMsgList: PEntryList; lpInterface: PIID;
|
|
lpDestFolder: Pointer; ulUIParam: ULONG; lpProgress: IMAPIProgress;
|
|
ulFlags: ULONG): HResult; stdcall;
|
|
function DeleteMessages(lpMsgList: PEntryList; ulUIParam: ULONG;
|
|
lpProgress: IMAPIProgress; ulFlags: ULONG): HResult; stdcall;
|
|
function CreateFolder(ulFolderType: ULONG; lpszFolderName,
|
|
lpszFolderComment: LPTSTR; lpInterface: PIID; ulFlags: ULONG;
|
|
out lppFolder: IMAPIFolder): HResult; stdcall;
|
|
function CopyFolder(cbEntryID: ULONG; lpEntryID: PEntryID;
|
|
lpInterface: PIID; lpDestFolder: Pointer; lpszNewFolderName: LPTSTR;
|
|
ulUIParam: ULONG; lpProgress: IMAPIProgress; ulFlags: ULONG): HResult; stdcall;
|
|
function DeleteFolder(cbEntryID: ULONG; lpEntryID: PEntryID; ulUIParam: ULONG;
|
|
lpProgress: IMAPIProgress; ulFlags: ULONG): HResult; stdcall;
|
|
function SetReadFlags(lpMsgList: PEntryList; ulUIParam: ULONG;
|
|
lpProgress: IMAPIProgress; ulFlags: ULONG): HResult; stdcall;
|
|
function GetMessageStatus(cbEntryID: ULONG; lpEntryID: PEntryID;
|
|
ulFlags: ULONG; var lpulMessageStatus: ULONG): HResult; stdcall;
|
|
function SetMessageStatus(cbEntryID: ULONG; lpEntryID: PEntryID;
|
|
ulNewStatus, ulNewStatusMask: ULONG; var lpulOldStatus: ULONG): HResult; stdcall;
|
|
function SaveContentsSort(lpSortCriteria: PSSortOrderSet;
|
|
ulFlags: ULONG): HResult; stdcall;
|
|
function EmptyFolder(ulUIParam: ULONG; lpProgress: IMAPIProgress;
|
|
ulFlags: ULONG): HResult; stdcall;
|
|
end;
|
|
{$EXTERNALSYM IMAPIFolder}
|
|
|
|
IMsgStore = interface(IMAPIProp)
|
|
function Advise(cbEntryID: ULONG; lpEntryID: PEntryID; ulEventMask: ULONG;
|
|
lpAdviseSink: IMAPIAdviseSink; var lpulConnection: ULONG): HResult; stdcall;
|
|
function Unadvise(ulConnection: ULONG): HResult; stdcall;
|
|
function CompareEntryIDs(cbEntryID1: ULONG; lpEntryID1: PEntryID;
|
|
cbEntryID2: ULONG; lpEntryID2: PEntryID; ulFlags: ULONG;
|
|
var lpulResult: ULONG): HResult; stdcall;
|
|
function OpenEntry(cbEntryID: ULONG; lpEntryID: PEntryID;
|
|
lpInterface: PIID; ulFlags: ULONG; var lpulObjType: ULONG;
|
|
out lppUnk: IUnknown): HResult; stdcall;
|
|
function SetReceiveFolder(lpszMessageClass: LPTSTR; ulFlags, cbEntryID: ULONG;
|
|
lpEntryID: PEntryID): HResult; stdcall;
|
|
function GetReceiveFolder(lpszMessageClass: LPTSTR; ulFlags: ULONG;
|
|
var lpcbEntryID: ULONG; lppEntryID: PEntryID;
|
|
lppszExplicitClass: LPTSTR): HResult; stdcall;
|
|
function GetReceiveFolderTable(ulFlags: ULONG; out lppTable: IMAPITable): HResult; stdcall;
|
|
function StoreLogoff(var lpulFlags: ULONG): HResult; stdcall;
|
|
function AbortSubmit(cbEntryID: ULONG; lpEntryID: PEntryID;
|
|
ulFlags: ULONG): HResult; stdcall;
|
|
function GetOutgoingQueue(ulFlags: ULONG; out lppTable: IMAPITable): HResult; stdcall;
|
|
function SetLockState(lpMessage: IMessage; ulLockState: ULONG): HResult; stdcall;
|
|
function FinishedMsg(ulFlags, cbEntryID: ULONG; lpEntryID: PEntryID): HResult; stdcall;
|
|
function NotifyNewMail(lpNotification: PNotification): HResult; stdcall;
|
|
end;
|
|
{$EXTERNALSYM IMsgStore}
|
|
|
|
IAttach = interface(IMAPIProp)
|
|
end;
|
|
{$EXTERNALSYM IAttach}
|
|
|
|
IMessage = interface(IMAPIProp)
|
|
function GetAttachmentTable(ulFlags: ULONG; out lppTable: IMAPITable): HResult; stdcall;
|
|
function OpenAttach(ulAttachmentNum: ULONG; lpInterface: PIID;
|
|
ulFlags: ULONG; out lppAttach: IAttach): HResult; stdcall;
|
|
function CreateAttach(lpInterface: PIID; ulFlags: ULONG;
|
|
var lpulAttachmentNum: ULONG; out lppAttach: IAttach): HResult; stdcall;
|
|
function DeleteAttach(ulAttachmentNum, ulUIParam: ULONG; lpProgress: IMAPIProgress;
|
|
ulFlags: ULONG): HResult; stdcall;
|
|
function GetRecipientTable(ulFlags: ULONG; out lppTable: IMAPITable): HResult; stdcall;
|
|
function ModifyRecipients(ulFlags: ULONG; lpMods: PAdrList): HResult; stdcall;
|
|
function SubmitMessage(ulFlags: ULONG): HResult; stdcall;
|
|
function SetReadFlag(ulFlags: ULONG): HResult; stdcall;
|
|
end;
|
|
{$EXTERNALSYM IMessage}
|
|
|
|
IProviderAdmin = interface(IUnknown)
|
|
function GetLastError(hResult: HRESULT; ulFlags: ULONG;
|
|
var lppMAPIError: TMapiError): HResult; stdcall;
|
|
function GetProviderTable(ulFlags: ULONG; out lppTable: IMAPITable): HResult; stdcall;
|
|
function CreateProvider(lpszProvider: LPTSTR; cValues: ULONG;
|
|
lpProps: PSPropValue; ulUIParam, ulFlags: ULONG; lpUID: TMapiUID): HResult; stdcall;
|
|
function DeleteProvider(lpUID: PMapiUID): HResult; stdcall;
|
|
function OpenProfileSection(lpUID: PMapiUID; lpInterface: PIID;
|
|
ulFlags: ULONG; out lppProfSect: IProfSect): HResult; stdcall;
|
|
end;
|
|
{$EXTERNALSYM IProviderAdmin}
|
|
{$ENDIF JWA_IMPLEMENTATIONSECTION}
|
|
|
|
{$IFNDEF JWA_OMIT_SECTIONS}
|
|
implementation
|
|
|
|
uses
|
|
SysUtils;
|
|
{$ENDIF JWA_OMIT_SECTIONS}
|
|
|
|
|
|
{$IFNDEF JWA_INTERFACESECTION}
|
|
|
|
function IsEqualMAPIUID(lpuid1, lpuid2: TMapiUID): Boolean;
|
|
begin
|
|
Result := CompareMem(@lpuid1, @lpuid2, Sizeof(TMapiUID));
|
|
end;
|
|
|
|
function PROP_TYPE(ulPropTag: ULONG): ULONG;
|
|
begin
|
|
Result := ulPropTag and PROP_TYPE_MASK;
|
|
end;
|
|
|
|
function PROP_ID(ulPropTag: ULONG): ULONG;
|
|
begin
|
|
Result := ulPropTag shr 16;
|
|
end;
|
|
|
|
function PROP_TAG(ulPropType, ulPropID: ULONG): ULONG;
|
|
begin
|
|
Result := (ulPropID shl 16) or ulPropType;
|
|
end;
|
|
|
|
function CHANGE_PROP_TYPE(ulPropTag, ulPropType: ULONG): ULONG;
|
|
begin
|
|
Result := (ULONG($FFFF0000) and ulPropTag) or ulPropType;
|
|
end;
|
|
|
|
function MVI_PROP(tag: ULONG): ULONG;
|
|
begin
|
|
Result := tag or MVI_FLAG;
|
|
end;
|
|
|
|
function GET_ADRPARM_VERSION(ulFlags: ULONG): ULONG;
|
|
begin
|
|
Result := ulFlags and $F0000000;
|
|
end;
|
|
|
|
function SET_ADRPARM_VERSION(ulFlags, ulVersion: ULONG): ULONG;
|
|
begin
|
|
Result := ulVersion or (ulFlags and $0FFFFFFF);
|
|
end;
|
|
|
|
{$ENDIF JWA_INTERFACESECTION}
|
|
|
|
{$IFNDEF JWA_OMIT_SECTIONS}
|
|
end.
|
|
{$ENDIF JWA_OMIT_SECTIONS}
|