Win32 API 日本語リファレンス
ホーム › UI.TabletPC › SetFlags

SetFlags

関数
認識コンテキストの動作フラグを設定する。
DLLinkobjcore.dll呼出規約winapi対応OSWindows XP 以降

シグネチャ

// inkobjcore.dll
#include <windows.h>

HRESULT SetFlags(
    HRECOCONTEXT hrc,
    DWORD dwFlags
);

パラメーター

名前型方向説明
hrcHRECOCONTEXTin認識エンジンコンテキストへのハンドル。
dwFlagsDWORDin

次の表は、認識エンジンがインクをどのように解釈し、結果文字列を決定するかを指定するために設定できるフラグの一覧です。必要に応じて OR 演算子 (|) を使用してフラグを組み合わせてください。

ビットフラグ 意味
RECOFLAG_AUTOSPACE
認識エンジンは言語モデルの規則に基づくスマートスペーシングを使用します。
RECOFLAG_COERCE
認識エンジンは、コンテキストに指定した factoid に基づいて結果を強制的に合わせます。たとえば、電話番号の factoid を指定した状態でユーザーが "hello" という単語を入力した場合、認識エンジンはランダムな電話番号または空の文字列を返すことがあります。このフラグを指定しない場合、認識エンジンは結果として "hello" を返します。
RECOFLAG_PREFIXOK
認識エンジンは、既定または指定された (factoid) 言語モデルで定義されている文字列の任意の接頭辞部分の認識をサポートします。

たとえば、このフラグがない場合、ユーザーが "handw" と書くと、認識エンジンは認識エンジンの辞書に存在する単語である候補 ("hander" や "handed" など) を返します。このフラグを指定すると、"handw" は認識エンジンの辞書に存在する単語 "handwriting" の有効な接頭辞であるため、認識エンジンは "handw" を候補の 1 つとして返すことがあります。

Tablet PC Input Panel は、入力スコープが IS_DEFAULT の場合 (または入力スコープがない場合)、あるいはユーザー単語リストや正規表現がない場合を除き、ほとんどの場合にこのフラグを設定します。

東アジア文字の認識エンジンは、呼び出し元がこのフラグを渡したときに E_INVALIDARG を返す必要があります。

RECOFLAG_LINEMODE
認識エンジンは行の分割を行いませんが、文字と単語の分離は引き続き行う必要があります。これは lined モードと同じですが、ガイドがなく、すべてのインクが 1 行にあると見なされる点が異なります。このフラグが設定されている場合、ガイドが設定されていても無視されます。
RECOFLAG_SINGLESEG
複数のセグメント化を無効にします。既定では、認識エンジンはインクに対して複数のセグメント化 (代替候補) を返します。

たとえば、"together" を分割されたストロークとして書いた場合、認識エンジンはインクを "to get her"、"to gather"、または "together" としてセグメント化することがあります。代替候補を照会する際にインクの複数のセグメント化が不要な場合は、このフラグを設定してください。これによりパフォーマンスが向上し、メモリ使用量が削減されます。

RECOFLAG_WORDMODE
認識エンジンはインクを 1 つの単語として扱います。たとえば、コンテキストに "to get her" が含まれている場合、認識エンジンは "together" を返します。

戻り値の型: HRESULT

公式ドキュメント

認識エンジンがインクをどのように解釈し、結果文字列を決定するかを指定します。インクを初めて処理する前に、この関数を呼び出してください。したがって、Process 関数を呼び出す前に SetFlags 関数を呼び出します。

戻り値

この関数は次の値のいずれかを返すことがあります。

HRESULT 値 説明
S_OK
成功しました。
E_INVALIDARG
フラグが無効です。
E_NOTIMPL
認識エンジンはこの関数をサポートしていません。
E_OUTOFMEMORY
操作を完了するためのメモリを割り当てることができません。
E_FAIL
不特定のエラーが発生しました。
E_POINTER
コンテキストが無効であるか、パラメーターのいずれかが無効なポインターです。

解説(Remarks)

Microsoft Windows XP Tablet PC Edition Development Kit 1.7 より前のバージョンでは、Tablet PC Input Panel がスマートスペーシングを実行していました。Tablet PC SDK 1.7 以降も、Input Panel は予備的なスペーシングの推奨を含む結果を生成します。ただし、Tablet PC Input Panel のスペーシング結果は、認識エンジンの推奨 (結果) によって変更される場合があります。認識エンジンは、テキストのコンテキスト情報 (Input Panel が行った SetTextContext の呼び出しに基づく) と内部の言語モデル規則を使用することで、これを実現できます。

Input Panel は、RECOFLAG_AUTOSPACE フラグを設定してこの関数を呼び出すことにより、認識エンジンが自動スペーシングに対応しているかどうかを判断できます。認識エンジンが自動スペーシングをサポートしていない場合は、E_INVALIDARG が返されます。

メモ SetFlags 関数では line モードのみがサポートされます。boxed モード、free モード、single-line モードはサポートされません。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での呼び出し定義

// inkobjcore.dll
#include <windows.h>

HRESULT SetFlags(
    HRECOCONTEXT hrc,
    DWORD dwFlags
);
[DllImport("inkobjcore.dll", ExactSpelling = true)]
static extern int SetFlags(
    IntPtr hrc,   // HRECOCONTEXT
    uint dwFlags   // DWORD
);
<DllImport("inkobjcore.dll", ExactSpelling:=True)>
Public Shared Function SetFlags(
    hrc As IntPtr,   ' HRECOCONTEXT
    dwFlags As UInteger   ' DWORD
) As Integer
End Function
' hrc : HRECOCONTEXT
' dwFlags : DWORD
Declare PtrSafe Function SetFlags Lib "inkobjcore" ( _
    ByVal hrc As LongPtr, _
    ByVal dwFlags As Long) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

SetFlags = ctypes.windll.inkobjcore.SetFlags
SetFlags.restype = ctypes.c_int
SetFlags.argtypes = [
    wintypes.HANDLE,  # hrc : HRECOCONTEXT
    wintypes.DWORD,  # dwFlags : DWORD
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('inkobjcore.dll')
SetFlags = Fiddle::Function.new(
  lib['SetFlags'],
  [
    Fiddle::TYPE_VOIDP,  # hrc : HRECOCONTEXT
    -Fiddle::TYPE_INT,  # dwFlags : DWORD
  ],
  Fiddle::TYPE_INT)
#[link(name = "inkobjcore")]
extern "system" {
    fn SetFlags(
        hrc: *mut core::ffi::c_void,  // HRECOCONTEXT
        dwFlags: u32  // DWORD
    ) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("inkobjcore.dll")]
public static extern int SetFlags(IntPtr hrc, uint dwFlags);
"@
$api = Add-Type -MemberDefinition $sig -Name 'inkobjcore_SetFlags' -Namespace Win32 -PassThru
# $api::SetFlags(hrc, dwFlags)
#uselib "inkobjcore.dll"
#func global SetFlags "SetFlags" sptr, sptr
; SetFlags hrc, dwFlags   ; 戻り値は stat
; hrc : HRECOCONTEXT -> "sptr"
; dwFlags : DWORD -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
#uselib "inkobjcore.dll"
#cfunc global SetFlags "SetFlags" sptr, int
; res = SetFlags(hrc, dwFlags)
; hrc : HRECOCONTEXT -> "sptr"
; dwFlags : DWORD -> "int"
; HRESULT SetFlags(HRECOCONTEXT hrc, DWORD dwFlags)
#uselib "inkobjcore.dll"
#cfunc global SetFlags "SetFlags" intptr, int
; res = SetFlags(hrc, dwFlags)
; hrc : HRECOCONTEXT -> "intptr"
; dwFlags : DWORD -> "int"
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	inkobjcore = windows.NewLazySystemDLL("inkobjcore.dll")
	procSetFlags = inkobjcore.NewProc("SetFlags")
)

// hrc (HRECOCONTEXT), dwFlags (DWORD)
r1, _, err := procSetFlags.Call(
	uintptr(hrc),
	uintptr(dwFlags),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // HRESULT
function SetFlags(
  hrc: THandle;   // HRECOCONTEXT
  dwFlags: DWORD   // DWORD
): Integer; stdcall;
  external 'inkobjcore.dll' name 'SetFlags';
result := DllCall("inkobjcore\SetFlags"
    , "Ptr", hrc   ; HRECOCONTEXT
    , "UInt", dwFlags   ; DWORD
    , "Int")   ; return: HRESULT
●SetFlags(hrc, dwFlags) = DLL("inkobjcore.dll", "int SetFlags(void*, dword)")
# 呼び出し: SetFlags(hrc, dwFlags)
# hrc : HRECOCONTEXT -> "void*"
# dwFlags : DWORD -> "dword"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
const std = @import("std");

extern "inkobjcore" fn SetFlags(
    hrc: ?*anyopaque, // HRECOCONTEXT
    dwFlags: u32 // DWORD
) callconv(std.os.windows.WINAPI) i32;
proc SetFlags(
    hrc: pointer,  # HRECOCONTEXT
    dwFlags: uint32  # DWORD
): int32 {.importc: "SetFlags", stdcall, dynlib: "inkobjcore.dll".}
pragma(lib, "inkobjcore");
extern(Windows)
int SetFlags(
    void* hrc,   // HRECOCONTEXT
    uint dwFlags   // DWORD
);
ccall((:SetFlags, "inkobjcore.dll"), stdcall, Int32,
      (Ptr{Cvoid}, UInt32),
      hrc, dwFlags)
# hrc : HRECOCONTEXT -> Ptr{Cvoid}
# dwFlags : DWORD -> UInt32
# stdcall は 32bit のみ意味を持つ(x64 では無視)。
local ffi = require("ffi")
ffi.cdef[[
int32_t SetFlags(
    void* hrc,
    uint32_t dwFlags);
]]
local inkobjcore = ffi.load("inkobjcore")
-- inkobjcore.SetFlags(hrc, dwFlags)
-- hrc : HRECOCONTEXT
-- dwFlags : DWORD
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
const koffi = require('koffi');
const lib = koffi.load('inkobjcore.dll');
const SetFlags = lib.func('__stdcall', 'SetFlags', 'int32_t', ['void *', 'uint32_t']);
// SetFlags(hrc, dwFlags)
// hrc : HRECOCONTEXT -> 'void *'
// dwFlags : DWORD -> 'uint32_t'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。
const lib = Deno.dlopen("inkobjcore.dll", {
  SetFlags: { parameters: ["pointer", "u32"], result: "i32" },
});
// lib.symbols.SetFlags(hrc, dwFlags)
// hrc : HRECOCONTEXT -> "pointer"
// dwFlags : DWORD -> "u32"
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。
<?php
$ffi = FFI::cdef(<<<C
int32_t SetFlags(
    void* hrc,
    uint32_t dwFlags);
C, "inkobjcore.dll");
// $ffi->SetFlags(hrc, dwFlags);
// hrc : HRECOCONTEXT
// dwFlags : DWORD
// 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
// WINAPI(stdcall): x64 では呼出規約が統一されるため問題なし。x86 では __stdcall 対応のラッパが必要な場合あり。
import com.sun.jna.*;
import com.sun.jna.ptr.*;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;

public interface Inkobjcore extends StdCallLibrary {
    Inkobjcore INSTANCE = Native.load("inkobjcore", Inkobjcore.class);
    int SetFlags(
        Pointer hrc,   // HRECOCONTEXT
        int dwFlags   // DWORD
    );
}
@[Link("inkobjcore")]
lib Libinkobjcore
  fun SetFlags = SetFlags(
    hrc : Void*,   # HRECOCONTEXT
    dwFlags : UInt32   # DWORD
  ) : Int32
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。
import 'dart:ffi';
import 'package:ffi/ffi.dart';

typedef SetFlagsNative = Int32 Function(Pointer<Void>, Uint32);
typedef SetFlagsDart = int Function(Pointer<Void>, int);
final SetFlags = DynamicLibrary.open('inkobjcore.dll')
    .lookupFunction<SetFlagsNative, SetFlagsDart>('SetFlags');
// hrc : HRECOCONTEXT -> Pointer<Void>
// dwFlags : DWORD -> Uint32
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。
{$mode objfpc}{$H+}
function SetFlags(
  hrc: THandle;   // HRECOCONTEXT
  dwFlags: DWORD   // DWORD
): Integer; stdcall;
  external 'inkobjcore.dll' name 'SetFlags';
import Foreign
import Foreign.C.Types
import Foreign.C.String

foreign import stdcall safe "SetFlags"
  c_SetFlags :: Ptr () -> Word32 -> IO Int32
-- hrc : HRECOCONTEXT -> Ptr ()
-- dwFlags : DWORD -> Word32
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。
open Ctypes
open Foreign

let setflags =
  foreign "SetFlags"
    ((ptr void) @-> uint32_t @-> returning int32_t)
(* hrc : HRECOCONTEXT -> (ptr void) *)
(* dwFlags : DWORD -> uint32_t *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)
(cffi:define-foreign-library inkobjcore (t "inkobjcore.dll"))
(cffi:use-foreign-library inkobjcore)

(cffi:defcfun ("SetFlags" set-flags :convention :stdcall) :int32
  (hrc :pointer)   ; HRECOCONTEXT
  (dw-flags :uint32))   ; DWORD
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。
use Win32::API;
my $SetFlags = Win32::API::More->new('inkobjcore',
    'int SetFlags(HANDLE hrc, DWORD dwFlags)');
# my $ret = $SetFlags->Call($hrc, $dwFlags);
# hrc : HRECOCONTEXT -> HANDLE
# dwFlags : DWORD -> DWORD
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。

関連項目

公式の関連項目