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

UNDETERMINESTRUCT

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

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

フィールド

フィールドサイズx64x86説明
dwSizeDWORD4+0+0この構造体のサイズ(バイト)。
uDefIMESizeDWORD4+4+4既定IMEウィンドウのサイズ。
uDefIMEPosDWORD4+8+8既定IMEウィンドウの位置。
uUndetTextLenDWORD4+12+12未確定テキストの長さ。
uUndetTextPosDWORD4+16+16未確定テキストの位置(オフセット)。
uUndetAttrPosDWORD4+20+20未確定テキストの属性情報の位置。
uCursorPosDWORD4+24+24カーソル位置。
uDeltaStartDWORD4+28+28変更開始位置の差分。
uDetermineTextLenDWORD4+32+32確定テキストの長さ。
uDetermineTextPosDWORD4+36+36確定テキストの位置(オフセット)。
uDetermineDelimPosDWORD4+40+40確定テキストの区切り位置。
uYomiTextLenDWORD4+44+44読み(ふりがな)テキストの長さ。
uYomiTextPosDWORD4+48+48読みテキストの位置(オフセット)。
uYomiDelimPosDWORD4+52+52読みテキストの区切り位置。

各言語での定義

#include <windows.h>

// UNDETERMINESTRUCT  (x64 56 / x86 56 バイト)
typedef struct UNDETERMINESTRUCT {
    DWORD dwSize;
    DWORD uDefIMESize;
    DWORD uDefIMEPos;
    DWORD uUndetTextLen;
    DWORD uUndetTextPos;
    DWORD uUndetAttrPos;
    DWORD uCursorPos;
    DWORD uDeltaStart;
    DWORD uDetermineTextLen;
    DWORD uDetermineTextPos;
    DWORD uDetermineDelimPos;
    DWORD uYomiTextLen;
    DWORD uYomiTextPos;
    DWORD uYomiDelimPos;
} UNDETERMINESTRUCT;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct UNDETERMINESTRUCT
{
    public uint dwSize;
    public uint uDefIMESize;
    public uint uDefIMEPos;
    public uint uUndetTextLen;
    public uint uUndetTextPos;
    public uint uUndetAttrPos;
    public uint uCursorPos;
    public uint uDeltaStart;
    public uint uDetermineTextLen;
    public uint uDetermineTextPos;
    public uint uDetermineDelimPos;
    public uint uYomiTextLen;
    public uint uYomiTextPos;
    public uint uYomiDelimPos;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure UNDETERMINESTRUCT
    Public dwSize As UInteger
    Public uDefIMESize As UInteger
    Public uDefIMEPos As UInteger
    Public uUndetTextLen As UInteger
    Public uUndetTextPos As UInteger
    Public uUndetAttrPos As UInteger
    Public uCursorPos As UInteger
    Public uDeltaStart As UInteger
    Public uDetermineTextLen As UInteger
    Public uDetermineTextPos As UInteger
    Public uDetermineDelimPos As UInteger
    Public uYomiTextLen As UInteger
    Public uYomiTextPos As UInteger
    Public uYomiDelimPos As UInteger
End Structure
import ctypes
from ctypes import wintypes

class UNDETERMINESTRUCT(ctypes.Structure):
    _fields_ = [
        ("dwSize", wintypes.DWORD),
        ("uDefIMESize", wintypes.DWORD),
        ("uDefIMEPos", wintypes.DWORD),
        ("uUndetTextLen", wintypes.DWORD),
        ("uUndetTextPos", wintypes.DWORD),
        ("uUndetAttrPos", wintypes.DWORD),
        ("uCursorPos", wintypes.DWORD),
        ("uDeltaStart", wintypes.DWORD),
        ("uDetermineTextLen", wintypes.DWORD),
        ("uDetermineTextPos", wintypes.DWORD),
        ("uDetermineDelimPos", wintypes.DWORD),
        ("uYomiTextLen", wintypes.DWORD),
        ("uYomiTextPos", wintypes.DWORD),
        ("uYomiDelimPos", wintypes.DWORD),
    ]
#[repr(C)]
pub struct UNDETERMINESTRUCT {
    pub dwSize: u32,
    pub uDefIMESize: u32,
    pub uDefIMEPos: u32,
    pub uUndetTextLen: u32,
    pub uUndetTextPos: u32,
    pub uUndetAttrPos: u32,
    pub uCursorPos: u32,
    pub uDeltaStart: u32,
    pub uDetermineTextLen: u32,
    pub uDetermineTextPos: u32,
    pub uDetermineDelimPos: u32,
    pub uYomiTextLen: u32,
    pub uYomiTextPos: u32,
    pub uYomiDelimPos: u32,
}
import "golang.org/x/sys/windows"

type UNDETERMINESTRUCT struct {
	dwSize uint32
	uDefIMESize uint32
	uDefIMEPos uint32
	uUndetTextLen uint32
	uUndetTextPos uint32
	uUndetAttrPos uint32
	uCursorPos uint32
	uDeltaStart uint32
	uDetermineTextLen uint32
	uDetermineTextPos uint32
	uDetermineDelimPos uint32
	uYomiTextLen uint32
	uYomiTextPos uint32
	uYomiDelimPos uint32
}
type
  UNDETERMINESTRUCT = record
    dwSize: DWORD;
    uDefIMESize: DWORD;
    uDefIMEPos: DWORD;
    uUndetTextLen: DWORD;
    uUndetTextPos: DWORD;
    uUndetAttrPos: DWORD;
    uCursorPos: DWORD;
    uDeltaStart: DWORD;
    uDetermineTextLen: DWORD;
    uDetermineTextPos: DWORD;
    uDetermineDelimPos: DWORD;
    uYomiTextLen: DWORD;
    uYomiTextPos: DWORD;
    uYomiDelimPos: DWORD;
  end;
const UNDETERMINESTRUCT = extern struct {
    dwSize: u32,
    uDefIMESize: u32,
    uDefIMEPos: u32,
    uUndetTextLen: u32,
    uUndetTextPos: u32,
    uUndetAttrPos: u32,
    uCursorPos: u32,
    uDeltaStart: u32,
    uDetermineTextLen: u32,
    uDetermineTextPos: u32,
    uDetermineDelimPos: u32,
    uYomiTextLen: u32,
    uYomiTextPos: u32,
    uYomiDelimPos: u32,
};
type
  UNDETERMINESTRUCT {.bycopy.} = object
    dwSize: uint32
    uDefIMESize: uint32
    uDefIMEPos: uint32
    uUndetTextLen: uint32
    uUndetTextPos: uint32
    uUndetAttrPos: uint32
    uCursorPos: uint32
    uDeltaStart: uint32
    uDetermineTextLen: uint32
    uDetermineTextPos: uint32
    uDetermineDelimPos: uint32
    uYomiTextLen: uint32
    uYomiTextPos: uint32
    uYomiDelimPos: uint32
struct UNDETERMINESTRUCT
{
    uint dwSize;
    uint uDefIMESize;
    uint uDefIMEPos;
    uint uUndetTextLen;
    uint uUndetTextPos;
    uint uUndetAttrPos;
    uint uCursorPos;
    uint uDeltaStart;
    uint uDetermineTextLen;
    uint uDetermineTextPos;
    uint uDetermineDelimPos;
    uint uYomiTextLen;
    uint uYomiTextPos;
    uint uYomiDelimPos;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; UNDETERMINESTRUCT サイズ: 56 バイト(x64)
dim st, 14    ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; uDefIMESize : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; uDefIMEPos : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; uUndetTextLen : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; uUndetTextPos : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; uUndetAttrPos : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; uCursorPos : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; uDeltaStart : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; uDetermineTextLen : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; uDetermineTextPos : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; uDetermineDelimPos : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; uYomiTextLen : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; uYomiTextPos : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; uYomiDelimPos : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global UNDETERMINESTRUCT
    #field int dwSize
    #field int uDefIMESize
    #field int uDefIMEPos
    #field int uUndetTextLen
    #field int uUndetTextPos
    #field int uUndetAttrPos
    #field int uCursorPos
    #field int uDeltaStart
    #field int uDetermineTextLen
    #field int uDetermineTextPos
    #field int uDetermineDelimPos
    #field int uYomiTextLen
    #field int uYomiTextPos
    #field int uYomiDelimPos
#endstruct

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