ホーム › System.AddressBook › OBJECT_NOTIFICATION
OBJECT_NOTIFICATION
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| cbEntryID | DWORD | 4 | +0 | +0 | lpEntryID が指す対象オブジェクトのエントリIDサイズ。 |
| lpEntryID | ENTRYID* | 8/4 | +8 | +4 | 通知対象オブジェクトのエントリIDへのポインター。 |
| ulObjType | DWORD | 4 | +16 | +8 | オブジェクトの種類を示す値(MAPI_MESSAGE等)。 |
| cbParentID | DWORD | 4 | +20 | +12 | lpParentID が指す親オブジェクトのエントリIDサイズ。 |
| lpParentID | ENTRYID* | 8/4 | +24 | +16 | 親オブジェクトのエントリIDへのポインター。 |
| cbOldID | DWORD | 4 | +32 | +20 | lpOldID が指す変更前エントリIDのサイズ。 |
| lpOldID | ENTRYID* | 8/4 | +40 | +24 | 移動/改名前のオブジェクトのエントリIDへのポインター。 |
| cbOldParentID | DWORD | 4 | +48 | +28 | lpOldParentID が指す変更前親エントリIDのサイズ。 |
| lpOldParentID | ENTRYID* | 8/4 | +56 | +32 | 移動前の親オブジェクトのエントリIDへのポインター。 |
| lpPropTagArray | SPropTagArray* | 8/4 | +64 | +36 | 変更されたプロパティタグの配列へのポインター。 |
各言語での定義
#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 Structureimport 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: pointerstruct 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