IMESTRUCT
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| fnc | DWORD | 4 | +0 | +0 | サブ関数です。次のいずれかの値を指定します。 IME_ENTERWORDREGISTERMODE単語を登録するために使用します。アプリケーションが単語とその読みを送信することで単語が登録されます。構造体のメンバーは次のように解釈されます。
戻り値は単語登録の結果を示します。登録が正常に処理された場合は TRUE、それ以外の場合は FALSE です。 品詞などの情報が必要な場合は、ダイアログボックスを表示してユーザーに入力を求めてください。メンバー lParam1 および lParam2 には NULL を指定できます。その場合、ダイアログボックス内の対応する入力フィールドには何も表示しないでください。 IME_GETCONVERSIONMODEIME の現在の変換モードを取得します。このサブプログラムはパラメーターを使用しません。 これは IME_GET_MODE と同じです。 IME の現在の変換モードを、IME_MODE_ALPHANUMERIC から IME_MODE_NOCODEINPUT までの組み合わせとして返します。変換モードは次のとおりです。
IME_GET_MODEIME_GETCONVERSIONMODE と同じです。 IME_MOVECONVERTWINDOWIME_SETCONVERSIONWINDOW と同じです。 IME_SETCONVERSIONFONTEX変換ウィンドウに表示される未確定文字列の表示に使用するフォントです。構造体のメンバーは次のように解釈されます。
このサブ関数に戻り値はありません。 IME_SETCONVERSIONFONTEX で指定したフォントは、未確定文字列の表示にのみ使用できます。 未確定文字列を既定の位置に表示する場合は、システムフォントを使用します。表示位置が既定の位置ではなくなった場合は、以前に指定したフォントを有効にします。 LOGFONT 構造体を格納するグローバルメモリは、アプリケーションが解放します。 変換ウィンドウを表示中の IME が IME_SETCONVERSIONFONTEX コマンドを受け取り、そのコマンドの処理の結果として変換ウィンドウが変化した場合、IME は WM_IME_REPORT:IR_CHANGECONVERT メッセージを送信してください。IME_SETCONVERSIONFONTEX で指定されたフォントが IME で使用中のフォントと同じ場合は、このメッセージを送信しないでください。 IME_SETCONVERSIONMODEIME の変換モードを設定します。wParam メンバーには、次の値の 1 つ以上を指定します。
戻り値は、指定された変換モードが正常に設定されたかどうかを示します。新しい変換モードが設定された場合は、直前まで有効だった変換モードの状態を返します。それ以外の場合は NULL を返します。 IME_SETCONVERSIONWINDOWIME の外接矩形のサイズと位置、および変換ウィンドウの初期位置です。IME は、このサブ関数で指定された位置に未確定文字列を表示します。 wParam メンバーには、次のいずれかの値を指定します。
戻り値は、コマンドが実行されたかどうかを示します。コマンドの実行に成功した場合は TRUE、それ以外の場合は FALSE です。 未確定文字列が外接矩形からあふれると判断される場合、IME はその文字列を表示する前に、レポートメッセージ WM_IME_REPORT:IR_FULLCONVERT をアプリケーションに送信しなければなりません。アプリケーションがこのメッセージを処理しない場合、その後の表示処理は本仕様では規定されておらず、IME に委ねられます。たとえば、未確定文字列を外接矩形内でスクロールさせたり、一時的に既定の位置へ移動させたりすることが考えられます。 IME が未確定文字列を保持しているときに IME_SETCONVERSIONWINDOW メッセージが呼び出された場合、IME は WM_IME_REPORT:IR_CLOSECONVERT メッセージを送信してください。パラメーターとして指定されたウィンドウに文字列が収まる場合は、IME は WM_IME_REPORT:IR_OPENCONVERT メッセージを送信してください。変換ウィンドウを描画するのは、そのあとにしてください。文字列がウィンドウに収まらない場合、IME は WM_IME_REPORT:IR_FULLCONVERT メッセージを送信してください。 外接矩形の位置は、物理画面の領域外に指定される場合があります。外接矩形全体が物理画面の外にある場合、未確定文字列を表示してはなりません。 外接矩形の一部が物理画面の外にある場合、IME は未確定文字列が画面からはみ出さないように外接矩形をクリップし、表示開始位置も調整します。 変換ウィンドウに表示する最大行数や最大文字数を設定しないことを推奨します。 変換ウィンドウがシステムウィンドウと重なる場合、変換ウィンドウが見えるようにしなければなりません。たとえば、変換ウィンドウの表示を最優先にするか、システムウィンドウを別の場所へ移動させます。 変換ウィンドウのサイズ、表示内容、または表示色が変化した場合、IME は IR_CHANGECONVERT メッセージを送信しなければなりません。ただし、指定されたウィンドウに未確定文字列が収まらない場合は、IR_CHANGECONVERT ではなく IR_FULLCONVERT メッセージを送信しなければなりません。 IME が MCW_WINDOW モードまたは MCW_SCREEN モードから MCW_DEFAULT に移行した場合、未確定文字列が存在するときは IR_CLOSECONVERT メッセージを送信しなければなりません。 IME が MCW_WINDOW モードまたは MCW_SCREEN モードから MCW_HIDDEN に移行した場合、未確定文字列が存在するときは IR_CLOSECONVERT メッセージを送信しなければなりません。 IME が MCW_HIDDEN モードから MCW_DEFAULT、MCW_SCREEN、または MCW_WINDOW に移行した場合、IME は未確定文字列 = 0、確定文字列 = 0 として IR_UNDETERMINE メッセージを送信しなければなりません。 IME_SETLEVEL現在のアプリケーションに対する IME レベルを設定する、韓国語固有のサブ関数です。wParam メンバーには、次のいずれかのレベル値を指定します。
IME_SETOPENIME のかな漢字変換機能の状態を設定します。 wParam メンバーには、IME を開く場合は 0 以外、IME を閉じる場合は 0 を設定します 戻り値は、かな漢字変換機能の以前の状態を示します。開いていた場合は TRUE、それ以外の場合は FALSE を返します。 IME_SETOPEN によってかな漢字変換機能が閉じられた場合、未確定文字列を確定してはなりません。 IME_SETOPEN によってかな漢字変換機能が閉じられるとき、IME が MCW_WINDOW モードまたは MCW-SCREEN モードで変換ウィンドウが開いている場合、IME は IR_CLOSECONVERT メッセージを送信しなければなりません。ただし、MCW_HIDDEN モードで未確定文字列が存在する場合は、IR_CLOSECONVERT を送信する必要はありません。 IME_SET_MODEKIME_SETCONVERSIONMODE の韓国語固有版です。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| wParam | WPARAM | 8/4 | +8 | +4 | 使い方は fnc で指定されたサブ関数によって異なります。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| wCount | DWORD | 4 | +16 | +8 | 使い方は fnc で指定されたサブ関数によって異なります。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dchSource | DWORD | 4 | +20 | +12 | 使い方は fnc で指定されたサブ関数によって異なります。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dchDest | DWORD | 4 | +24 | +16 | 使い方は fnc で指定されたサブ関数によって異なります。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| lParam1 | LPARAM | 8/4 | +32 | +20 | 使い方は fnc で指定されたサブ関数によって異なります。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| lParam2 | LPARAM | 8/4 | +40 | +24 | 使い方は fnc で指定されたサブ関数によって異なります。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| lParam3 | LPARAM | 8/4 | +48 | +28 | 使い方は fnc で指定されたサブ関数によって異なります。 |
公式ドキュメント
SendIMEMessageEx が、Input Method Editor (IME) メッセージで実行するサブ関数とそのパラメーターを指定するために使用します。この構造体は、それらのサブ関数からの戻り値を受け取るためにも使用されます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// IMESTRUCT (x64 56 / x86 32 バイト)
typedef struct IMESTRUCT {
DWORD fnc;
WPARAM wParam;
DWORD wCount;
DWORD dchSource;
DWORD dchDest;
LPARAM lParam1;
LPARAM lParam2;
LPARAM lParam3;
} IMESTRUCT;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct IMESTRUCT
{
public uint fnc;
public UIntPtr wParam;
public uint wCount;
public uint dchSource;
public uint dchDest;
public IntPtr lParam1;
public IntPtr lParam2;
public IntPtr lParam3;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure IMESTRUCT
Public fnc As UInteger
Public wParam As UIntPtr
Public wCount As UInteger
Public dchSource As UInteger
Public dchDest As UInteger
Public lParam1 As IntPtr
Public lParam2 As IntPtr
Public lParam3 As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class IMESTRUCT(ctypes.Structure):
_fields_ = [
("fnc", wintypes.DWORD),
("wParam", ctypes.c_size_t),
("wCount", wintypes.DWORD),
("dchSource", wintypes.DWORD),
("dchDest", wintypes.DWORD),
("lParam1", ctypes.c_ssize_t),
("lParam2", ctypes.c_ssize_t),
("lParam3", ctypes.c_ssize_t),
]#[repr(C)]
pub struct IMESTRUCT {
pub fnc: u32,
pub wParam: usize,
pub wCount: u32,
pub dchSource: u32,
pub dchDest: u32,
pub lParam1: isize,
pub lParam2: isize,
pub lParam3: isize,
}import "golang.org/x/sys/windows"
type IMESTRUCT struct {
fnc uint32
wParam uintptr
wCount uint32
dchSource uint32
dchDest uint32
lParam1 uintptr
lParam2 uintptr
lParam3 uintptr
}type
IMESTRUCT = record
fnc: DWORD;
wParam: NativeUInt;
wCount: DWORD;
dchSource: DWORD;
dchDest: DWORD;
lParam1: NativeInt;
lParam2: NativeInt;
lParam3: NativeInt;
end;const IMESTRUCT = extern struct {
fnc: u32,
wParam: usize,
wCount: u32,
dchSource: u32,
dchDest: u32,
lParam1: isize,
lParam2: isize,
lParam3: isize,
};type
IMESTRUCT {.bycopy.} = object
fnc: uint32
wParam: uint
wCount: uint32
dchSource: uint32
dchDest: uint32
lParam1: int
lParam2: int
lParam3: intstruct IMESTRUCT
{
uint fnc;
size_t wParam;
uint wCount;
uint dchSource;
uint dchDest;
ptrdiff_t lParam1;
ptrdiff_t lParam2;
ptrdiff_t lParam3;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; IMESTRUCT サイズ: 32 バイト(x86)
dim st, 8 ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; fnc : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; wParam : WPARAM (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; wCount : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; dchSource : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; dchDest : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; lParam1 : LPARAM (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; lParam2 : LPARAM (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; lParam3 : LPARAM (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; IMESTRUCT サイズ: 56 バイト(x64)
dim st, 14 ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; fnc : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; wParam : WPARAM (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; wCount : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; dchSource : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; dchDest : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; lParam1 : LPARAM (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; lParam2 : LPARAM (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; lParam3 : LPARAM (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global IMESTRUCT
#field int fnc
#field intptr wParam
#field int wCount
#field int dchSource
#field int dchDest
#field intptr lParam1
#field intptr lParam2
#field intptr lParam3
#endstruct
stdim st, IMESTRUCT ; NSTRUCT 変数を確保
st->fnc = 100
mes "fnc=" + st->fnc