Win32 API 日本語リファレンス
ホームSystem.AddressBook › OBJECT_NOTIFICATION

OBJECT_NOTIFICATION

構造体
サイズx64: 72 バイト / x86: 40 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
cbEntryIDDWORD4+0+0lpEntryID が指す対象オブジェクトのエントリIDサイズ。
lpEntryIDENTRYID*8/4+8+4通知対象オブジェクトのエントリIDへのポインター。
ulObjTypeDWORD4+16+8オブジェクトの種類を示す値(MAPI_MESSAGE等)。
cbParentIDDWORD4+20+12lpParentID が指す親オブジェクトのエントリIDサイズ。
lpParentIDENTRYID*8/4+24+16親オブジェクトのエントリIDへのポインター。
cbOldIDDWORD4+32+20lpOldID が指す変更前エントリIDのサイズ。
lpOldIDENTRYID*8/4+40+24移動/改名前のオブジェクトのエントリIDへのポインター。
cbOldParentIDDWORD4+48+28lpOldParentID が指す変更前親エントリIDのサイズ。
lpOldParentIDENTRYID*8/4+56+32移動前の親オブジェクトのエントリIDへのポインター。
lpPropTagArraySPropTagArray*8/4+64+36変更されたプロパティタグの配列へのポインター。

公式ドキュメント

適用対象: Outlook 2013 | Outlook 2016

コピーや変更など、変更が行われたオブジェクトに関する情報を格納します。

プロパティ
ヘッダー ファイル:
Mapidefs.h
typedef struct _OBJECT_NOTIFICATION
{
  ULONG cbEntryID;
  LPENTRYID lpEntryID;
  ULONG ulObjType;
  ULONG cbParentID;
  LPENTRYID lpParentID;
  ULONG cbOldID;
  LPENTRYID lpOldID;
  ULONG cbOldParentID;
  LPENTRYID lpOldParentID;
  LPSPropTagArray lpPropTagArray;
} OBJECT_NOTIFICATION;

解説(Remarks)

OBJECT_NOTIFICATION 構造体は、NOTIFICATION 構造体の info メンバーに含まれる構造体の共用体のメンバーの 1 つです。NOTIFICATION 構造体の info メンバーに OBJECT_NOTIFICATION 構造体が格納されている場合、NOTIFICATION 構造体の ulEventType メンバーには次のいずれかの種類のイベントが設定されます。

fnevSearchComplete イベントの種類で表される検索完了イベントは、1 つの検索フォルダーに対するドメインの初期検索が完了したことを示します。

元のオブジェクトに関する情報を格納する次のメンバーは、移動イベントとコピー イベントでのみ使用されます。

これらのメンバーは、他の種類のイベントには適用されません。

通知の詳細については、次の表に示すトピックを参照してください。

トピック 説明
Event Notification in MAPI
通知と通知イベントの全般的な概要です。
Handling Notifications
クライアントが通知をどのように処理すべきかについての解説です。
Supporting Event Notification
サービス プロバイダーが IMAPISupport メソッドを使用して通知を生成する方法についての解説です。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp)

各言語での定義

#include <windows.h>

// OBJECT_NOTIFICATION  (x64 72 / x86 40 バイト)
typedef struct OBJECT_NOTIFICATION {
    DWORD cbEntryID;
    ENTRYID* lpEntryID;
    DWORD ulObjType;
    DWORD cbParentID;
    ENTRYID* lpParentID;
    DWORD cbOldID;
    ENTRYID* lpOldID;
    DWORD cbOldParentID;
    ENTRYID* lpOldParentID;
    SPropTagArray* lpPropTagArray;
} OBJECT_NOTIFICATION;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct OBJECT_NOTIFICATION
{
    public uint cbEntryID;
    public IntPtr lpEntryID;
    public uint ulObjType;
    public uint cbParentID;
    public IntPtr lpParentID;
    public uint cbOldID;
    public IntPtr lpOldID;
    public uint cbOldParentID;
    public IntPtr lpOldParentID;
    public IntPtr lpPropTagArray;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure OBJECT_NOTIFICATION
    Public cbEntryID As UInteger
    Public lpEntryID As IntPtr
    Public ulObjType As UInteger
    Public cbParentID As UInteger
    Public lpParentID As IntPtr
    Public cbOldID As UInteger
    Public lpOldID As IntPtr
    Public cbOldParentID As UInteger
    Public lpOldParentID As IntPtr
    Public lpPropTagArray As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class OBJECT_NOTIFICATION(ctypes.Structure):
    _fields_ = [
        ("cbEntryID", wintypes.DWORD),
        ("lpEntryID", ctypes.c_void_p),
        ("ulObjType", wintypes.DWORD),
        ("cbParentID", wintypes.DWORD),
        ("lpParentID", ctypes.c_void_p),
        ("cbOldID", wintypes.DWORD),
        ("lpOldID", ctypes.c_void_p),
        ("cbOldParentID", wintypes.DWORD),
        ("lpOldParentID", ctypes.c_void_p),
        ("lpPropTagArray", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct OBJECT_NOTIFICATION {
    pub cbEntryID: u32,
    pub lpEntryID: *mut core::ffi::c_void,
    pub ulObjType: u32,
    pub cbParentID: u32,
    pub lpParentID: *mut core::ffi::c_void,
    pub cbOldID: u32,
    pub lpOldID: *mut core::ffi::c_void,
    pub cbOldParentID: u32,
    pub lpOldParentID: *mut core::ffi::c_void,
    pub lpPropTagArray: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type OBJECT_NOTIFICATION struct {
	cbEntryID uint32
	lpEntryID uintptr
	ulObjType uint32
	cbParentID uint32
	lpParentID uintptr
	cbOldID uint32
	lpOldID uintptr
	cbOldParentID uint32
	lpOldParentID uintptr
	lpPropTagArray uintptr
}
type
  OBJECT_NOTIFICATION = record
    cbEntryID: DWORD;
    lpEntryID: Pointer;
    ulObjType: DWORD;
    cbParentID: DWORD;
    lpParentID: Pointer;
    cbOldID: DWORD;
    lpOldID: Pointer;
    cbOldParentID: DWORD;
    lpOldParentID: Pointer;
    lpPropTagArray: Pointer;
  end;
const OBJECT_NOTIFICATION = extern struct {
    cbEntryID: u32,
    lpEntryID: ?*anyopaque,
    ulObjType: u32,
    cbParentID: u32,
    lpParentID: ?*anyopaque,
    cbOldID: u32,
    lpOldID: ?*anyopaque,
    cbOldParentID: u32,
    lpOldParentID: ?*anyopaque,
    lpPropTagArray: ?*anyopaque,
};
type
  OBJECT_NOTIFICATION {.bycopy.} = object
    cbEntryID: uint32
    lpEntryID: pointer
    ulObjType: uint32
    cbParentID: uint32
    lpParentID: pointer
    cbOldID: uint32
    lpOldID: pointer
    cbOldParentID: uint32
    lpOldParentID: pointer
    lpPropTagArray: pointer
struct OBJECT_NOTIFICATION
{
    uint cbEntryID;
    void* lpEntryID;
    uint ulObjType;
    uint cbParentID;
    void* lpParentID;
    uint cbOldID;
    void* lpOldID;
    uint cbOldParentID;
    void* lpOldParentID;
    void* lpPropTagArray;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; OBJECT_NOTIFICATION サイズ: 40 バイト(x86)
dim st, 10    ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; cbEntryID : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; lpEntryID : ENTRYID* (+4, 4byte)  varptr(st)+4 を基点に操作(4byte:入れ子/配列)
; ulObjType : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; cbParentID : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; lpParentID : ENTRYID* (+16, 4byte)  varptr(st)+16 を基点に操作(4byte:入れ子/配列)
; cbOldID : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; lpOldID : ENTRYID* (+24, 4byte)  varptr(st)+24 を基点に操作(4byte:入れ子/配列)
; cbOldParentID : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; lpOldParentID : ENTRYID* (+32, 4byte)  varptr(st)+32 を基点に操作(4byte:入れ子/配列)
; lpPropTagArray : SPropTagArray* (+36, 4byte)  varptr(st)+36 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; OBJECT_NOTIFICATION サイズ: 72 バイト(x64)
dim st, 18    ; 4byte整数×18(構造体サイズ 72 / 4 切り上げ)
; cbEntryID : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; lpEntryID : ENTRYID* (+8, 8byte)  varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; ulObjType : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; cbParentID : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; lpParentID : ENTRYID* (+24, 8byte)  varptr(st)+24 を基点に操作(8byte:入れ子/配列)
; cbOldID : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; lpOldID : ENTRYID* (+40, 8byte)  varptr(st)+40 を基点に操作(8byte:入れ子/配列)
; cbOldParentID : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; lpOldParentID : ENTRYID* (+56, 8byte)  varptr(st)+56 を基点に操作(8byte:入れ子/配列)
; lpPropTagArray : SPropTagArray* (+64, 8byte)  varptr(st)+64 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global OBJECT_NOTIFICATION
    #field int cbEntryID
    #field intptr lpEntryID
    #field int ulObjType
    #field int cbParentID
    #field intptr lpParentID
    #field int cbOldID
    #field intptr lpOldID
    #field int cbOldParentID
    #field intptr lpOldParentID
    #field intptr lpPropTagArray
#endstruct

stdim st, OBJECT_NOTIFICATION        ; NSTRUCT 変数を確保
st->cbEntryID = 100
mes "cbEntryID=" + st->cbEntryID