Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
(********************************************************************* *)
(*      imm.h - Input Method Manager definitions                       *)
(*                                                                     *)
(*      Copyright (c) Microsoft Corporation. All rights reserved.      *)
(*                                                                     *)
(* Converted to pascal by Dmitry Boyarintsev, using Chelper.           *)
(*                                                                     *)
(********************************************************************* *)

unit
  imm;

{$mode delphi}

interface

uses
  Windows;

{$PACKRECORDS C}

{$ifdef FPC_OS_UNICODE}
  {$define UNICODE}
{$endif}

// IME_Codes
// bit field for conversion mode
const
  IME_CMODE_ALPHANUMERIC          = $0000;
  IME_CMODE_NATIVE                = $0001;
  IME_CMODE_CHINESE               = IME_CMODE_NATIVE;
  IME_CMODE_HANGUL                = IME_CMODE_NATIVE;
  IME_CMODE_JAPANESE              = IME_CMODE_NATIVE;
  IME_CMODE_KATAKANA              = $0002;  // only effect under IME_CMODE_NATIVE
  IME_CMODE_LANGUAGE              = $0003;
  IME_CMODE_FULLSHAPE             = $0008;
  IME_CMODE_ROMAN                 = $0010;
  IME_CMODE_CHARCODE              = $0020;
  IME_CMODE_HANJACONVERT          = $0040;

type
  HIMC = DWORD;
  HIMCC = DWORD;

type
  PHKL  = ^HKL;
  LPHKL = PHKL;

type
  LPUINT = PUINT;

// declared at rtl\win\wininc\struct.inc
{type
  PtagCOMPOSITIONFORM = ^tagCOMPOSITIONFORM;
  tagCOMPOSITIONFORM = record
    dwStyle       : DWORD;
    ptCurrentPos  : POINT;
    rcArea        : RECT;
  end;
  COMPOSITIONFORM = tagCOMPOSITIONFORM;
  PCOMPOSITIONFORM = PtagCOMPOSITIONFORM;
  NPCOMPOSITIONFORM = PtagCOMPOSITIONFORM;
  LPCOMPOSITIONFORM = PtagCOMPOSITIONFORM;}

// declared at rtl\win\wininc\struct.inc
{type
  PtagCANDIDATEFORM = ^tagCANDIDATEFORM;
  tagCANDIDATEFORM = packed record
    dwIndex      : DWORD;
    dwStyle      : DWORD;
    ptCurrentPos : POINT;
    rcArea       : RECT;
  end;
  CANDIDATEFORM = tagCANDIDATEFORM;
  PCANDIDATEFORM = PtagCANDIDATEFORM;
  NPCANDIDATEFORM = PtagCANDIDATEFORM;
  LPCANDIDATEFORM = PtagCANDIDATEFORM;}


// declared at rtl\win\wininc\struct.inc
{type
  PtagCANDIDATELIST = ^tagCANDIDATELIST;
  tagCANDIDATELIST = packed record
    dwSize : DWORD;
    dwStyle : DWORD;
    dwCount : DWORD;
    dwSelection : DWORD;
    dwPageStart : DWORD;
    dwPageSize : DWORD;
    dwOffset : array [0..0] of DWORD;
  end;
  CANDIDATELIST = tagCANDIDATELIST;
  PCANDIDATELIST = PtagCANDIDATELIST;
  NPCANDIDATELIST = PtagCANDIDATELIST;
  LPCANDIDATELIST = PtagCANDIDATELIST;}


type
  PtagREGISTERWORDA = ^tagREGISTERWORDA;
  tagREGISTERWORDA = packed record
    lpReading : LPSTR;
    lpWord : LPSTR;
  end;
  REGISTERWORDA = tagREGISTERWORDA;
  TREGISTERWORDA = REGISTERWORDA;
  PREGISTERWORDA = PtagREGISTERWORDA;
  NPREGISTERWORDA = PtagREGISTERWORDA;
  LPREGISTERWORDA = PtagREGISTERWORDA;

type
  PtagREGISTERWORDW = ^tagREGISTERWORDW;
  tagREGISTERWORDW = packed record
    lpReading : LPWSTR;
    lpWord : LPWSTR;
  end;
  REGISTERWORDW = tagREGISTERWORDW;
  TREGISTERWORDW = REGISTERWORDW;
  PREGISTERWORDW = PtagREGISTERWORDW;
  NPREGISTERWORDW = PtagREGISTERWORDW;
  LPREGISTERWORDW = PtagREGISTERWORDW;

{$ifdef UNICODE}
  PtagREGISTERWORD = PtagREGISTERWORDW;
  tagREGISTERWORD  = tagREGISTERWORDW;
  REGISTERWORD     = REGISTERWORDW;     
  TREGISTERWORD    = TREGISTERWORDW;
  PREGISTERWORD    = PREGISTERWORDW;
  NPREGISTERWORD   = NPREGISTERWORDW;
  LPREGISTERWORD   = LPREGISTERWORDW;
{$else}
  PtagREGISTERWORD = PtagREGISTERWORDA;
  tagREGISTERWORD  = tagREGISTERWORDA;
  REGISTERWORD     = REGISTERWORDA;
  TREGISTERWORD    = TREGISTERWORDA;
  PREGISTERWORD    = PREGISTERWORDA;
  NPREGISTERWORD   = NPREGISTERWORDA;
  LPREGISTERWORD   = LPREGISTERWORDA;
{$endif}

type
  PtagRECONVERTSTRING = ^tagRECONVERTSTRING;
  tagRECONVERTSTRING = packed record
    dwSize : DWORD;
    dwVersion : DWORD;
    dwStrLen : DWORD;
    dwStrOffset : DWORD;
    dwCompStrLen : DWORD;
    dwCompStrOffset : DWORD;
    dwTargetStrLen : DWORD;
    dwTargetStrOffset : DWORD;
  end;
  RECONVERTSTRING = tagRECONVERTSTRING;
  TRECONVERTSTRING = RECONVERTSTRING;
  PRECONVERTSTRING = PtagRECONVERTSTRING;
  NPRECONVERTSTRING = PtagRECONVERTSTRING;
  LPRECONVERTSTRING = PtagRECONVERTSTRING;

const
  STYLE_DESCRIPTION_SIZE = 32;

type
  PtagSTYLEBUFA = ^tagSTYLEBUFA;
  tagSTYLEBUFA = packed record
    dwStyle : DWORD;
    szDescription : array [0..STYLE_DESCRIPTION_SIZE-1] of AnsiChar;
  end;
  STYLEBUFA = tagSTYLEBUFA;
  TSTYLEBUFA = STYLEBUFA;
  PSTYLEBUFA = PtagSTYLEBUFA;
  NPSTYLEBUFA = PtagSTYLEBUFA;
  LPSTYLEBUFA = PtagSTYLEBUFA;

type
  PtagSTYLEBUFW = ^tagSTYLEBUFW;
  tagSTYLEBUFW = packed record
    dwStyle : DWORD;
    szDescription : array [0..STYLE_DESCRIPTION_SIZE-1] of WCHAR;
  end;
  STYLEBUFW = tagSTYLEBUFW;
  TSTYLEBUFW = STYLEBUFW;
  PSTYLEBUFW = PtagSTYLEBUFW;
  NPSTYLEBUFW = PtagSTYLEBUFW;
  LPSTYLEBUFW = PtagSTYLEBUFW;

{$ifdef UNICODE}
  STYLEBUF    = STYLEBUFW;
  TSTYLEBUF   = TSTYLEBUFW;
  PSTYLEBUF   = PSTYLEBUFW;
  NPSTYLEBUF  = NPSTYLEBUFW;
  LPSTYLEBUF  = LPSTYLEBUFW;
{$else}
  STYLEBUF    = STYLEBUFA;
  TSTYLEBUF   = TSTYLEBUFA;
  PSTYLEBUF   = PSTYLEBUFA;
  NPSTYLEBUF  = NPSTYLEBUFA;
  LPSTYLEBUF  = LPSTYLEBUFA;
{$endif}

const
  IMEMENUITEM_STRING_SIZE = 80;

type
  PtagIMEMENUITEMINFOA = ^tagIMEMENUITEMINFOA;
  tagIMEMENUITEMINFOA = packed record
    cbSize : UINT;
    fType : UINT;
    fState : UINT;
    wID : UINT;
    hbmpChecked : HBITMAP;
    hbmpUnchecked : HBITMAP;
    dwItemData : DWORD;
    szString : array [0..IMEMENUITEM_STRING_SIZE-1] of AnsiChar;
    hbmpItem : HBITMAP;
  end;
  IMEMENUITEMINFOA = tagIMEMENUITEMINFOA;
  TIMEMENUITEMINFOA = IMEMENUITEMINFOA;
  PIMEMENUITEMINFOA = PtagIMEMENUITEMINFOA;
  NPIMEMENUITEMINFOA = PtagIMEMENUITEMINFOA;
  LPIMEMENUITEMINFOA = PtagIMEMENUITEMINFOA;

type
  PtagIMEMENUITEMINFOW = ^tagIMEMENUITEMINFOW;
  tagIMEMENUITEMINFOW = packed record
    cbSize : UINT;
    fType : UINT;
    fState : UINT;
    wID : UINT;
    hbmpChecked : HBITMAP;
    hbmpUnchecked : HBITMAP;
    dwItemData : DWORD;
    szString : array [0..IMEMENUITEM_STRING_SIZE-1] of WCHAR;
    hbmpItem : HBITMAP;
  end;
  IMEMENUITEMINFOW = tagIMEMENUITEMINFOW;
  TIMEMENUITEMINFOW = IMEMENUITEMINFOW;
  PIMEMENUITEMINFOW = PtagIMEMENUITEMINFOW;
  NPIMEMENUITEMINFOW = PtagIMEMENUITEMINFOW;
  LPIMEMENUITEMINFOW = PtagIMEMENUITEMINFOW;

{$ifdef UNICODE}
  IMEMENUITEMINFO    = IMEMENUITEMINFOW;
  TIMEMENUITEMINFO   = TIMEMENUITEMINFOW;
  PIMEMENUITEMINFO   = PIMEMENUITEMINFOW;
  NPIMEMENUITEMINFO  = NPIMEMENUITEMINFOW;
  LPIMEMENUITEMINFO  = LPIMEMENUITEMINFOW;
{$else}
  IMEMENUITEMINFO    = IMEMENUITEMINFOA;
  TIMEMENUITEMINFO   = TIMEMENUITEMINFOA;
  PIMEMENUITEMINFO   = PIMEMENUITEMINFOA;
  NPIMEMENUITEMINFO  = NPIMEMENUITEMINFOA;
  LPIMEMENUITEMINFO  = LPIMEMENUITEMINFOA;
{$endif}

type
  PtagIMECHARPOSITION = ^tagIMECHARPOSITION;
  tagIMECHARPOSITION = packed record
    dwSize : DWORD;
    dwCharPos : DWORD;
    pt : POINT;
    cLineHeight : UINT;
    rcDocument : RECT;
  end;
  IMECHARPOSITION = tagIMECHARPOSITION;
  TIMECHARPOSITION = IMECHARPOSITION;
  PIMECHARPOSITION = PtagIMECHARPOSITION;
  NPIMECHARPOSITION = PtagIMECHARPOSITION;
  LPIMECHARPOSITION = PtagIMECHARPOSITION;

type
  IMCENUMPROC = function(par0: HIMC; par1: LPARAM): LongBool; stdcall;
  TIMCENUMPROC = IMCENUMPROC;

// prototype of IMM API

const
  Imm = 'imm32';

function ImmInstallIMEA(lpszIMEFileName, lpszLayoutText: LPCSTR): HKL; stdcall; external Imm name 'ImmInstallIMEA';
function ImmInstallIMEW(lpszIMEFileName, lpszLayoutText: LPCWSTR): HKL; stdcall; external Imm name 'ImmInstallIMEW';
{$ifndef UNICODE}
function ImmInstallIME(lpszIMEFileName, lpszLayoutText: LPCSTR): HKL; stdcall; external Imm name 'ImmInstallIMEA';
{$else}
function ImmInstallIME(lpszIMEFileName, lpszLayoutText: LPCWSTR): HKL; stdcall; external Imm name 'ImmInstallIMEW';
{$endif}

function ImmGetDefaultIMEWnd(wnd: HWND): HWND; stdcall; external Imm name 'ImmGetDefaultIMEWnd';
function NImmGetDescriptionA(kl: HKL; lpszDescription: LPSTR; uBufLen: UINT): UINT; stdcall; external Imm name 'ImmGetDescriptionA';
function ImmGetDescriptionW(kl: HKL; lpszDescription: LPWSTR; uBufLen: UINT): UINT; stdcall; external Imm name 'ImmGetDescriptionW';

{$ifndef UNICODE}
function ImmGetDescription(kl: HKL; lpszDescription: LPSTR; uBufLen: UINT): UINT; stdcall; external Imm name 'ImmGetDescriptionA';
{$else}
function ImmGetDescription(kl: HKL; lpszDescription: LPWSTR; uBufLen: UINT): UINT; stdcall; external Imm name 'ImmGetDescriptionW';
{$endif}

function ImmGetIMEFileNameA(kl: HKL; lpszFileName: LPSTR; uBufLen: UINT): UINT; stdcall; external Imm name 'ImmGetIMEFileNameA';
function ImmGetIMEFileNameW(kl: HKL; lpszFileName: LPWSTR; uBufLen: UINT): UINT; stdcall; external Imm name 'ImmGetIMEFileNameW';

{$ifndef UNICODE}
function ImmGetIMEFileName(kl: HKL; lpszFileName: LPSTR; uBufLen: UINT): UINT; stdcall; external Imm name 'ImmGetIMEFileNameA';
{$else}
function ImmGetIMEFileName(kl: HKL; lpszFileName: LPWSTR; uBufLen: UINT): UINT; stdcall; external Imm name 'ImmGetIMEFileNameW';
{$endif}

function ImmGetProperty (kl: HKL; fdwIndex: DWORD): DWORD; stdcall; external Imm name 'ImmGetProperty';
function ImmIsIME(kl: HKL): LongBool; stdcall; external Imm name 'ImmIsIME';
function ImmSimulateHotKey(wnd: HWND; dwHotKeyID: DWORD): LongBool; stdcall; external Imm name 'ImmSimulateHotKey';

function ImmCreateContext: HIMC; stdcall; external Imm name 'ImmCreateContext';
function ImmDestroyContext(imc: HIMC): LongBool; stdcall; external Imm name 'ImmDestroyContext';
function ImmGetContext(wnd: HWND): HIMC; stdcall; external Imm name 'ImmGetContext';

function ImmReleaseContext(wnd: HWND; imc: HIMC): LongBool; stdcall; external Imm name 'ImmReleaseContext';
function ImmAssociateContext(wnd: HWND; imc: HIMC): HIMC; stdcall; external Imm name 'ImmAssociateContext';

function ImmAssociateContextEx(wnd: HWND; imc: HIMC; dwFlags: DWORD): LongBool; stdcall; external Imm name 'ImmAssociateContextEx';
function ImmGetCompositionStringA(imc: HIMC; dwIndex: LONG;
    lpBuf: LPVOID; dwBufLen: DWORD): Longword; stdcall; external Imm name 'ImmGetCompositionStringA';
function ImmGetCompositionStringW(imc: HIMC; dwIndex: LONG;
    lpBuf: LPVOID; dwBufLen: DWORD): Longword; stdcall; external Imm name 'ImmGetCompositionStringW';

{$ifndef UNICODE}
function ImmGetCompositionString(imc: HIMC; dwIndex: DWORD;
    lpBuf: LPVOID; dwBufLen: DWORD): LONG; stdcall; external Imm name 'ImmGetCompositionStringA';
{$else}
function ImmGetCompositionString(imc: HIMC; dwIndex: DWORD;
    lpBuf: LPVOID; dwBufLen: DWORD): LONG; stdcall; external Imm name 'ImmGetCompositionStringW';
{$endif}

function ImmSetCompositionStringA(imc: HIMC; dwIndex: DWORD; lpComp: LPVOID;
    dwCompLen: DWORD; lpRead: LPVOID; dwReadLen: DWORD): LongBool; stdcall; external Imm name 'ImmSetCompositionStringA';
function ImmSetCompositionStringW(imc: HIMC; dwIndex: DWORD; lpComp: LPVOID;
    dwCompLen: DWORD; lpRead: LPVOID; dwReadLen: DWORD): LongBool; stdcall; external Imm name 'ImmSetCompositionStringW';

{$ifndef UNICODE}
function ImmSetCompositionString(imc: HIMC; dwIndex: DWORD; lpComp: LPVOID;
    dwCompLen: DWORD; lpRead: LPVOID; dwReadLen: DWORD): LongBool; stdcall; external Imm name 'ImmSetCompositionStringA';
{$else}
function ImmSetCompositionString(imc: HIMC; dwIndex: DWORD; lpComp: LPVOID;
    dwCompLen: DWORD; lpRead: LPVOID; dwReadLen: DWORD): LongBool; stdcall; external Imm name 'ImmSetCompositionStringW';
{$endif}

function ImmGetCandidateListCountA(imc: HIMC; lpdwListCount: LPDWORD): DWORD; stdcall; external Imm name 'ImmGetCandidateListCountA';
function ImmGetCandidateListCountW(imc: HIMC; lpdwListCount: LPDWORD): DWORD; stdcall; external Imm name 'ImmGetCandidateListCountW';

{$ifndef UNICODE}
function ImmGetCandidateListCount(imc: HIMC; lpdwListCount: LPDWORD): DWORD; stdcall; external Imm name 'ImmGetCandidateListCountA';
{$else}
function ImmGetCandidateListCount(imc: HIMC; lpdwListCount: LPDWORD): DWORD; stdcall; external Imm name 'ImmGetCandidateListCountW';
{$endif}

function ImmGetCandidateListA(imc: HIMC; deIndex: DWORD;
    lpCandList: LPCANDIDATELIST; dwBufLen: DWORD): DWORD; stdcall; external Imm name 'ImmGetCandidateListA';
function ImmGetCandidateListW(imc: HIMC; deIndex: DWORD;
    lpCandList: LPCANDIDATELIST; dwBufLen: DWORD): DWORD; stdcall; external Imm name 'ImmGetCandidateListW';

{$ifndef UNICODE}
function ImmGetCandidateList(imc: HIMC; deIndex: DWORD;
    lpCandList: LPCANDIDATELIST; dwBufLen: DWORD): DWORD; stdcall; external Imm name 'ImmGetCandidateListA';
{$else}
function ImmGetCandidateList(imc: HIMC; deIndex: DWORD;
    lpCandList: LPCANDIDATELIST; dwBufLen: DWORD): DWORD; stdcall; external Imm name 'ImmGetCandidateListW';
{$endif}

function ImmGetGuideLineA(imc: HIMC; dwIndex: DWORD; lpBuf: LPSTR;
    dwBufLen: DWORD): DWORD; stdcall ; external Imm name 'ImmGetGuideLineA';
function ImmGetGuideLineW(imc: HIMC; dwIndex: DWORD; lpBuf: LPWSTR;
    dwBufLen: DWORD): DWORD; stdcall ; external Imm name 'ImmGetGuideLineW';

{$ifndef UNICODE}
function ImmGetGuideLine(imc: HIMC; dwIndex: DWORD; lpBuf: LPSTR;
    dwBufLen: DWORD): DWORD; stdcall ; external Imm name 'ImmGetGuideLineA';
{$else}
function ImmGetGuideLine(imc: HIMC; dwIndex: DWORD; lpBuf: LPWSTR;
    dwBufLen: DWORD): DWORD; stdcall ; external Imm name 'ImmGetGuideLineW';
{$endif}

function ImmGetConversionStatus(imc: HIMC; lpfdwConversion, lpfdwSentence: LPDWORD): LongBool; stdcall ; external Imm name 'ImmGetConversionStatus';
function ImmSetConversionStatus(imc: HIMC; fdwConversion, fdwSentence: DWORD): LongBool; stdcall ; external Imm name 'ImmSetConversionStatus';
function ImmGetOpenStatus(imc: HIMC): LongBool; stdcall ; external Imm name 'ImmGetOpenStatus';
function ImmSetOpenStatus(imc: HIMC; par1: LongBool): LongBool; stdcall ; external Imm name 'ImmSetOpenStatus';

function ImmGetCompositionFontA(imc: HIMC; lplf: PLOGFONTA): LongBool; stdcall ; external Imm name 'ImmGetCompositionFontA';
function ImmGetCompositionFontW(imc: HIMC; lplf: PLOGFONTW): LongBool; stdcall ; external Imm name 'ImmGetCompositionFontW';

{$ifndef UNICODE}
function ImmGetCompositionFont(imc: HIMC; lplf: PLOGFONTA): LongBool; stdcall ; external Imm name 'ImmGetCompositionFontA';
{$else}
function ImmGetCompositionFont(imc: HIMC; lplf: PLOGFONTW): LongBool; stdcall ; external Imm name 'ImmGetCompositionFontW';
{$endif}

function ImmSetCompositionFontA(imc: HIMC; lplf: PLOGFONTA): LongBool; stdcall ; external Imm name 'ImmSetCompositionFontA';
function ImmSetCompositionFontW(imc: HIMC; lplf: PLOGFONTW): LongBool; stdcall ; external Imm name 'ImmSetCompositionFontW';

{$ifndef UNICODE}
function ImmSetCompositionFont(imc: HIMC; lplf: PLOGFONTA): LongBool; stdcall ; external Imm name 'ImmSetCompositionFontA';
{$else}
function ImmSetCompositionFont(imc: HIMC; lplf: PLOGFONTW): LongBool; stdcall ; external Imm name 'ImmSetCompositionFontW';
{$endif}

function ImmConfigureIMEA(kl: HKL; wnd: HWND; dwMode: DWORD; lpData: LPVOID): LongBool; stdcall ; external Imm name 'ImmConfigureIMEA';
function ImmConfigureIMEW(kl: HKL; wnd: HWND; dwMode: DWORD; lpData: LPVOID): LongBool; stdcall ; external Imm name 'ImmConfigureIMEW';

{$ifndef UNICODE}
function ImmConfigureIME(kl: HKL; wnd: HWND; dwMode: DWORD; lpData: LPVOID): LongBool; stdcall ; external Imm name 'ImmConfigureIMEA';
{$else}
function ImmConfigureIME(kl: HKL; wnd: HWND; dwMode: DWORD; lpData: LPVOID): LongBool; stdcall ; external Imm name 'ImmConfigureIMEW';
{$endif}

function ImmEscapeA(kl: HKL; imc: HIMC; uEscape: UINT; lpData: LPVOID): LRESULT; stdcall ; external Imm name 'ImmEscapeA';
function ImmEscapeW(kl: HKL; imc: HIMC; uEscape: UINT; lpData: LPVOID): LRESULT; stdcall ; external Imm name 'ImmEscapeW';

{$ifndef UNICODE}
function ImmEscape(kl: HKL; imc: HIMC; uEscape: UINT; lpData: LPVOID): LRESULT; stdcall ; external Imm name 'ImmEscapeA';
{$else}
function ImmEscape(kl: HKL; imc: HIMC; uEscape: UINT; lpData: LPVOID): LRESULT; stdcall ; external Imm name 'ImmEscapeW';
{$endif}

function ImmGetConversionListA(kl: HKL; imc: HIMC; lpSrc: LPCSTR;
    lpDst: LPCANDIDATELIST; dwBufLen: DWORD; uFlag: UINT): DWORD; stdcall ; external Imm name 'ImmGetConversionListA';
function ImmGetConversionListW(kl: HKL; imc: HIMC; lpSrc: LPCWSTR;
    lpDst: LPCANDIDATELIST; dwBufLen: DWORD; uFlag: UINT): DWORD; stdcall ; external Imm name 'ImmGetConversionListW';

{$ifndef UNICODE}
function ImmGetConversionList(kl: HKL; imc: HIMC; lpSrc: LPCSTR;
    lpDst: LPCANDIDATELIST; dwBufLen: DWORD; uFlag: UINT): DWORD; stdcall ; external Imm name 'ImmGetConversionListA';
{$else}
function ImmGetConversionList(kl: HKL; imc: HIMC; lpSrc: LPCWSTR;
    lpDst: LPCANDIDATELIST; dwBufLen: DWORD; uFlag: UINT): DWORD; stdcall ; external Imm name 'ImmGetConversionListW';
{$endif}

function ImmNotifyIME(imc: HIMC; dwAction, dwIndex, dwValue: DWORD): LongBool; stdcall ; external Imm name 'ImmNotifyIME';
function ImmGetStatusWindowPos(imc: HIMC; lpptPos: LPPOINT): LongBool; stdcall ; external Imm name 'ImmGetStatusWindowPos';
function ImmSetStatusWindowPos(imc: HIMC; lpptPos: LPPOINT): LongBool; stdcall ; external Imm name 'ImmSetStatusWindowPos';
function ImmGetCompositionWindow(imc: HIMC; lpCompForm: LPCOMPOSITIONFORM): LongBool; stdcall ; external Imm name 'ImmGetCompositionWindow';
function ImmSetCompositionWindow(imc: HIMC; lpCompForm: LPCOMPOSITIONFORM): LongBool; stdcall ; external Imm name 'ImmSetCompositionWindow';
function ImmGetCandidateWindow(imc: HIMC; par1: DWORD; lpCandidate: LPCANDIDATEFORM): LongBool; stdcall ; external Imm name 'ImmGetCandidateWindow(';
function ImmSetCandidateWindow(imc: HIMC; lpCandidate: LPCANDIDATEFORM): LongBool; stdcall ; external Imm name 'ImmSetCandidateWindow';

function ImmIsUIMessageA(wnd: HWND; msg: UINT; wPar: WPARAM; lPar: LPARAM): LongBool; stdcall ; external Imm name 'ImmIsUIMessageA';
function ImmIsUIMessageW(wnd: HWND; msg: UINT; wPar: WPARAM; lPar: LPARAM): LongBool; stdcall ; external Imm name 'ImmIsUIMessageW';

{$ifndef UNICODE}
function ImmIsUIMessage(wnd: HWND; msg: UINT; wPar: WPARAM; lPar: LPARAM): LongBool; stdcall ; external Imm name 'ImmIsUIMessageA';
{$else}
function ImmIsUIMessage(wnd: HWND; msg: UINT; wPar: WPARAM; lPar: LPARAM): LongBool; stdcall ; external Imm name 'ImmIsUIMessageW';
{$endif}

function ImmGetVirtualKey(wnd: HWND): UINT; stdcall ; external Imm name 'ImmGetVirtualKey';

type
  REGISTERWORDENUMPROCA = function(lpszReading: LPCSTR; par1: DWORD;
    lpszString: LPCSTR; par3: LPVOID): Integer; stdcall;
  TREGISTERWORDENUMPROCA = REGISTERWORDENUMPROCA;

  REGISTERWORDENUMPROCW = function(lpszReading: LPCWSTR; par1: DWORD;
    lpszString: LPCWSTR; par3: LPVOID): Integer; stdcall;
  TREGISTERWORDENUMPROCW = REGISTERWORDENUMPROCW;
  {$ifdef UNICODE}
    TREGISTERWORDENUMPROC = REGISTERWORDENUMPROCW;
    REGISTERWORDENUMPROC  = REGISTERWORDENUMPROCW;
  {$else}
    TREGISTERWORDENUMPROC = REGISTERWORDENUMPROCA;
    REGISTERWORDENUMPROC  = REGISTERWORDENUMPROCA;
  {$endif}

function ImmRegisterWordA(kl: HKL; lpszReading: LPCSTR; dwStyle: DWORD; lpszRegister: LPCSTR): LongBool; stdcall ; external Imm name 'ImmRegisterWordA';
function ImmRegisterWordW(kl: HKL; lpszReading: LPCWSTR; dwStyle: DWORD; lpszRegister: LPCWSTR): LongBool; stdcall ; external Imm name 'ImmRegisterWordW';


{$ifndef UNICODE}
function ImmRegisterWord(kl: HKL; lpszReading: LPCSTR; dwStyle: DWORD; lpszRegister: LPCSTR): LongBool; stdcall ; external Imm name 'ImmRegisterWordA';
{$else}
function ImmRegisterWord(kl: HKL; lpszReading: LPCWSTR; dwStyle: DWORD; lpszRegister: LPCWSTR): LongBool; stdcall ; external Imm name 'ImmRegisterWordW';
{$endif}

function ImmUnregisterWordA(kl: HKL; lpszReading: LPCSTR; dwStyle: DWORD; lpszUnregister: LPCSTR): LongBool; stdcall ; external Imm name 'ImmUnregisterWordA';
function ImmUnregisterWordW(kl: HKL; lpszReading: LPCWSTR; dwStyle: DWORD; lpszUnregister: LPCWSTR): LongBool; stdcall ; external Imm name 'ImmUnregisterWordW';

{$ifndef UNICODE}
function ImmUnregisterWord(kl: HKL; lpszReading: LPCSTR; dwStyle: DWORD; lpszUnregister: LPCSTR): LongBool; stdcall ; external Imm name 'ImmUnregisterWordA';
{$else}
function ImmUnregisterWord(kl: HKL; lpszReading: LPCWSTR; dwStyle: DWORD; lpszUnregister: LPCWSTR): LongBool; stdcall ; external Imm name 'ImmUnregisterWordW';
{$endif}

function ImmGetRegisterWordStyleA(kl: HKL; nItem: UINT; lpStyleBuf: LPSTYLEBUFA): UINT; stdcall ; external Imm name 'ImmGetRegisterWordStyleA';
function ImmGetRegisterWordStyleW(kl: HKL; nItem: UINT; lpStyleBuf: LPSTYLEBUFW): UINT; stdcall ; external Imm name 'ImmGetRegisterWordStyleW';

{$ifndef UNICODE}
function ImmGetRegisterWordStyle(kl: HKL; nItem: UINT; lpStyleBuf: LPSTYLEBUFA): UINT; stdcall ; external Imm name 'ImmGetRegisterWordStyleA';
{$else}
function ImmGetRegisterWordStyle(kl: HKL; nItem: UINT; lpStyleBuf: LPSTYLEBUFW): UINT; stdcall ; external Imm name 'ImmGetRegisterWordStyleW';
{$endif}

function ImmEnumRegisterWordA(kl: HKL; lpfnEnumProc: REGISTERWORDENUMPROCA;
    lpszReading: LPCSTR; dwStyle: DWORD; lpszRegister: LPCSTR; lpData: LPVOID): UINT; stdcall ; external Imm name 'ImmEnumRegisterWordA';
function ImmEnumRegisterWordW(kl: HKL; lpfnEnumProc: REGISTERWORDENUMPROCW;
    lpszReading: LPCWSTR; dwStyle: DWORD; lpszRegister: LPCWSTR; lpData: LPVOID): UINT; stdcall ; external Imm name 'ImmEnumRegisterWordW';

{$ifndef UNICODE}
function ImmEnumRegisterWord(kl: HKL; lpfnEnumProc: REGISTERWORDENUMPROCA;
    lpszReading: LPCSTR; dwStyle: DWORD; lpszRegister: LPCSTR; lpData: LPVOID): UINT; stdcall ; external Imm name 'ImmEnumRegisterWordA';
{$else}
function ImmEnumRegisterWord(kl: HKL; lpfnEnumProc: REGISTERWORDENUMPROCW;
    lpszReading: LPCWSTR; dwStyle: DWORD; lpszRegister: LPCWSTR; lpData: LPVOID): UINT; stdcall ; external Imm name 'ImmEnumRegisterWordW';
{$endif}

function ImmDisableIME(idThread: DWORD): LongBool; stdcall  ; external Imm name 'ImmDisableIME';
function ImmEnumInputContext(idThread: DWORD; lpfn: IMCENUMPROC; lParam: LPARAM): LongBool; stdcall ; external Imm name 'ImmEnumInputContext';
function ImmGetImeMenuItemsA(imc: HIMC; dwFlags, dwType: DWORD;
    lpImeParentMenu, lpImeMenu: LPIMEMENUITEMINFOA; dwSize: DWORD): DWORD; stdcall ; external Imm name 'ImmGetImeMenuItemsA';
function ImmGetImeMenuItemsW(par0: HIMC; dwFlags, dwType: DWORD;
    lpImeParentMenu, lpImeMenu: LPIMEMENUITEMINFOW; dwSize: DWORD): DWORD; stdcall ; external Imm name 'ImmGetImeMenuItemsW';

{$ifndef UNICODE}
function ImmGetImeMenuItems(imc: HIMC; dwFlags, dwType: DWORD;
    lpImeParentMenu, lpImeMenu: LPIMEMENUITEMINFOA; dwSize: DWORD): DWORD; stdcall ; external Imm name 'ImmGetImeMenuItemsA';
{$else}
function ImmGetImeMenuItems(par0: HIMC; dwFlags, dwType: DWORD;
    lpImeParentMenu, lpImeMenu: LPIMEMENUITEMINFOW; dwSize: DWORD): DWORD; stdcall ; external Imm name 'ImmGetImeMenuItemsW';
{$endif}

function ImmDisableTextFrameService(idThread: DWORD): LongBool; stdcall ; external Imm name 'ImmDisableTextFrameService';

// wParam for WM_IME_CONTROL
const
  IMC_GETCANDIDATEPOS      = $0007;
  IMC_SETCANDIDATEPOS      = $0008;
  IMC_GETCOMPOSITIONFONT   = $0009;
  IMC_SETCOMPOSITIONFONT   = $000A;
  IMC_GETCOMPOSITIONWINDOW = $000B;
  IMC_SETCOMPOSITIONWINDOW = $000C;
  IMC_GETSTATUSWINDOWPOS   = $000F;
  IMC_SETSTATUSWINDOWPOS   = $0010;
  IMC_CLOSESTATUSWINDOW    = $0021;
  IMC_OPENSTATUSWINDOW     = $0022;

  // dwAction for ImmNotifyIME
  NI_OPENCANDIDATE            = $0010;
  NI_CLOSECANDIDATE           = $0011;
  NI_SELECTCANDIDATESTR       = $0012;
  NI_CHANGECANDIDATELIST      = $0013;
  NI_FINALIZECONVERSIONRESULT = $0014;
  NI_COMPOSITIONSTR           = $0015;
  NI_SETCANDIDATE_PAGESTART   = $0016;
  NI_SETCANDIDATE_PAGESIZE    = $0017;
  NI_IMEMENUSELECTED          = $0018;

  // lParam for WM_IME_SETCONTEXT
  ISC_SHOWUICANDIDATEWINDOW    = $00000001;
  ISC_SHOWUICOMPOSITIONWINDOW  = $80000000;
  ISC_SHOWUIGUIDELINE          = $40000000;
  ISC_SHOWUIALLCANDIDATEWINDOW = $0000000F;
  ISC_SHOWUIALL                = $C000000F;

  // dwIndex for ImmNotifyIME/NI_COMPOSITIONSTR
  CPS_COMPLETE  = $0001;
  CPS_CONVERT   = $0002;
  CPS_REVERT    = $0003;
  CPS_CANCEL    = $0004;

  // the modifiers of hot key
  MOD_ALT      = $0001;
  MOD_CONTROL  = $0002;
  MOD_SHIFT    = $0004;
  MOD_LEFT     = $8000;
  MOD_RIGHT    = $4000;
  MOD_ON_KEYUP = $0800;
  MOD_IGNORE_ALL_MODIFIER = $0400;

  // Windows for Simplified Chinese Edition hot key ID from 0x10 - 0x2F
  IME_CHOTKEY_IME_NONIME_TOGGLE = $10;
  IME_CHOTKEY_SHAPE_TOGGLE      = $11;
  IME_CHOTKEY_SYMBOL_TOGGLE     = $12;

  // Windows for Japanese Edition hot key ID from 0x30 - 0x4F
  IME_JHOTKEY_CLOSE_OPEN    = $30;

  // Windows for Korean Edition hot key ID from 0x50 - 0x6F
  IME_KHOTKEY_SHAPE_TOGGLE  = $50;
  IME_KHOTKEY_HANJACONVERT  = $51;
  IME_KHOTKEY_ENGLISH       = $52;

  // Windows for Traditional Chinese Edition hot key ID from 0x70 - 0x8F
  IME_THOTKEY_IME_NONIME_TOGGLE = $70;
  IME_THOTKEY_SHAPE_TOGGLE      = $71;
  IME_THOTKEY_SYMBOL_TOGGLE     = $72;

  // direct switch hot key ID from 0x100 - 0x11F
  IME_HOTKEY_DSWITCH_FIRST  = $100;
  IME_HOTKEY_DSWITCH_LAST   = $11F;

  // IME private hot key from 0x200 - 0x21F
  IME_HOTKEY_PRIVATE_FIRST          = $200;
  IME_ITHOTKEY_RESEND_RESULTSTR     = $200;
  IME_ITHOTKEY_PREVIOUS_COMPOSITION = $201;
  IME_ITHOTKEY_UISTYLE_TOGGLE       = $202;
  IME_ITHOTKEY_RECONVERTSTRING      = $203;
  IME_HOTKEY_PRIVATE_LAST           = $21F;

  // parameter of ImmGetCompositionString
  GCS_COMPREADSTR       = $0001;
  GCS_COMPREADATTR      = $0002;
  GCS_COMPREADCLAUSE    = $0004;
  GCS_COMPSTR           = $0008;
  GCS_COMPATTR          = $0010;
  GCS_COMPCLAUSE        = $0020;
  GCS_CURSORPOS         = $0080;
  GCS_DELTASTART        = $0100;
  GCS_RESULTREADSTR     = $0200;
  GCS_RESULTREADCLAUSE  = $0400;
  GCS_RESULTSTR         = $0800;
  GCS_RESULTCLAUSE      = $1000;

  // style bit flags for WM_IME_COMPOSITION
  CS_INSERTCHAR   = $2000;
  CS_NOMOVECARET  = $4000;

  // IME version constants
  IMEVER_0310 = $0003000A;
  IMEVER_0400 = $00040000;


  // IME property bits
  IME_PROP_AT_CARET              = $00010000;
  IME_PROP_SPECIAL_UI            = $00020000;
  IME_PROP_CANDLIST_START_FROM_1 = $00040000;
  IME_PROP_UNICODE               = $00080000;
  IME_PROP_COMPLETE_ON_UNSELECT  = $00100000;

  // IME UICapability bits
  UI_CAP_2700   = $00000001;
  UI_CAP_ROT90  = $00000002;
  UI_CAP_ROTANY = $00000004;

  // ImmSetCompositionString Capability bits
  SCS_CAP_COMPSTR            = $00000001;
  SCS_CAP_MAKEREAD           = $00000002;
  SCS_CAP_SETRECONVERTSTRING = $00000004;

  // IME WM_IME_SELECT inheritance Capability bits
  SELECT_CAP_CONVERSION = $00000001;
  SELECT_CAP_SENTENCE   = $00000002;

  // ID for deIndex of ImmGetGuideLine
  GGL_LEVEL   = $00000001;
  GGL_INDEX   = $00000002;
  GGL_STRING  = $00000003;
  GGL_PRIVATE = $00000004;

  // ID for dwLevel of GUIDELINE Structure
  GL_LEVEL_NOGUIDELINE = $00000000;
  GL_LEVEL_FATAL       = $00000001;
  GL_LEVEL_ERROR       = $00000002;
  GL_LEVEL_WARNING     = $00000003;
  GL_LEVEL_INFORMATION = $00000004;

  // ID for dwIndex of GUIDELINE Structure
  GL_ID_UNKNOWN           = $00000000;
  GL_ID_NOMODULE          = $00000001;
  GL_ID_NODICTIONARY      = $00000010;
  GL_ID_CANNOTSAVE        = $00000011;
  GL_ID_NOCONVERT         = $00000020;
  GL_ID_TYPINGERROR       = $00000021;
  GL_ID_TOOMANYSTROKE     = $00000022;
  GL_ID_READINGCONFLICT   = $00000023;
  GL_ID_INPUTREADING      = $00000024;
  GL_ID_INPUTRADICAL      = $00000025;
  GL_ID_INPUTCODE         = $00000026;
  GL_ID_INPUTSYMBOL       = $00000027;
  GL_ID_CHOOSECANDIDATE   = $00000028;
  GL_ID_REVERSECONVERSION = $00000029;
  GL_ID_PRIVATE_FIRST     = $00008000;
  GL_ID_PRIVATE_LAST      = $0000FFFF;

  // ID for dwIndex of ImmGetProperty
  IGP_GETIMEVERSION = -4;
  IGP_PROPERTY      = $00000004;
  IGP_CONVERSION    = $00000008;
  IGP_SENTENCE      = $0000000c;
  IGP_UI            = $00000010;
  IGP_SETCOMPSTR    = $00000014;
  IGP_SELECT        = $00000018;

  // dwIndex for ImmSetCompositionString API
  SCS_SETSTR               = (GCS_COMPREADSTR or GCS_COMPSTR);
  SCS_CHANGEATTR           = (GCS_COMPREADATTR or GCS_COMPATTR);
  SCS_CHANGECLAUSE         = (GCS_COMPREADCLAUSE or GCS_COMPCLAUSE);
  SCS_SETRECONVERTSTRING   = $00010000;
  SCS_QUERYRECONVERTSTRING = $00020000;

  // attribute for COMPOSITIONSTRING Structure
  ATTR_INPUT               = $00;
  ATTR_TARGET_CONVERTED    = $01;
  ATTR_CONVERTED           = $02;
  ATTR_TARGET_NOTCONVERTED = $03;
  ATTR_INPUT_ERROR         = $04;
  ATTR_FIXEDCONVERTED      = $05;

  // bit field for IMC_SETCOMPOSITIONWINDOW, IMC_SETCANDIDATEWINDOW
  CFS_DEFAULT        = $0000;
  CFS_RECT           = $0001;
  CFS_POINT          = $0002;
  CFS_FORCE_POSITION = $0020;
  CFS_CANDIDATEPOS   = $0040;
  CFS_EXCLUDE        = $0080;

  // conversion direction for ImmGetConversionList
  GCL_CONVERSION        = $0001;
  GCL_REVERSECONVERSION = $0002;
  GCL_REVERSE_LENGTH    = $0003;

  // bit field for conversion mode
  // IME_CMODE_HANGEUL is old name of IME_CMODE_HANGUL. It will be gone eventually.
  IME_CMODE_HANGEUL      = IME_CMODE_NATIVE;
  IME_CMODE_SOFTKBD      = $0080;
  IME_CMODE_NOCONVERSION = $0100;
  IME_CMODE_EUDC         = $0200;
  IME_CMODE_SYMBOL       = $0400;
  IME_CMODE_FIXED        = $0800;
  IME_CMODE_RESERVED     = $F0000000;

  // bit field for sentence mode
  IME_SMODE_NONE          = $0000;
  IME_SMODE_PLAURALCLAUSE = $0001;
  IME_SMODE_SINGLECONVERT = $0002;
  IME_SMODE_AUTOMATIC     = $0004;
  IME_SMODE_PHRASEPREDICT = $0008;
  IME_SMODE_CONVERSATION  = $0010;
  IME_SMODE_RESERVED      = $0000F000;

  // style of candidate
  IME_CAND_UNKNOWN = $0000;
  IME_CAND_READ    = $0001;
  IME_CAND_CODE    = $0002;
  IME_CAND_MEANING = $0003;
  IME_CAND_RADICAL = $0004;
  IME_CAND_STROKE  = $0005;

  // wParam of report message WM_IME_NOTIFY
  IMN_CLOSESTATUSWINDOW    = $0001;
  IMN_OPENSTATUSWINDOW     = $0002;
  IMN_CHANGECANDIDATE      = $0003;
  IMN_CLOSECANDIDATE       = $0004;
  IMN_OPENCANDIDATE        = $0005;
  IMN_SETCONVERSIONMODE    = $0006;
  IMN_SETSENTENCEMODE      = $0007;
  IMN_SETOPENSTATUS        = $0008;
  IMN_SETCANDIDATEPOS      = $0009;
  IMN_SETCOMPOSITIONFONT   = $000A;
  IMN_SETCOMPOSITIONWINDOW = $000B;
  IMN_SETSTATUSWINDOWPOS   = $000C;
  IMN_GUIDELINE            = $000D;
  IMN_PRIVATE              = $000E;

  // wParam of report message WM_IME_REQUEST
  IMR_COMPOSITIONWINDOW      = $0001;
  IMR_CANDIDATEWINDOW        = $0002;
  IMR_COMPOSITIONFONT        = $0003;
  IMR_RECONVERTSTRING        = $0004;
  IMR_CONFIRMRECONVERTSTRING = $0005;
  IMR_QUERYCHARPOSITION      = $0006;
  IMR_DOCUMENTFEED           = $0007;

  // error code of ImmGetCompositionString
  IMM_ERROR_NODATA  = -1;
  IMM_ERROR_GENERAL = -2;

  // dialog mode of ImmConfigureIME
  IME_CONFIG_GENERAL          = 1;
  IME_CONFIG_REGISTERWORD     = 2;
  IME_CONFIG_SELECTDICTIONARY = 3;

  // flags for ImmEscape
  IME_ESC_QUERY_SUPPORT        = $0003;
  IME_ESC_RESERVED_FIRST       = $0004;
  IME_ESC_RESERVED_LAST        = $07FF;
  IME_ESC_PRIVATE_FIRST        = $0800;
  IME_ESC_PRIVATE_LAST         = $0FFF;
  IME_ESC_SEQUENCE_TO_INTERNAL = $1001;
  IME_ESC_GET_EUDC_DICTIONARY  = $1003;
  IME_ESC_SET_EUDC_DICTIONARY  = $1004;
  IME_ESC_MAX_KEY              = $1005;
  IME_ESC_IME_NAME             = $1006;
  IME_ESC_SYNC_HOTKEY          = $1007;
  IME_ESC_HANJA_MODE           = $1008;
  IME_ESC_AUTOMATA             = $1009;
  IME_ESC_PRIVATE_HOTKEY       = $100a;
  IME_ESC_GETHELPFILENAME      = $100b;

  // style of word registration
  IME_REGWORD_STYLE_EUDC       = $00000001;
  IME_REGWORD_STYLE_USER_FIRST = $80000000;
  IME_REGWORD_STYLE_USER_LAST  = $FFFFFFFF;

  // dwFlags for ImmAssociateContextEx
  IACE_CHILDREN        = $0001;
  IACE_DEFAULT         = $0010;
  IACE_IGNORENOCONTEXT = $0020;

  // dwFlags for ImmGetImeMenuItems
  IGIMIF_RIGHTMENU = $0001;

  // dwType for ImmGetImeMenuItems
  IGIMII_CMODE      = $0001;
  IGIMII_SMODE      = $0002;
  IGIMII_CONFIGURE  = $0004;
  IGIMII_TOOLS      = $0008;
  IGIMII_HELP       = $0010;
  IGIMII_OTHER      = $0020;
  IGIMII_INPUTTOOLS = $0040;

  // fType of IMEMENUITEMINFO structure
  IMFT_RADIOCHECK = $00001;
  IMFT_SEPARATOR  = $00002;
  IMFT_SUBMENU    = $00004;

  // fState of IMEMENUITEMINFO structure
  IMFS_GRAYED    = MFS_GRAYED;
  IMFS_DISABLED  = MFS_DISABLED;
  IMFS_CHECKED   = MFS_CHECKED;
  IMFS_HILITE    = MFS_HILITE;
  IMFS_ENABLED   = MFS_ENABLED;
  IMFS_UNCHECKED = MFS_UNCHECKED;
  IMFS_UNHILITE  = MFS_UNHILITE;
  IMFS_DEFAULT   = MFS_DEFAULT;

  // type of soft keyboard
  // for Windows Tranditional Chinese Edition
  SOFTKEYBOARD_TYPE_T1 = $0001;

  // for Windows Simplified Chinese Edition
  SOFTKEYBOARD_TYPE_C1 = $0002;

implementation


end.