ホーム › System.WindowsProgramming › UNDETERMINESTRUCT
UNDETERMINESTRUCT
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwSize | DWORD | 4 | +0 | +0 | この構造体のサイズ(バイト)。 |
| uDefIMESize | DWORD | 4 | +4 | +4 | 既定IMEウィンドウのサイズ。 |
| uDefIMEPos | DWORD | 4 | +8 | +8 | 既定IMEウィンドウの位置。 |
| uUndetTextLen | DWORD | 4 | +12 | +12 | 未確定テキストの長さ。 |
| uUndetTextPos | DWORD | 4 | +16 | +16 | 未確定テキストの位置(オフセット)。 |
| uUndetAttrPos | DWORD | 4 | +20 | +20 | 未確定テキストの属性情報の位置。 |
| uCursorPos | DWORD | 4 | +24 | +24 | カーソル位置。 |
| uDeltaStart | DWORD | 4 | +28 | +28 | 変更開始位置の差分。 |
| uDetermineTextLen | DWORD | 4 | +32 | +32 | 確定テキストの長さ。 |
| uDetermineTextPos | DWORD | 4 | +36 | +36 | 確定テキストの位置(オフセット)。 |
| uDetermineDelimPos | DWORD | 4 | +40 | +40 | 確定テキストの区切り位置。 |
| uYomiTextLen | DWORD | 4 | +44 | +44 | 読み(ふりがな)テキストの長さ。 |
| uYomiTextPos | DWORD | 4 | +48 | +48 | 読みテキストの位置(オフセット)。 |
| uYomiDelimPos | DWORD | 4 | +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 Structureimport 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: uint32struct 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