
{*****************************************************************************}
{                                                                             }
{    Tnt Delphi Unicode Controls                                              }
{      http://www.tntware.com/delphicontrols/unicode/                         }
{        Version: 2.3.0                                                       }
{                                                                             }
{    Copyright (c) 2002-2007, Troy Wolbrink (troy.wolbrink@tntware.com)       }
{                                                                             }
{*****************************************************************************}

unit ActiveIMM_TLB;

{$INCLUDE TntCompilers.inc}

{TNT-IGNORE-UNIT}

// ************************************************************************ //
// WARNING                                                                    
// -------                                                                    
// The types declared in this file were generated from data read from a       
// Type Library. If this type library is explicitly or indirectly (via        
// another type library referring to this type library) re-imported, or the   
// 'Refresh' command of the Type Library Editor activated while editing the   
// Type Library, the contents of this file will be regenerated and all        
// manual modifications will be lost.                                         
// ************************************************************************ //

// PASTLWTR : $Revision:   1.88.1.0.1.0  $
// File generated on 04/03/2001 11:32:13 PM from Type Library described below.

// *************************************************************************//
// NOTE:
// Items guarded by $IFDEF_LIVE_SERVER_AT_DESIGN_TIME are used by properties
// which return objects that may need to be explicitly created via a function
// call prior to any access via the property. These items have been disabled
// in order to prevent accidental use from within the object inspector. You
// may enable them by defining LIVE_SERVER_AT_DESIGN_TIME or by selectively
// removing them from the $IFDEF blocks. However, such items must still be
// programmatically created via a method of the appropriate CoClass before
// they can be used.
// ************************************************************************ //
// Type Lib: C:\Program Files\Microsoft Platform SDK\Include\dimm.tlb (1)
// IID\LCID: {4955DD30-B159-11D0-8FCF-00AA006BCC59}\0
// Helpfile: 
// DepndLst: 
//   (1) v2.0 stdole, (C:\WINNT\System32\Stdole2.tlb)
//   (2) v4.0 StdVCL, (C:\WINNT\System32\STDVCL40.DLL)
// Errors:
//   Hint: Member 'End' of 'IActiveIMMMessagePumpOwner' changed to 'End_'
//   Error creating palette bitmap of (TCActiveIMM) : Server D:\D5Addons\Dimm\dimm.dll contains no icons
// ************************************************************************ //
{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers. 
interface

uses
  Windows, ActiveX, Classes, OleServer;

// *********************************************************************//
// GUIDS declared in the TypeLibrary. Following prefixes are used:        
//   Type Libraries     : LIBID_xxxx                                      
//   CoClasses          : CLASS_xxxx                                      
//   DISPInterfaces     : DIID_xxxx                                       
//   Non-DISP interfaces: IID_xxxx                                        
// *********************************************************************//
const
  // TypeLibrary Major and minor versions
  ActiveIMMMajorVersion = 0;
  ActiveIMMMinorVersion = 1;

  LIBID_ActiveIMM: TGUID = '{4955DD30-B159-11D0-8FCF-00AA006BCC59}';

  IID_IEnumRegisterWordA: TGUID = '{08C03412-F96B-11D0-A475-00AA006BCC59}';
  IID_IEnumRegisterWordW: TGUID = '{4955DD31-B159-11D0-8FCF-00AA006BCC59}';
  IID_IEnumInputContext: TGUID = '{09B5EAB0-F997-11D1-93D4-0060B067B86E}';
  IID_IActiveIMMRegistrar: TGUID = '{B3458082-BD00-11D1-939B-0060B067B86E}';
  IID_IActiveIMMMessagePumpOwner: TGUID = '{B5CF2CFA-8AEB-11D1-9364-0060B067B86E}';
  IID_IActiveIMMApp: TGUID = '{08C0E040-62D1-11D1-9326-0060B067B86E}';
  IID_IActiveIMMIME: TGUID = '{08C03411-F96B-11D0-A475-00AA006BCC59}';
  IID_IActiveIME: TGUID = '{6FE20962-D077-11D0-8FE7-00AA006BCC59}';
  IID_IActiveIME2: TGUID = '{E1C4BF0E-2D53-11D2-93E1-0060B067B86E}';
  CLASS_CActiveIMM: TGUID = '{4955DD33-B159-11D0-8FCF-00AA006BCC59}';
type

// *********************************************************************//
// Forward declaration of types defined in TypeLibrary                    
// *********************************************************************//
  IEnumRegisterWordA = interface;
  IEnumRegisterWordW = interface;
  IEnumInputContext = interface;
  IActiveIMMRegistrar = interface;
  IActiveIMMMessagePumpOwner = interface;
  IActiveIMMApp = interface;
  IActiveIMMIME = interface;
  IActiveIME = interface;
  IActiveIME2 = interface;

// *********************************************************************//
// Declaration of CoClasses defined in Type Library                       
// (NOTE: Here we map each CoClass to its Default Interface)              
// *********************************************************************//
  CActiveIMM = IActiveIMMApp;


// *********************************************************************//
// Declaration of structures, unions and aliases.                         
// *********************************************************************//
  wireHBITMAP = ^_userHBITMAP; 
  wireHWND = ^_RemotableHandle; 
  PUserType1 = ^TGUID; {*}
  PUserType2 = ^tagMSG; {*}
  PUserType3 = ^REGISTERWORDA; {*}
  PUserType4 = ^REGISTERWORDW; {*}
  PUserType5 = ^CANDIDATEFORM; {*}
  PUserType6 = ^LOGFONTA; {*}
  PUserType7 = ^LOGFONTW; {*}
  PUserType8 = ^COMPOSITIONFORM; {*}
  PUserType9 = ^tagPOINT; {*}
  PWord1 = ^Word; {*}
  PUserType10 = ^IMEMENUITEMINFOA; {*}
  PUserType11 = ^IMEMENUITEMINFOW; {*}
  PUserType12 = ^INPUTCONTEXT; {*}
  PByte1 = ^Byte; {*}

  __MIDL___MIDL_itf_dimm_0000_0001 = packed record
    lpReading: PAnsiChar;
    lpWord: PAnsiChar;
  end;

  REGISTERWORDA = __MIDL___MIDL_itf_dimm_0000_0001; 

  __MIDL___MIDL_itf_dimm_0000_0002 = packed record
    lpReading: PWideChar;
    lpWord: PWideChar;
  end;

  REGISTERWORDW = __MIDL___MIDL_itf_dimm_0000_0002; 

  __MIDL___MIDL_itf_dimm_0000_0003 = packed record
    lfHeight: Integer;
    lfWidth: Integer;
    lfEscapement: Integer;
    lfOrientation: Integer;
    lfWeight: Integer;
    lfItalic: Byte;
    lfUnderline: Byte;
    lfStrikeOut: Byte;
    lfCharSet: Byte;
    lfOutPrecision: Byte;
    lfClipPrecision: Byte;
    lfQuality: Byte;
    lfPitchAndFamily: Byte;
    lfFaceName: array[0..31] of Shortint;
  end;

  LOGFONTA = __MIDL___MIDL_itf_dimm_0000_0003; 

  __MIDL___MIDL_itf_dimm_0000_0004 = packed record
    lfHeight: Integer;
    lfWidth: Integer;
    lfEscapement: Integer;
    lfOrientation: Integer;
    lfWeight: Integer;
    lfItalic: Byte;
    lfUnderline: Byte;
    lfStrikeOut: Byte;
    lfCharSet: Byte;
    lfOutPrecision: Byte;
    lfClipPrecision: Byte;
    lfQuality: Byte;
    lfPitchAndFamily: Byte;
    lfFaceName: array[0..31] of Word;
  end;

  LOGFONTW = __MIDL___MIDL_itf_dimm_0000_0004; 

  tagPOINT = packed record
    x: Integer;
    y: Integer;
  end;

  tagRECT = packed record
    left: Integer;
    top: Integer;
    right: Integer;
    bottom: Integer;
  end;

  __MIDL___MIDL_itf_dimm_0000_0005 = packed record
    dwIndex: LongWord;
    dwStyle: LongWord;
    ptCurrentPos: tagPOINT;
    rcArea: tagRECT;
  end;

  CANDIDATEFORM = __MIDL___MIDL_itf_dimm_0000_0005; 

  __MIDL___MIDL_itf_dimm_0000_0006 = packed record
    dwStyle: LongWord;
    ptCurrentPos: tagPOINT;
    rcArea: tagRECT;
  end;

  COMPOSITIONFORM = __MIDL___MIDL_itf_dimm_0000_0006; 

  __MIDL___MIDL_itf_dimm_0000_0007 = packed record
    dwSize: LongWord;
    dwStyle: LongWord;
    dwCount: LongWord;
    dwSelection: LongWord;
    dwPageStart: LongWord;
    dwPageSize: LongWord;
    dwOffset: array[0..0] of LongWord;
  end;

  CANDIDATELIST = __MIDL___MIDL_itf_dimm_0000_0007; 

  __MIDL___MIDL_itf_dimm_0000_0008 = packed record
    dwStyle: LongWord;
    szDescription: array[0..31] of Shortint;
  end;

  STYLEBUFA = __MIDL___MIDL_itf_dimm_0000_0008; 

  __MIDL___MIDL_itf_dimm_0000_0009 = packed record
    dwStyle: LongWord;
    szDescription: array[0..31] of Word;
  end;

  STYLEBUFW = __MIDL___MIDL_itf_dimm_0000_0009; 

  __MIDL___MIDL_itf_dimm_0000_0010 = packed record
    cbSize: SYSUINT;
    fType: SYSUINT;
    fState: SYSUINT;
    wID: SYSUINT;
    hbmpChecked: wireHBITMAP;
    hbmpUnchecked: wireHBITMAP;
    dwItemData: LongWord;
    szString: array[0..79] of Shortint;
    hbmpItem: wireHBITMAP;
  end;

  IMEMENUITEMINFOA = __MIDL___MIDL_itf_dimm_0000_0010; 

  _userBITMAP = packed record
    bmType: Integer;
    bmWidth: Integer;
    bmHeight: Integer;
    bmWidthBytes: Integer;
    bmPlanes: Word;
    bmBitsPixel: Word;
    cbSize: LongWord;
    pBuffer: ^Byte;
  end;

  __MIDL_IWinTypes_0007 = record
    case Integer of
      0: (hInproc: Integer);
      1: (hRemote: ^_userBITMAP);
  end;

  _userHBITMAP = packed record
    fContext: Integer;
    u: __MIDL_IWinTypes_0007;
  end;

  __MIDL___MIDL_itf_dimm_0000_0011 = packed record
    cbSize: SYSUINT;
    fType: SYSUINT;
    fState: SYSUINT;
    wID: SYSUINT;
    hbmpChecked: wireHBITMAP;
    hbmpUnchecked: wireHBITMAP;
    dwItemData: LongWord;
    szString: array[0..79] of Word;
    hbmpItem: wireHBITMAP;
  end;

  IMEMENUITEMINFOW = __MIDL___MIDL_itf_dimm_0000_0011; 

  __MIDL___MIDL_itf_dimm_0000_0013 = record
    case Integer of
      0: (A: LOGFONTA);
      1: (W: LOGFONTW);
  end;

  __MIDL___MIDL_itf_dimm_0000_0012 = packed record
    hWnd: wireHWND;
    fOpen: Integer;
    ptStatusWndPos: tagPOINT;
    ptSoftKbdPos: tagPOINT;
    fdwConversion: LongWord;
    fdwSentence: LongWord;
    lfFont: __MIDL___MIDL_itf_dimm_0000_0013;
    cfCompForm: COMPOSITIONFORM;
    cfCandForm: array[0..3] of CANDIDATEFORM;
    hCompStr: LongWord;
    hCandInfo: LongWord;
    hGuideLine: LongWord;
    hPrivate: LongWord;
    dwNumMsgBuf: LongWord;
    hMsgBuf: LongWord;
    fdwInit: LongWord;
    dwReserve: array[0..2] of LongWord;
  end;

  __MIDL_IWinTypes_0009 = record
    case Integer of
      0: (hInproc: Integer);
      1: (hRemote: Integer);
  end;

  _RemotableHandle = packed record
    fContext: Integer;
    u: __MIDL_IWinTypes_0009;
  end;

  INPUTCONTEXT = __MIDL___MIDL_itf_dimm_0000_0012; 

  __MIDL___MIDL_itf_dimm_0000_0014 = packed record
    dwPrivateDataSize: LongWord;
    fdwProperty: LongWord;
    fdwConversionCaps: LongWord;
    fdwSentenceCaps: LongWord;
    fdwUICaps: LongWord;
    fdwSCSCaps: LongWord;
    fdwSelectCaps: LongWord;
  end;

  IMEINFO = __MIDL___MIDL_itf_dimm_0000_0014;
  UINT_PTR = LongWord; 
  LONG_PTR = Integer; 

  tagMSG = packed record
    hWnd: wireHWND;
    message: SYSUINT;
    wParam: UINT_PTR;
    lParam: LONG_PTR;
    time: LongWord;
    pt: tagPOINT;
  end;


// *********************************************************************//
// Interface: IEnumRegisterWordA
// Flags:     (0)
// GUID:      {08C03412-F96B-11D0-A475-00AA006BCC59}
// *********************************************************************//
  IEnumRegisterWordA = interface(IUnknown)
    ['{08C03412-F96B-11D0-A475-00AA006BCC59}']
    function  Clone(out ppEnum: IEnumRegisterWordA): HResult; stdcall;
    function  Next(ulCount: LongWord; out rgRegisterWord: REGISTERWORDA; out pcFetched: LongWord): HResult; stdcall;
    function  Reset: HResult; stdcall;
    function  Skip(ulCount: LongWord): HResult; stdcall;
  end;

// *********************************************************************//
// Interface: IEnumRegisterWordW
// Flags:     (0)
// GUID:      {4955DD31-B159-11D0-8FCF-00AA006BCC59}
// *********************************************************************//
  IEnumRegisterWordW = interface(IUnknown)
    ['{4955DD31-B159-11D0-8FCF-00AA006BCC59}']
    function  Clone(out ppEnum: IEnumRegisterWordW): HResult; stdcall;
    function  Next(ulCount: LongWord; out rgRegisterWord: REGISTERWORDW; out pcFetched: LongWord): HResult; stdcall;
    function  Reset: HResult; stdcall;
    function  Skip(ulCount: LongWord): HResult; stdcall;
  end;

// *********************************************************************//
// Interface: IEnumInputContext
// Flags:     (0)
// GUID:      {09B5EAB0-F997-11D1-93D4-0060B067B86E}
// *********************************************************************//
  IEnumInputContext = interface(IUnknown)
    ['{09B5EAB0-F997-11D1-93D4-0060B067B86E}']
    function  Clone(out ppEnum: IEnumInputContext): HResult; stdcall;
    function  Next(ulCount: LongWord; out rgInputContext: LongWord; out pcFetched: LongWord): HResult; stdcall;
    function  Reset: HResult; stdcall;
    function  Skip(ulCount: LongWord): HResult; stdcall;
  end;

// *********************************************************************//
// Interface: IActiveIMMRegistrar
// Flags:     (0)
// GUID:      {B3458082-BD00-11D1-939B-0060B067B86E}
// *********************************************************************//
  IActiveIMMRegistrar = interface(IUnknown)
    ['{B3458082-BD00-11D1-939B-0060B067B86E}']
    function  RegisterIME(var rclsid: TGUID; lgid: Word; pszIconFile: PWideChar; pszDesc: PWideChar): HResult; stdcall;
    function  UnregisterIME(var rclsid: TGUID): HResult; stdcall;
  end;

// *********************************************************************//
// Interface: IActiveIMMMessagePumpOwner
// Flags:     (0)
// GUID:      {B5CF2CFA-8AEB-11D1-9364-0060B067B86E}
// *********************************************************************//
  IActiveIMMMessagePumpOwner = interface(IUnknown)
    ['{B5CF2CFA-8AEB-11D1-9364-0060B067B86E}']
    function  Start: HResult; stdcall;
    function  End_: HResult; stdcall;
    function  OnTranslateMessage(var pMsg: tagMSG): HResult; stdcall;
    function  Pause(out pdwCookie: LongWord): HResult; stdcall;
    function  Resume(dwCookie: LongWord): HResult; stdcall;
  end;

// *********************************************************************//
// Interface: IActiveIMMApp
// Flags:     (0)
// GUID:      {08C0E040-62D1-11D1-9326-0060B067B86E}
// *********************************************************************//
  IActiveIMMApp = interface(IUnknown)
    ['{08C0E040-62D1-11D1-9326-0060B067B86E}']
    function  AssociateContext(var hWnd: _RemotableHandle; hIME: LongWord; out phPrev: LongWord): HResult; stdcall;
    function  ConfigureIMEA(var hKL: Pointer; var hWnd: _RemotableHandle; dwMode: LongWord; 
                            var pData: REGISTERWORDA): HResult; stdcall;
    function  ConfigureIMEW(var hKL: Pointer; var hWnd: _RemotableHandle; dwMode: LongWord; 
                            var pData: REGISTERWORDW): HResult; stdcall;
    function  CreateContext(out phIMC: LongWord): HResult; stdcall;
    function  DestroyContext(hIME: LongWord): HResult; stdcall;
    function  EnumRegisterWordA(var hKL: Pointer; szReading: PAnsiChar; dwStyle: LongWord; 
                                szRegister: PAnsiChar; var pData: Pointer; out pEnum: IEnumRegisterWordA): HResult; stdcall;
    function  EnumRegisterWordW(var hKL: Pointer; szReading: PWideChar; dwStyle: LongWord; 
                                szRegister: PWideChar; var pData: Pointer; 
                                out pEnum: IEnumRegisterWordW): HResult; stdcall;
    function  EscapeA(var hKL: Pointer; hIMC: LongWord; uEscape: SYSUINT; var pData: Pointer; 
                      out plResult: LONG_PTR): HResult; stdcall;
    function  EscapeW(var hKL: Pointer; hIMC: LongWord; uEscape: SYSUINT; var pData: Pointer; 
                      out plResult: LONG_PTR): HResult; stdcall;
    function  GetCandidateListA(hIMC: LongWord; dwIndex: LongWord; uBufLen: SYSUINT; 
                                out pCandList: CANDIDATELIST; out puCopied: SYSUINT): HResult; stdcall;
    function  GetCandidateListW(hIMC: LongWord; dwIndex: LongWord; uBufLen: SYSUINT; 
                                out pCandList: CANDIDATELIST; out puCopied: SYSUINT): HResult; stdcall;
    function  GetCandidateListCountA(hIMC: LongWord; out pdwListSize: LongWord; 
                                     out pdwBufLen: LongWord): HResult; stdcall;
    function  GetCandidateListCountW(hIMC: LongWord; out pdwListSize: LongWord; 
                                     out pdwBufLen: LongWord): HResult; stdcall;
    function  GetCandidateWindow(hIMC: LongWord; dwIndex: LongWord; out pCandidate: CANDIDATEFORM): HResult; stdcall;
    function  GetCompositionFontA(hIMC: LongWord; out plf: LOGFONTA): HResult; stdcall;
    function  GetCompositionFontW(hIMC: LongWord; out plf: LOGFONTW): HResult; stdcall;
    function  GetCompositionStringA(hIMC: LongWord; dwIndex: LongWord; dwBufLen: LongWord; 
                                    out plCopied: Integer; out pBuf: Pointer): HResult; stdcall;
    function  GetCompositionStringW(hIMC: LongWord; dwIndex: LongWord; dwBufLen: LongWord; 
                                    out plCopied: Integer; out pBuf: Pointer): HResult; stdcall;
    function  GetCompositionWindow(hIMC: LongWord; out pCompForm: COMPOSITIONFORM): HResult; stdcall;
    function  GetContext(var hWnd: _RemotableHandle; out phIMC: LongWord): HResult; stdcall;
    function  GetConversionListA(var hKL: Pointer; hIMC: LongWord; pSrc: PAnsiChar; uBufLen: SYSUINT; 
                                 uFlag: SYSUINT; out pDst: CANDIDATELIST; out puCopied: SYSUINT): HResult; stdcall;
    function  GetConversionListW(var hKL: Pointer; hIMC: LongWord; pSrc: PWideChar; 
                                 uBufLen: SYSUINT; uFlag: SYSUINT; out pDst: CANDIDATELIST; 
                                 out puCopied: SYSUINT): HResult; stdcall;
    function  GetConversionStatus(hIMC: LongWord; out pfdwConversion: LongWord; 
                                  out pfdwSentence: LongWord): HResult; stdcall;
    function  GetDefaultIMEWnd(var hWnd: _RemotableHandle; out phDefWnd: wireHWND): HResult; stdcall;
    function  GetDescriptionA(var hKL: Pointer; uBufLen: SYSUINT; szDescription: PAnsiChar; 
                              out puCopied: SYSUINT): HResult; stdcall;
    function  GetDescriptionW(var hKL: Pointer; uBufLen: SYSUINT; szDescription: PWideChar; 
                              out puCopied: SYSUINT): HResult; stdcall;
    function  GetGuideLineA(hIMC: LongWord; dwIndex: LongWord; dwBufLen: LongWord; pBuf: PAnsiChar; 
                            out pdwResult: LongWord): HResult; stdcall;
    function  GetGuideLineW(hIMC: LongWord; dwIndex: LongWord; dwBufLen: LongWord; pBuf: PWideChar; 
                            out pdwResult: LongWord): HResult; stdcall;
    function  GetIMEFileNameA(var hKL: Pointer; uBufLen: SYSUINT; szFileName: PAnsiChar; 
                              out puCopied: SYSUINT): HResult; stdcall;
    function  GetIMEFileNameW(var hKL: Pointer; uBufLen: SYSUINT; szFileName: PWideChar; 
                              out puCopied: SYSUINT): HResult; stdcall;
    function  GetOpenStatus(hIMC: LongWord): HResult; stdcall;
    function  GetProperty(var hKL: Pointer; fdwIndex: LongWord; out pdwProperty: LongWord): HResult; stdcall;
    function  GetRegisterWordStyleA(var hKL: Pointer; nItem: SYSUINT; out pStyleBuf: STYLEBUFA; 
                                    out puCopied: SYSUINT): HResult; stdcall;
    function  GetRegisterWordStyleW(var hKL: Pointer; nItem: SYSUINT; out pStyleBuf: STYLEBUFW; 
                                    out puCopied: SYSUINT): HResult; stdcall;
    function  GetStatusWindowPos(hIMC: LongWord; out pptPos: tagPOINT): HResult; stdcall;
    function  GetVirtualKey(var hWnd: _RemotableHandle; out puVirtualKey: SYSUINT): HResult; stdcall;
    function  InstallIMEA(szIMEFileName: PAnsiChar; szLayoutText: PAnsiChar; out phKL: Pointer): HResult; stdcall;
    function  InstallIMEW(szIMEFileName: PWideChar; szLayoutText: PWideChar; out phKL: Pointer): HResult; stdcall;
    function  IsIME(var hKL: Pointer): HResult; stdcall;
    function  IsUIMessageA(var hWndIME: _RemotableHandle; msg: SYSUINT; wParam: UINT_PTR; 
                           lParam: LONG_PTR): HResult; stdcall;
    function  IsUIMessageW(var hWndIME: _RemotableHandle; msg: SYSUINT; wParam: UINT_PTR; 
                           lParam: LONG_PTR): HResult; stdcall;
    function  NotifyIME(hIMC: LongWord; dwAction: LongWord; dwIndex: LongWord; dwValue: LongWord): HResult; stdcall;
    function  REGISTERWORDA(var hKL: Pointer; szReading: PAnsiChar; dwStyle: LongWord; szRegister: PAnsiChar): HResult; stdcall;
    function  REGISTERWORDW(var hKL: Pointer; szReading: PWideChar; dwStyle: LongWord; 
                            szRegister: PWideChar): HResult; stdcall;
    function  ReleaseContext(var hWnd: _RemotableHandle; hIMC: LongWord): HResult; stdcall;
    function  SetCandidateWindow(hIMC: LongWord; var pCandidate: CANDIDATEFORM): HResult; stdcall;
    function  SetCompositionFontA(hIMC: LongWord; var plf: LOGFONTA): HResult; stdcall;
    function  SetCompositionFontW(hIMC: LongWord; var plf: LOGFONTW): HResult; stdcall;
    function  SetCompositionStringA(hIMC: LongWord; dwIndex: LongWord; var pComp: Pointer; 
                                    dwCompLen: LongWord; var pRead: Pointer; dwReadLen: LongWord): HResult; stdcall;
    function  SetCompositionStringW(hIMC: LongWord; dwIndex: LongWord; var pComp: Pointer; 
                                    dwCompLen: LongWord; var pRead: Pointer; dwReadLen: LongWord): HResult; stdcall;
    function  SetCompositionWindow(hIMC: LongWord; var pCompForm: COMPOSITIONFORM): HResult; stdcall;
    function  SetConversionStatus(hIMC: LongWord; fdwConversion: LongWord; fdwSentence: LongWord): HResult; stdcall;
    function  SetOpenStatus(hIMC: LongWord; fOpen: Integer): HResult; stdcall;
    function  SetStatusWindowPos(hIMC: LongWord; var pptPos: tagPOINT): HResult; stdcall;
    function  SimulateHotKey(var hWnd: _RemotableHandle; dwHotKeyID: LongWord): HResult; stdcall;
    function  UnregisterWordA(var hKL: Pointer; szReading: PAnsiChar; dwStyle: LongWord; 
                              szUnregister: PAnsiChar): HResult; stdcall;
    function  UnregisterWordW(var hKL: Pointer; szReading: PWideChar; dwStyle: LongWord; 
                              szUnregister: PWideChar): HResult; stdcall;
    function  Activate(fRestoreLayout: Integer): HResult; stdcall;
    function  Deactivate: HResult; stdcall;
    function  OnDefWindowProc(var hWnd: _RemotableHandle; msg: SYSUINT; wParam: UINT_PTR; 
                              lParam: LONG_PTR; out plResult: LONG_PTR): HResult; stdcall;
    function  FilterClientWindows(var aaClassList: Word; uSize: SYSUINT): HResult; stdcall;
    function  GetCodePageA(var hKL: Pointer; out uCodePage: SYSUINT): HResult; stdcall;
    function  GetLangId(var hKL: Pointer; out plid: Word): HResult; stdcall;
    function  AssociateContextEx(var hWnd: _RemotableHandle; hIMC: LongWord; dwFlags: LongWord): HResult; stdcall;
    function  DisableIME(idThread: LongWord): HResult; stdcall;
    function  GetImeMenuItemsA(hIMC: LongWord; dwFlags: LongWord; dwType: LongWord; 
                               var pImeParentMenu: IMEMENUITEMINFOA; 
                               out pImeMenu: IMEMENUITEMINFOA; dwSize: LongWord; 
                               out pdwResult: LongWord): HResult; stdcall;
    function  GetImeMenuItemsW(hIMC: LongWord; dwFlags: LongWord; dwType: LongWord; 
                               var pImeParentMenu: IMEMENUITEMINFOW; 
                               out pImeMenu: IMEMENUITEMINFOW; dwSize: LongWord; 
                               out pdwResult: LongWord): HResult; stdcall;
    function  EnumInputContext(idThread: LongWord; out ppEnum: IEnumInputContext): HResult; stdcall;
  end;

// *********************************************************************//
// Interface: IActiveIMMIME
// Flags:     (0)
// GUID:      {08C03411-F96B-11D0-A475-00AA006BCC59}
// *********************************************************************//
  IActiveIMMIME = interface(IUnknown)
    ['{08C03411-F96B-11D0-A475-00AA006BCC59}']
    function  AssociateContext(var hWnd: _RemotableHandle; hIME: LongWord; out phPrev: LongWord): HResult; stdcall;
    function  ConfigureIMEA(var hKL: Pointer; var hWnd: _RemotableHandle; dwMode: LongWord; 
                            var pData: REGISTERWORDA): HResult; stdcall;
    function  ConfigureIMEW(var hKL: Pointer; var hWnd: _RemotableHandle; dwMode: LongWord; 
                            var pData: REGISTERWORDW): HResult; stdcall;
    function  CreateContext(out phIMC: LongWord): HResult; stdcall;
    function  DestroyContext(hIME: LongWord): HResult; stdcall;
    function  EnumRegisterWordA(var hKL: Pointer; szReading: PAnsiChar; dwStyle: LongWord; 
                                szRegister: PAnsiChar; var pData: Pointer; out pEnum: IEnumRegisterWordA): HResult; stdcall;
    function  EnumRegisterWordW(var hKL: Pointer; szReading: PWideChar; dwStyle: LongWord; 
                                szRegister: PWideChar; var pData: Pointer; 
                                out pEnum: IEnumRegisterWordW): HResult; stdcall;
    function  EscapeA(var hKL: Pointer; hIMC: LongWord; uEscape: SYSUINT; var pData: Pointer; 
                      out plResult: LONG_PTR): HResult; stdcall;
    function  EscapeW(var hKL: Pointer; hIMC: LongWord; uEscape: SYSUINT; var pData: Pointer; 
                      out plResult: LONG_PTR): HResult; stdcall;
    function  GetCandidateListA(hIMC: LongWord; dwIndex: LongWord; uBufLen: SYSUINT; 
                                out pCandList: CANDIDATELIST; out puCopied: SYSUINT): HResult; stdcall;
    function  GetCandidateListW(hIMC: LongWord; dwIndex: LongWord; uBufLen: SYSUINT; 
                                out pCandList: CANDIDATELIST; out puCopied: SYSUINT): HResult; stdcall;
    function  GetCandidateListCountA(hIMC: LongWord; out pdwListSize: LongWord; 
                                     out pdwBufLen: LongWord): HResult; stdcall;
    function  GetCandidateListCountW(hIMC: LongWord; out pdwListSize: LongWord; 
                                     out pdwBufLen: LongWord): HResult; stdcall;
    function  GetCandidateWindow(hIMC: LongWord; dwIndex: LongWord; out pCandidate: CANDIDATEFORM): HResult; stdcall;
    function  GetCompositionFontA(hIMC: LongWord; out plf: LOGFONTA): HResult; stdcall;
    function  GetCompositionFontW(hIMC: LongWord; out plf: LOGFONTW): HResult; stdcall;
    function  GetCompositionStringA(hIMC: LongWord; dwIndex: LongWord; dwBufLen: LongWord; 
                                    out plCopied: Integer; out pBuf: Pointer): HResult; stdcall;
    function  GetCompositionStringW(hIMC: LongWord; dwIndex: LongWord; dwBufLen: LongWord; 
                                    out plCopied: Integer; out pBuf: Pointer): HResult; stdcall;
    function  GetCompositionWindow(hIMC: LongWord; out pCompForm: COMPOSITIONFORM): HResult; stdcall;
    function  GetContext(var hWnd: _RemotableHandle; out phIMC: LongWord): HResult; stdcall;
    function  GetConversionListA(var hKL: Pointer; hIMC: LongWord; pSrc: PAnsiChar; uBufLen: SYSUINT; 
                                 uFlag: SYSUINT; out pDst: CANDIDATELIST; out puCopied: SYSUINT): HResult; stdcall;
    function  GetConversionListW(var hKL: Pointer; hIMC: LongWord; pSrc: PWideChar; 
                                 uBufLen: SYSUINT; uFlag: SYSUINT; out pDst: CANDIDATELIST; 
                                 out puCopied: SYSUINT): HResult; stdcall;
    function  GetConversionStatus(hIMC: LongWord; out pfdwConversion: LongWord; 
                                  out pfdwSentence: LongWord): HResult; stdcall;
    function  GetDefaultIMEWnd(var hWnd: _RemotableHandle; out phDefWnd: wireHWND): HResult; stdcall;
    function  GetDescriptionA(var hKL: Pointer; uBufLen: SYSUINT; szDescription: PAnsiChar; 
                              out puCopied: SYSUINT): HResult; stdcall;
    function  GetDescriptionW(var hKL: Pointer; uBufLen: SYSUINT; szDescription: PWideChar; 
                              out puCopied: SYSUINT): HResult; stdcall;
    function  GetGuideLineA(hIMC: LongWord; dwIndex: LongWord; dwBufLen: LongWord; pBuf: PAnsiChar; 
                            out pdwResult: LongWord): HResult; stdcall;
    function  GetGuideLineW(hIMC: LongWord; dwIndex: LongWord; dwBufLen: LongWord; pBuf: PWideChar; 
                            out pdwResult: LongWord): HResult; stdcall;
    function  GetIMEFileNameA(var hKL: Pointer; uBufLen: SYSUINT; szFileName: PAnsiChar; 
                              out puCopied: SYSUINT): HResult; stdcall;
    function  GetIMEFileNameW(var hKL: Pointer; uBufLen: SYSUINT; szFileName: PWideChar; 
                              out puCopied: SYSUINT): HResult; stdcall;
    function  GetOpenStatus(hIMC: LongWord): HResult; stdcall;
    function  GetProperty(var hKL: Pointer; fdwIndex: LongWord; out pdwProperty: LongWord): HResult; stdcall;
    function  GetRegisterWordStyleA(var hKL: Pointer; nItem: SYSUINT; out pStyleBuf: STYLEBUFA; 
                                    out puCopied: SYSUINT): HResult; stdcall;
    function  GetRegisterWordStyleW(var hKL: Pointer; nItem: SYSUINT; out pStyleBuf: STYLEBUFW; 
                                    out puCopied: SYSUINT): HResult; stdcall;
    function  GetStatusWindowPos(hIMC: LongWord; out pptPos: tagPOINT): HResult; stdcall;
    function  GetVirtualKey(var hWnd: _RemotableHandle; out puVirtualKey: SYSUINT): HResult; stdcall;
    function  InstallIMEA(szIMEFileName: PAnsiChar; szLayoutText: PAnsiChar; out phKL: Pointer): HResult; stdcall;
    function  InstallIMEW(szIMEFileName: PWideChar; szLayoutText: PWideChar; out phKL: Pointer): HResult; stdcall;
    function  IsIME(var hKL: Pointer): HResult; stdcall;
    function  IsUIMessageA(var hWndIME: _RemotableHandle; msg: SYSUINT; wParam: UINT_PTR; 
                           lParam: LONG_PTR): HResult; stdcall;
    function  IsUIMessageW(var hWndIME: _RemotableHandle; msg: SYSUINT; wParam: UINT_PTR; 
                           lParam: LONG_PTR): HResult; stdcall;
    function  NotifyIME(hIMC: LongWord; dwAction: LongWord; dwIndex: LongWord; dwValue: LongWord): HResult; stdcall;
    function  REGISTERWORDA(var hKL: Pointer; szReading: PAnsiChar; dwStyle: LongWord; szRegister: PAnsiChar): HResult; stdcall;
    function  REGISTERWORDW(var hKL: Pointer; szReading: PWideChar; dwStyle: LongWord; 
                            szRegister: PWideChar): HResult; stdcall;
    function  ReleaseContext(var hWnd: _RemotableHandle; hIMC: LongWord): HResult; stdcall;
    function  SetCandidateWindow(hIMC: LongWord; var pCandidate: CANDIDATEFORM): HResult; stdcall;
    function  SetCompositionFontA(hIMC: LongWord; var plf: LOGFONTA): HResult; stdcall;
    function  SetCompositionFontW(hIMC: LongWord; var plf: LOGFONTW): HResult; stdcall;
    function  SetCompositionStringA(hIMC: LongWord; dwIndex: LongWord; var pComp: Pointer; 
                                    dwCompLen: LongWord; var pRead: Pointer; dwReadLen: LongWord): HResult; stdcall;
    function  SetCompositionStringW(hIMC: LongWord; dwIndex: LongWord; var pComp: Pointer; 
                                    dwCompLen: LongWord; var pRead: Pointer; dwReadLen: LongWord): HResult; stdcall;
    function  SetCompositionWindow(hIMC: LongWord; var pCompForm: COMPOSITIONFORM): HResult; stdcall;
    function  SetConversionStatus(hIMC: LongWord; fdwConversion: LongWord; fdwSentence: LongWord): HResult; stdcall;
    function  SetOpenStatus(hIMC: LongWord; fOpen: Integer): HResult; stdcall;
    function  SetStatusWindowPos(hIMC: LongWord; var pptPos: tagPOINT): HResult; stdcall;
    function  SimulateHotKey(var hWnd: _RemotableHandle; dwHotKeyID: LongWord): HResult; stdcall;
    function  UnregisterWordA(var hKL: Pointer; szReading: PAnsiChar; dwStyle: LongWord; 
                              szUnregister: PAnsiChar): HResult; stdcall;
    function  UnregisterWordW(var hKL: Pointer; szReading: PWideChar; dwStyle: LongWord; 
                              szUnregister: PWideChar): HResult; stdcall;
    function  GenerateMessage(hIMC: LongWord): HResult; stdcall;
    function  LockIMC(hIMC: LongWord; out ppIMC: PUserType12): HResult; stdcall;
    function  UnlockIMC(hIMC: LongWord): HResult; stdcall;
    function  GetIMCLockCount(hIMC: LongWord; out pdwLockCount: LongWord): HResult; stdcall;
    function  CreateIMCC(dwSize: LongWord; out phIMCC: LongWord): HResult; stdcall;
    function  DestroyIMCC(hIMCC: LongWord): HResult; stdcall;
    function  LockIMCC(hIMCC: LongWord; out ppv: Pointer): HResult; stdcall;
    function  UnlockIMCC(hIMCC: LongWord): HResult; stdcall;
    function  ReSizeIMCC(hIMCC: LongWord; dwSize: LongWord; out phIMCC: LongWord): HResult; stdcall;
    function  GetIMCCSize(hIMCC: LongWord; out pdwSize: LongWord): HResult; stdcall;
    function  GetIMCCLockCount(hIMCC: LongWord; out pdwLockCount: LongWord): HResult; stdcall;
    function  GetHotKey(dwHotKeyID: LongWord; out puModifiers: SYSUINT; out puVKey: SYSUINT;
                        out phKL: Pointer): HResult; stdcall;
    function  SetHotKey(dwHotKeyID: LongWord; uModifiers: SYSUINT; uVKey: SYSUINT; var hKL: Pointer): HResult; stdcall;
    function  CreateSoftKeyboard(uType: SYSUINT; var hOwner: _RemotableHandle; x: SYSINT; 
                                 y: SYSINT; out phSoftKbdWnd: wireHWND): HResult; stdcall;
    function  DestroySoftKeyboard(var hSoftKbdWnd: _RemotableHandle): HResult; stdcall;
    function  ShowSoftKeyboard(var hSoftKbdWnd: _RemotableHandle; nCmdShow: SYSINT): HResult; stdcall;
    function  GetCodePageA(var hKL: Pointer; out uCodePage: SYSUINT): HResult; stdcall;
    function  GetLangId(var hKL: Pointer; out plid: Word): HResult; stdcall;
    function  KeybdEvent(lgidIME: Word; bVk: Byte; bScan: Byte; dwFlags: LongWord; 
                         dwExtraInfo: LongWord): HResult; stdcall;
    function  LockModal: HResult; stdcall;
    function  UnlockModal: HResult; stdcall;
    function  AssociateContextEx(var hWnd: _RemotableHandle; hIMC: LongWord; dwFlags: LongWord): HResult; stdcall;
    function  DisableIME(idThread: LongWord): HResult; stdcall;
    function  GetImeMenuItemsA(hIMC: LongWord; dwFlags: LongWord; dwType: LongWord; 
                               var pImeParentMenu: IMEMENUITEMINFOA; 
                               out pImeMenu: IMEMENUITEMINFOA; dwSize: LongWord; 
                               out pdwResult: LongWord): HResult; stdcall;
    function  GetImeMenuItemsW(hIMC: LongWord; dwFlags: LongWord; dwType: LongWord; 
                               var pImeParentMenu: IMEMENUITEMINFOW; 
                               out pImeMenu: IMEMENUITEMINFOW; dwSize: LongWord; 
                               out pdwResult: LongWord): HResult; stdcall;
    function  EnumInputContext(idThread: LongWord; out ppEnum: IEnumInputContext): HResult; stdcall;
    function  RequestMessageA(hIMC: LongWord; wParam: UINT_PTR; lParam: LONG_PTR; 
                              out plResult: LONG_PTR): HResult; stdcall;
    function  RequestMessageW(hIMC: LongWord; wParam: UINT_PTR; lParam: LONG_PTR; 
                              out plResult: LONG_PTR): HResult; stdcall;
    function  SendIMCA(var hWnd: _RemotableHandle; uMsg: SYSUINT; wParam: UINT_PTR; 
                       lParam: LONG_PTR; out plResult: LONG_PTR): HResult; stdcall;
    function  SendIMCW(var hWnd: _RemotableHandle; uMsg: SYSUINT; wParam: UINT_PTR; 
                       lParam: LONG_PTR; out plResult: LONG_PTR): HResult; stdcall;
    function  IsSleeping: HResult; stdcall;
  end;

// *********************************************************************//
// Interface: IActiveIME
// Flags:     (0)
// GUID:      {6FE20962-D077-11D0-8FE7-00AA006BCC59}
// *********************************************************************//
  IActiveIME = interface(IUnknown)
    ['{6FE20962-D077-11D0-8FE7-00AA006BCC59}']
    function  Inquire(dwSystemInfoFlags: LongWord; out pIMEInfo: IMEINFO; szWndClass: PWideChar; 
                      out pdwPrivate: LongWord): HResult; stdcall;
    function  ConversionList(hIMC: LongWord; szSource: PWideChar; uFlag: SYSUINT; uBufLen: SYSUINT; 
                             out pDest: CANDIDATELIST; out puCopied: SYSUINT): HResult; stdcall;
    function  Configure(var hKL: Pointer; var hWnd: _RemotableHandle; dwMode: LongWord; 
                        var pRegisterWord: REGISTERWORDW): HResult; stdcall;
    function  Destroy(uReserved: SYSUINT): HResult; stdcall;
    function  Escape(hIMC: LongWord; uEscape: SYSUINT; var pData: Pointer; out plResult: LONG_PTR): HResult; stdcall;
    function  SetActiveContext(hIMC: LongWord; fFlag: Integer): HResult; stdcall;
    function  ProcessKey(hIMC: LongWord; uVirKey: SYSUINT; lParam: LongWord; var pbKeyState: Byte): HResult; stdcall;
    function  Notify(hIMC: LongWord; dwAction: LongWord; dwIndex: LongWord; dwValue: LongWord): HResult; stdcall;
    function  Select(hIMC: LongWord; fSelect: Integer): HResult; stdcall;
    function  SetCompositionString(hIMC: LongWord; dwIndex: LongWord; var pComp: Pointer; 
                                   dwCompLen: LongWord; var pRead: Pointer; dwReadLen: LongWord): HResult; stdcall;
    function  ToAsciiEx(uVirKey: SYSUINT; uScanCode: SYSUINT; var pbKeyState: Byte; 
                        fuState: SYSUINT; hIMC: LongWord; out pdwTransBuf: LongWord; 
                        out puSize: SYSUINT): HResult; stdcall;
    function  RegisterWord(szReading: PWideChar; dwStyle: LongWord; szString: PWideChar): HResult; stdcall;
    function  UnregisterWord(szReading: PWideChar; dwStyle: LongWord; szString: PWideChar): HResult; stdcall;
    function  GetRegisterWordStyle(nItem: SYSUINT; out pStyleBuf: STYLEBUFW; out puBufSize: SYSUINT): HResult; stdcall;
    function  EnumRegisterWord(szReading: PWideChar; dwStyle: LongWord; szRegister: PWideChar; 
                               var pData: Pointer; out ppEnum: IEnumRegisterWordW): HResult; stdcall;
    function  GetCodePageA(out uCodePage: SYSUINT): HResult; stdcall;
    function  GetLangId(out plid: Word): HResult; stdcall;
  end;

// *********************************************************************//
// Interface: IActiveIME2
// Flags:     (0)
// GUID:      {E1C4BF0E-2D53-11D2-93E1-0060B067B86E}
// *********************************************************************//
  IActiveIME2 = interface(IActiveIME)
    ['{E1C4BF0E-2D53-11D2-93E1-0060B067B86E}']
    function  Sleep: HResult; stdcall;
    function  Unsleep(fDead: Integer): HResult; stdcall;
  end;

// *********************************************************************//
// The Class CoCActiveIMM provides a Create and CreateRemote method to          
// create instances of the default interface IActiveIMMApp exposed by              
// the CoClass CActiveIMM. The functions are intended to be used by             
// clients wishing to automate the CoClass objects exposed by the         
// server of this typelibrary.                                            
// *********************************************************************//
  CoCActiveIMM = class
    class function Create: IActiveIMMApp;
    class function CreateRemote(const MachineName: AnsiString): IActiveIMMApp;
  end;


// *********************************************************************//
// OLE Server Proxy class declaration
// Server Object    : TCActiveIMM
// Help String      : 
// Default Interface: IActiveIMMApp
// Def. Intf. DISP? : No
// Event   Interface: 
// TypeFlags        : (2) CanCreate
// *********************************************************************//
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
  TCActiveIMMProperties= class;
{$ENDIF}
  TCActiveIMM = class(TOleServer)
  private
    FIntf:        IActiveIMMApp;
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
    FProps:       TCActiveIMMProperties;
    function      GetServerProperties: TCActiveIMMProperties;
{$ENDIF}
    function      GetDefaultInterface: IActiveIMMApp;
  protected
    procedure InitServerData; override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor  Destroy; override;
    procedure Connect; override;
    procedure ConnectTo(svrIntf: IActiveIMMApp);
    procedure Disconnect; override;
    function  AssociateContext(var hWnd: _RemotableHandle; hIME: LongWord; out phPrev: LongWord): HResult;
    function  ConfigureIMEA(var hKL: Pointer; var hWnd: _RemotableHandle; dwMode: LongWord; 
                            var pData: REGISTERWORDA): HResult;
    function  ConfigureIMEW(var hKL: Pointer; var hWnd: _RemotableHandle; dwMode: LongWord; 
                            var pData: REGISTERWORDW): HResult;
    function  CreateContext(out phIMC: LongWord): HResult;
    function  DestroyContext(hIME: LongWord): HResult;
    function  EnumRegisterWordA(var hKL: Pointer; szReading: PAnsiChar; dwStyle: LongWord; 
                                szRegister: PAnsiChar; var pData: Pointer; out pEnum: IEnumRegisterWordA): HResult;
    function  EnumRegisterWordW(var hKL: Pointer; szReading: PWideChar; dwStyle: LongWord; 
                                szRegister: PWideChar; var pData: Pointer; 
                                out pEnum: IEnumRegisterWordW): HResult;
    function  EscapeA(var hKL: Pointer; hIMC: LongWord; uEscape: SYSUINT; var pData: Pointer; 
                      out plResult: LONG_PTR): HResult;
    function  EscapeW(var hKL: Pointer; hIMC: LongWord; uEscape: SYSUINT; var pData: Pointer; 
                      out plResult: LONG_PTR): HResult;
    function  GetCandidateListA(hIMC: LongWord; dwIndex: LongWord; uBufLen: SYSUINT; 
                                out pCandList: CANDIDATELIST; out puCopied: SYSUINT): HResult;
    function  GetCandidateListW(hIMC: LongWord; dwIndex: LongWord; uBufLen: SYSUINT; 
                                out pCandList: CANDIDATELIST; out puCopied: SYSUINT): HResult;
    function  GetCandidateListCountA(hIMC: LongWord; out pdwListSize: LongWord; 
                                     out pdwBufLen: LongWord): HResult;
    function  GetCandidateListCountW(hIMC: LongWord; out pdwListSize: LongWord; 
                                     out pdwBufLen: LongWord): HResult;
    function  GetCandidateWindow(hIMC: LongWord; dwIndex: LongWord; out pCandidate: CANDIDATEFORM): HResult;
    function  GetCompositionFontA(hIMC: LongWord; out plf: LOGFONTA): HResult;
    function  GetCompositionFontW(hIMC: LongWord; out plf: LOGFONTW): HResult;
    function  GetCompositionStringA(hIMC: LongWord; dwIndex: LongWord; dwBufLen: LongWord; 
                                    out plCopied: Integer; out pBuf: Pointer): HResult;
    function  GetCompositionStringW(hIMC: LongWord; dwIndex: LongWord; dwBufLen: LongWord; 
                                    out plCopied: Integer; out pBuf: Pointer): HResult;
    function  GetCompositionWindow(hIMC: LongWord; out pCompForm: COMPOSITIONFORM): HResult;
    function  GetContext(var hWnd: _RemotableHandle; out phIMC: LongWord): HResult;
    function  GetConversionListA(var hKL: Pointer; hIMC: LongWord; pSrc: PAnsiChar; uBufLen: SYSUINT; 
                                 uFlag: SYSUINT; out pDst: CANDIDATELIST; out puCopied: SYSUINT): HResult;
    function  GetConversionListW(var hKL: Pointer; hIMC: LongWord; pSrc: PWideChar; 
                                 uBufLen: SYSUINT; uFlag: SYSUINT; out pDst: CANDIDATELIST; 
                                 out puCopied: SYSUINT): HResult;
    function  GetConversionStatus(hIMC: LongWord; out pfdwConversion: LongWord; 
                                  out pfdwSentence: LongWord): HResult;
    function  GetDefaultIMEWnd(var hWnd: _RemotableHandle; out phDefWnd: wireHWND): HResult;
    function  GetDescriptionA(var hKL: Pointer; uBufLen: SYSUINT; szDescription: PAnsiChar; 
                              out puCopied: SYSUINT): HResult;
    function  GetDescriptionW(var hKL: Pointer; uBufLen: SYSUINT; szDescription: PWideChar; 
                              out puCopied: SYSUINT): HResult;
    function  GetGuideLineA(hIMC: LongWord; dwIndex: LongWord; dwBufLen: LongWord; pBuf: PAnsiChar; 
                            out pdwResult: LongWord): HResult;
    function  GetGuideLineW(hIMC: LongWord; dwIndex: LongWord; dwBufLen: LongWord; pBuf: PWideChar; 
                            out pdwResult: LongWord): HResult;
    function  GetIMEFileNameA(var hKL: Pointer; uBufLen: SYSUINT; szFileName: PAnsiChar; 
                              out puCopied: SYSUINT): HResult;
    function  GetIMEFileNameW(var hKL: Pointer; uBufLen: SYSUINT; szFileName: PWideChar; 
                              out puCopied: SYSUINT): HResult;
    function  GetOpenStatus(hIMC: LongWord): HResult;
    function  GetProperty(var hKL: Pointer; fdwIndex: LongWord; out pdwProperty: LongWord): HResult;
    function  GetRegisterWordStyleA(var hKL: Pointer; nItem: SYSUINT; out pStyleBuf: STYLEBUFA; 
                                    out puCopied: SYSUINT): HResult;
    function  GetRegisterWordStyleW(var hKL: Pointer; nItem: SYSUINT; out pStyleBuf: STYLEBUFW; 
                                    out puCopied: SYSUINT): HResult;
    function  GetStatusWindowPos(hIMC: LongWord; out pptPos: tagPOINT): HResult;
    function  GetVirtualKey(var hWnd: _RemotableHandle; out puVirtualKey: SYSUINT): HResult;
    function  InstallIMEA(szIMEFileName: PAnsiChar; szLayoutText: PAnsiChar; out phKL: Pointer): HResult;
    function  InstallIMEW(szIMEFileName: PWideChar; szLayoutText: PWideChar; out phKL: Pointer): HResult;
    function  IsIME(var hKL: Pointer): HResult;
    function  IsUIMessageA(var hWndIME: _RemotableHandle; msg: SYSUINT; wParam: UINT_PTR; 
                           lParam: LONG_PTR): HResult;
    function  IsUIMessageW(var hWndIME: _RemotableHandle; msg: SYSUINT; wParam: UINT_PTR; 
                           lParam: LONG_PTR): HResult;
    function  NotifyIME(hIMC: LongWord; dwAction: LongWord; dwIndex: LongWord; dwValue: LongWord): HResult;
    function  REGISTERWORDA(var hKL: Pointer; szReading: PAnsiChar; dwStyle: LongWord; szRegister: PAnsiChar): HResult;
    function  REGISTERWORDW(var hKL: Pointer; szReading: PWideChar; dwStyle: LongWord; 
                            szRegister: PWideChar): HResult;
    function  ReleaseContext(var hWnd: _RemotableHandle; hIMC: LongWord): HResult;
    function  SetCandidateWindow(hIMC: LongWord; var pCandidate: CANDIDATEFORM): HResult;
    function  SetCompositionFontA(hIMC: LongWord; var plf: LOGFONTA): HResult;
    function  SetCompositionFontW(hIMC: LongWord; var plf: LOGFONTW): HResult;
    function  SetCompositionStringA(hIMC: LongWord; dwIndex: LongWord; var pComp: Pointer; 
                                    dwCompLen: LongWord; var pRead: Pointer; dwReadLen: LongWord): HResult;
    function  SetCompositionStringW(hIMC: LongWord; dwIndex: LongWord; var pComp: Pointer; 
                                    dwCompLen: LongWord; var pRead: Pointer; dwReadLen: LongWord): HResult;
    function  SetCompositionWindow(hIMC: LongWord; var pCompForm: COMPOSITIONFORM): HResult;
    function  SetConversionStatus(hIMC: LongWord; fdwConversion: LongWord; fdwSentence: LongWord): HResult;
    function  SetOpenStatus(hIMC: LongWord; fOpen: Integer): HResult;
    function  SetStatusWindowPos(hIMC: LongWord; var pptPos: tagPOINT): HResult;
    function  SimulateHotKey(var hWnd: _RemotableHandle; dwHotKeyID: LongWord): HResult;
    function  UnregisterWordA(var hKL: Pointer; szReading: PAnsiChar; dwStyle: LongWord; 
                              szUnregister: PAnsiChar): HResult;
    function  UnregisterWordW(var hKL: Pointer; szReading: PWideChar; dwStyle: LongWord; 
                              szUnregister: PWideChar): HResult;
    function  Activate(fRestoreLayout: Integer): HResult;
    function  Deactivate: HResult;
    function  OnDefWindowProc(var hWnd: _RemotableHandle; msg: SYSUINT; wParam: UINT_PTR; 
                              lParam: LONG_PTR; out plResult: LONG_PTR): HResult;
    function  FilterClientWindows(var aaClassList: Word; uSize: SYSUINT): HResult;
    function  GetCodePageA(var hKL: Pointer; out uCodePage: SYSUINT): HResult;
    function  GetLangId(var hKL: Pointer; out plid: Word): HResult;
    function  AssociateContextEx(var hWnd: _RemotableHandle; hIMC: LongWord; dwFlags: LongWord): HResult;
    function  DisableIME(idThread: LongWord): HResult;
    function  GetImeMenuItemsA(hIMC: LongWord; dwFlags: LongWord; dwType: LongWord; 
                               var pImeParentMenu: IMEMENUITEMINFOA; 
                               out pImeMenu: IMEMENUITEMINFOA; dwSize: LongWord; 
                               out pdwResult: LongWord): HResult;
    function  GetImeMenuItemsW(hIMC: LongWord; dwFlags: LongWord; dwType: LongWord; 
                               var pImeParentMenu: IMEMENUITEMINFOW; 
                               out pImeMenu: IMEMENUITEMINFOW; dwSize: LongWord; 
                               out pdwResult: LongWord): HResult;
    function  EnumInputContext(idThread: LongWord; out ppEnum: IEnumInputContext): HResult;
    property  DefaultInterface: IActiveIMMApp read GetDefaultInterface;
  published
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
    property Server: TCActiveIMMProperties read GetServerProperties;
{$ENDIF}
  end;

{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
// *********************************************************************//
// OLE Server Properties Proxy Class
// Server Object    : TCActiveIMM
// (This object is used by the IDE's Property Inspector to allow editing
//  of the properties of this server)
// *********************************************************************//
 TCActiveIMMProperties = class(TPersistent)
  private
    FServer:    TCActiveIMM;
    function    GetDefaultInterface: IActiveIMMApp;
    constructor Create(AServer: TCActiveIMM);
  protected
  public
    property DefaultInterface: IActiveIMMApp read GetDefaultInterface;
  published
  end;
{$ENDIF}

implementation

uses
  ComObj;

class function CoCActiveIMM.Create: IActiveIMMApp;
begin
  Result := CreateComObject(CLASS_CActiveIMM) as IActiveIMMApp;
end;

class function CoCActiveIMM.CreateRemote(const MachineName: AnsiString): IActiveIMMApp;
begin
  Result := CreateRemoteComObject(MachineName, CLASS_CActiveIMM) as IActiveIMMApp;
end;

procedure TCActiveIMM.InitServerData;
const
  CServerData: TServerData = (
    ClassID:   '{4955DD33-B159-11D0-8FCF-00AA006BCC59}';
    IntfIID:   '{08C0E040-62D1-11D1-9326-0060B067B86E}';
    EventIID:  '';
    LicenseKey: nil;
    Version: 500);
begin
  ServerData := @CServerData;
end;

procedure TCActiveIMM.Connect;
var
  punk: IUnknown;
begin
  if FIntf = nil then
  begin
    punk := GetServer;
    Fintf:= punk as IActiveIMMApp;
  end;
end;

procedure TCActiveIMM.ConnectTo(svrIntf: IActiveIMMApp);
begin
  Disconnect;
  FIntf := svrIntf;
end;

procedure TCActiveIMM.DisConnect;
begin
  if Fintf <> nil then
  begin
    FIntf := nil;
  end;
end;

function TCActiveIMM.GetDefaultInterface: IActiveIMMApp;
begin
  if FIntf = nil then
    Connect;
  Assert(FIntf <> nil, 'DefaultInterface is NULL. Component is not connected to Server. You must call ''Connect'' or ''ConnectTo'' before this operation');
  Result := FIntf;
end;

constructor TCActiveIMM.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
  FProps := TCActiveIMMProperties.Create(Self);
{$ENDIF}
end;

destructor TCActiveIMM.Destroy;
begin
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
  FProps.Free;
{$ENDIF}
  inherited Destroy;
end;

{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
function TCActiveIMM.GetServerProperties: TCActiveIMMProperties;
begin
  Result := FProps;
end;
{$ENDIF}

function  TCActiveIMM.AssociateContext(var hWnd: _RemotableHandle; hIME: LongWord; 
                                       out phPrev: LongWord): HResult;
begin
  Result := DefaultInterface.AssociateContext(hWnd, hIME, phPrev);
end;

function  TCActiveIMM.ConfigureIMEA(var hKL: Pointer; var hWnd: _RemotableHandle; dwMode: LongWord; 
                                    var pData: REGISTERWORDA): HResult;
begin
  Result := DefaultInterface.ConfigureIMEA(hKL, hWnd, dwMode, pData);
end;

function  TCActiveIMM.ConfigureIMEW(var hKL: Pointer; var hWnd: _RemotableHandle; dwMode: LongWord; 
                                    var pData: REGISTERWORDW): HResult;
begin
  Result := DefaultInterface.ConfigureIMEW(hKL, hWnd, dwMode, pData);
end;

function  TCActiveIMM.CreateContext(out phIMC: LongWord): HResult;
begin
  Result := DefaultInterface.CreateContext(phIMC);
end;

function  TCActiveIMM.DestroyContext(hIME: LongWord): HResult;
begin
  Result := DefaultInterface.DestroyContext(hIME);
end;

function  TCActiveIMM.EnumRegisterWordA(var hKL: Pointer; szReading: PAnsiChar; dwStyle: LongWord; 
                                        szRegister: PAnsiChar; var pData: Pointer; 
                                        out pEnum: IEnumRegisterWordA): HResult;
begin
  Result := DefaultInterface.EnumRegisterWordA(hKL, szReading, dwStyle, szRegister, pData, pEnum);
end;

function  TCActiveIMM.EnumRegisterWordW(var hKL: Pointer; szReading: PWideChar; dwStyle: LongWord; 
                                        szRegister: PWideChar; var pData: Pointer; 
                                        out pEnum: IEnumRegisterWordW): HResult;
begin
  Result := DefaultInterface.EnumRegisterWordW(hKL, szReading, dwStyle, szRegister, pData, pEnum);
end;

function  TCActiveIMM.EscapeA(var hKL: Pointer; hIMC: LongWord; uEscape: SYSUINT; 
                              var pData: Pointer; out plResult: LONG_PTR): HResult;
begin
  Result := DefaultInterface.EscapeA(hKL, hIMC, uEscape, pData, plResult);
end;

function  TCActiveIMM.EscapeW(var hKL: Pointer; hIMC: LongWord; uEscape: SYSUINT; 
                              var pData: Pointer; out plResult: LONG_PTR): HResult;
begin
  Result := DefaultInterface.EscapeW(hKL, hIMC, uEscape, pData, plResult);
end;

function  TCActiveIMM.GetCandidateListA(hIMC: LongWord; dwIndex: LongWord; uBufLen: SYSUINT; 
                                        out pCandList: CANDIDATELIST; out puCopied: SYSUINT): HResult;
begin
  Result := DefaultInterface.GetCandidateListA(hIMC, dwIndex, uBufLen, pCandList, puCopied);
end;

function  TCActiveIMM.GetCandidateListW(hIMC: LongWord; dwIndex: LongWord; uBufLen: SYSUINT; 
                                        out pCandList: CANDIDATELIST; out puCopied: SYSUINT): HResult;
begin
  Result := DefaultInterface.GetCandidateListW(hIMC, dwIndex, uBufLen, pCandList, puCopied);
end;

function  TCActiveIMM.GetCandidateListCountA(hIMC: LongWord; out pdwListSize: LongWord; 
                                             out pdwBufLen: LongWord): HResult;
begin
  Result := DefaultInterface.GetCandidateListCountA(hIMC, pdwListSize, pdwBufLen);
end;

function  TCActiveIMM.GetCandidateListCountW(hIMC: LongWord; out pdwListSize: LongWord; 
                                             out pdwBufLen: LongWord): HResult;
begin
  Result := DefaultInterface.GetCandidateListCountW(hIMC, pdwListSize, pdwBufLen);
end;

function  TCActiveIMM.GetCandidateWindow(hIMC: LongWord; dwIndex: LongWord; 
                                         out pCandidate: CANDIDATEFORM): HResult;
begin
  Result := DefaultInterface.GetCandidateWindow(hIMC, dwIndex, pCandidate);
end;

function  TCActiveIMM.GetCompositionFontA(hIMC: LongWord; out plf: LOGFONTA): HResult;
begin
  Result := DefaultInterface.GetCompositionFontA(hIMC, plf);
end;

function  TCActiveIMM.GetCompositionFontW(hIMC: LongWord; out plf: LOGFONTW): HResult;
begin
  Result := DefaultInterface.GetCompositionFontW(hIMC, plf);
end;

function  TCActiveIMM.GetCompositionStringA(hIMC: LongWord; dwIndex: LongWord; dwBufLen: LongWord; 
                                            out plCopied: Integer; out pBuf: Pointer): HResult;
begin
  Result := DefaultInterface.GetCompositionStringA(hIMC, dwIndex, dwBufLen, plCopied, pBuf);
end;

function  TCActiveIMM.GetCompositionStringW(hIMC: LongWord; dwIndex: LongWord; dwBufLen: LongWord; 
                                            out plCopied: Integer; out pBuf: Pointer): HResult;
begin
  Result := DefaultInterface.GetCompositionStringW(hIMC, dwIndex, dwBufLen, plCopied, pBuf);
end;

function  TCActiveIMM.GetCompositionWindow(hIMC: LongWord; out pCompForm: COMPOSITIONFORM): HResult;
begin
  Result := DefaultInterface.GetCompositionWindow(hIMC, pCompForm);
end;

function  TCActiveIMM.GetContext(var hWnd: _RemotableHandle; out phIMC: LongWord): HResult;
begin
  Result := DefaultInterface.GetContext(hWnd, phIMC);
end;

function  TCActiveIMM.GetConversionListA(var hKL: Pointer; hIMC: LongWord; pSrc: PAnsiChar; 
                                         uBufLen: SYSUINT; uFlag: SYSUINT; out pDst: CANDIDATELIST; 
                                         out puCopied: SYSUINT): HResult;
begin
  Result := DefaultInterface.GetConversionListA(hKL, hIMC, pSrc, uBufLen, uFlag, pDst, puCopied);
end;

function  TCActiveIMM.GetConversionListW(var hKL: Pointer; hIMC: LongWord; pSrc: PWideChar; 
                                         uBufLen: SYSUINT; uFlag: SYSUINT; out pDst: CANDIDATELIST; 
                                         out puCopied: SYSUINT): HResult;
begin
  Result := DefaultInterface.GetConversionListW(hKL, hIMC, pSrc, uBufLen, uFlag, pDst, puCopied);
end;

function  TCActiveIMM.GetConversionStatus(hIMC: LongWord; out pfdwConversion: LongWord; 
                                          out pfdwSentence: LongWord): HResult;
begin
  Result := DefaultInterface.GetConversionStatus(hIMC, pfdwConversion, pfdwSentence);
end;

function  TCActiveIMM.GetDefaultIMEWnd(var hWnd: _RemotableHandle; out phDefWnd: wireHWND): HResult;
begin
  Result := DefaultInterface.GetDefaultIMEWnd(hWnd, phDefWnd);
end;

function  TCActiveIMM.GetDescriptionA(var hKL: Pointer; uBufLen: SYSUINT; szDescription: PAnsiChar; 
                                      out puCopied: SYSUINT): HResult;
begin
  Result := DefaultInterface.GetDescriptionA(hKL, uBufLen, szDescription, puCopied);
end;

function  TCActiveIMM.GetDescriptionW(var hKL: Pointer; uBufLen: SYSUINT; szDescription: PWideChar; 
                                      out puCopied: SYSUINT): HResult;
begin
  Result := DefaultInterface.GetDescriptionW(hKL, uBufLen, szDescription, puCopied);
end;

function  TCActiveIMM.GetGuideLineA(hIMC: LongWord; dwIndex: LongWord; dwBufLen: LongWord; 
                                    pBuf: PAnsiChar; out pdwResult: LongWord): HResult;
begin
  Result := DefaultInterface.GetGuideLineA(hIMC, dwIndex, dwBufLen, pBuf, pdwResult);
end;

function  TCActiveIMM.GetGuideLineW(hIMC: LongWord; dwIndex: LongWord; dwBufLen: LongWord; 
                                    pBuf: PWideChar; out pdwResult: LongWord): HResult;
begin
  Result := DefaultInterface.GetGuideLineW(hIMC, dwIndex, dwBufLen, pBuf, pdwResult);
end;

function  TCActiveIMM.GetIMEFileNameA(var hKL: Pointer; uBufLen: SYSUINT; szFileName: PAnsiChar; 
                                      out puCopied: SYSUINT): HResult;
begin
  Result := DefaultInterface.GetIMEFileNameA(hKL, uBufLen, szFileName, puCopied);
end;

function  TCActiveIMM.GetIMEFileNameW(var hKL: Pointer; uBufLen: SYSUINT; szFileName: PWideChar; 
                                      out puCopied: SYSUINT): HResult;
begin
  Result := DefaultInterface.GetIMEFileNameW(hKL, uBufLen, szFileName, puCopied);
end;

function  TCActiveIMM.GetOpenStatus(hIMC: LongWord): HResult;
begin
  Result := DefaultInterface.GetOpenStatus(hIMC);
end;

function  TCActiveIMM.GetProperty(var hKL: Pointer; fdwIndex: LongWord; out pdwProperty: LongWord): HResult;
begin
  Result := DefaultInterface.GetProperty(hKL, fdwIndex, pdwProperty);
end;

function  TCActiveIMM.GetRegisterWordStyleA(var hKL: Pointer; nItem: SYSUINT; 
                                            out pStyleBuf: STYLEBUFA; out puCopied: SYSUINT): HResult;
begin
  Result := DefaultInterface.GetRegisterWordStyleA(hKL, nItem, pStyleBuf, puCopied);
end;

function  TCActiveIMM.GetRegisterWordStyleW(var hKL: Pointer; nItem: SYSUINT; 
                                            out pStyleBuf: STYLEBUFW; out puCopied: SYSUINT): HResult;
begin
  Result := DefaultInterface.GetRegisterWordStyleW(hKL, nItem, pStyleBuf, puCopied);
end;

function  TCActiveIMM.GetStatusWindowPos(hIMC: LongWord; out pptPos: tagPOINT): HResult;
begin
  Result := DefaultInterface.GetStatusWindowPos(hIMC, pptPos);
end;

function  TCActiveIMM.GetVirtualKey(var hWnd: _RemotableHandle; out puVirtualKey: SYSUINT): HResult;
begin
  Result := DefaultInterface.GetVirtualKey(hWnd, puVirtualKey);
end;

function  TCActiveIMM.InstallIMEA(szIMEFileName: PAnsiChar; szLayoutText: PAnsiChar; out phKL: Pointer): HResult;
begin
  Result := DefaultInterface.InstallIMEA(szIMEFileName, szLayoutText, phKL);
end;

function  TCActiveIMM.InstallIMEW(szIMEFileName: PWideChar; szLayoutText: PWideChar; 
                                  out phKL: Pointer): HResult;
begin
  Result := DefaultInterface.InstallIMEW(szIMEFileName, szLayoutText, phKL);
end;

function  TCActiveIMM.IsIME(var hKL: Pointer): HResult;
begin
  Result := DefaultInterface.IsIME(hKL);
end;

function  TCActiveIMM.IsUIMessageA(var hWndIME: _RemotableHandle; msg: SYSUINT; wParam: UINT_PTR; 
                                   lParam: LONG_PTR): HResult;
begin
  Result := DefaultInterface.IsUIMessageA(hWndIME, msg, wParam, lParam);
end;

function  TCActiveIMM.IsUIMessageW(var hWndIME: _RemotableHandle; msg: SYSUINT; wParam: UINT_PTR; 
                                   lParam: LONG_PTR): HResult;
begin
  Result := DefaultInterface.IsUIMessageW(hWndIME, msg, wParam, lParam);
end;

function  TCActiveIMM.NotifyIME(hIMC: LongWord; dwAction: LongWord; dwIndex: LongWord; 
                                dwValue: LongWord): HResult;
begin
  Result := DefaultInterface.NotifyIME(hIMC, dwAction, dwIndex, dwValue);
end;

function  TCActiveIMM.REGISTERWORDA(var hKL: Pointer; szReading: PAnsiChar; dwStyle: LongWord; 
                                    szRegister: PAnsiChar): HResult;
begin
  Result := DefaultInterface.REGISTERWORDA(hKL, szReading, dwStyle, szRegister);
end;

function  TCActiveIMM.REGISTERWORDW(var hKL: Pointer; szReading: PWideChar; dwStyle: LongWord; 
                                    szRegister: PWideChar): HResult;
begin
  Result := DefaultInterface.REGISTERWORDW(hKL, szReading, dwStyle, szRegister);
end;

function  TCActiveIMM.ReleaseContext(var hWnd: _RemotableHandle; hIMC: LongWord): HResult;
begin
  Result := DefaultInterface.ReleaseContext(hWnd, hIMC);
end;

function  TCActiveIMM.SetCandidateWindow(hIMC: LongWord; var pCandidate: CANDIDATEFORM): HResult;
begin
  Result := DefaultInterface.SetCandidateWindow(hIMC, pCandidate);
end;

function  TCActiveIMM.SetCompositionFontA(hIMC: LongWord; var plf: LOGFONTA): HResult;
begin
  Result := DefaultInterface.SetCompositionFontA(hIMC, plf);
end;

function  TCActiveIMM.SetCompositionFontW(hIMC: LongWord; var plf: LOGFONTW): HResult;
begin
  Result := DefaultInterface.SetCompositionFontW(hIMC, plf);
end;

function  TCActiveIMM.SetCompositionStringA(hIMC: LongWord; dwIndex: LongWord; var pComp: Pointer; 
                                            dwCompLen: LongWord; var pRead: Pointer; 
                                            dwReadLen: LongWord): HResult;
begin
  Result := DefaultInterface.SetCompositionStringA(hIMC, dwIndex, pComp, dwCompLen, pRead, dwReadLen);
end;

function  TCActiveIMM.SetCompositionStringW(hIMC: LongWord; dwIndex: LongWord; var pComp: Pointer; 
                                            dwCompLen: LongWord; var pRead: Pointer; 
                                            dwReadLen: LongWord): HResult;
begin
  Result := DefaultInterface.SetCompositionStringW(hIMC, dwIndex, pComp, dwCompLen, pRead, dwReadLen);
end;

function  TCActiveIMM.SetCompositionWindow(hIMC: LongWord; var pCompForm: COMPOSITIONFORM): HResult;
begin
  Result := DefaultInterface.SetCompositionWindow(hIMC, pCompForm);
end;

function  TCActiveIMM.SetConversionStatus(hIMC: LongWord; fdwConversion: LongWord; 
                                          fdwSentence: LongWord): HResult;
begin
  Result := DefaultInterface.SetConversionStatus(hIMC, fdwConversion, fdwSentence);
end;

function  TCActiveIMM.SetOpenStatus(hIMC: LongWord; fOpen: Integer): HResult;
begin
  Result := DefaultInterface.SetOpenStatus(hIMC, fOpen);
end;

function  TCActiveIMM.SetStatusWindowPos(hIMC: LongWord; var pptPos: tagPOINT): HResult;
begin
  Result := DefaultInterface.SetStatusWindowPos(hIMC, pptPos);
end;

function  TCActiveIMM.SimulateHotKey(var hWnd: _RemotableHandle; dwHotKeyID: LongWord): HResult;
begin
  Result := DefaultInterface.SimulateHotKey(hWnd, dwHotKeyID);
end;

function  TCActiveIMM.UnregisterWordA(var hKL: Pointer; szReading: PAnsiChar; dwStyle: LongWord; 
                                      szUnregister: PAnsiChar): HResult;
begin
  Result := DefaultInterface.UnregisterWordA(hKL, szReading, dwStyle, szUnregister);
end;

function  TCActiveIMM.UnregisterWordW(var hKL: Pointer; szReading: PWideChar; dwStyle: LongWord; 
                                      szUnregister: PWideChar): HResult;
begin
  Result := DefaultInterface.UnregisterWordW(hKL, szReading, dwStyle, szUnregister);
end;

function  TCActiveIMM.Activate(fRestoreLayout: Integer): HResult;
begin
  Result := DefaultInterface.Activate(fRestoreLayout);
end;

function  TCActiveIMM.Deactivate: HResult;
begin
  Result := DefaultInterface.Deactivate;
end;

function  TCActiveIMM.OnDefWindowProc(var hWnd: _RemotableHandle; msg: SYSUINT; wParam: UINT_PTR; 
                                      lParam: LONG_PTR; out plResult: LONG_PTR): HResult;
begin
  Result := DefaultInterface.OnDefWindowProc(hWnd, msg, wParam, lParam, plResult);
end;

function  TCActiveIMM.FilterClientWindows(var aaClassList: Word; uSize: SYSUINT): HResult;
begin
  Result := DefaultInterface.FilterClientWindows(aaClassList, uSize);
end;

function  TCActiveIMM.GetCodePageA(var hKL: Pointer; out uCodePage: SYSUINT): HResult;
begin
  Result := DefaultInterface.GetCodePageA(hKL, uCodePage);
end;

function  TCActiveIMM.GetLangId(var hKL: Pointer; out plid: Word): HResult;
begin
  Result := DefaultInterface.GetLangId(hKL, plid);
end;

function  TCActiveIMM.AssociateContextEx(var hWnd: _RemotableHandle; hIMC: LongWord; 
                                         dwFlags: LongWord): HResult;
begin
  Result := DefaultInterface.AssociateContextEx(hWnd, hIMC, dwFlags);
end;

function  TCActiveIMM.DisableIME(idThread: LongWord): HResult;
begin
  Result := DefaultInterface.DisableIME(idThread);
end;

function  TCActiveIMM.GetImeMenuItemsA(hIMC: LongWord; dwFlags: LongWord; dwType: LongWord; 
                                       var pImeParentMenu: IMEMENUITEMINFOA; 
                                       out pImeMenu: IMEMENUITEMINFOA; dwSize: LongWord; 
                                       out pdwResult: LongWord): HResult;
begin
  Result := DefaultInterface.GetImeMenuItemsA(hIMC, dwFlags, dwType, pImeParentMenu, pImeMenu, 
                                              dwSize, pdwResult);
end;

function  TCActiveIMM.GetImeMenuItemsW(hIMC: LongWord; dwFlags: LongWord; dwType: LongWord; 
                                       var pImeParentMenu: IMEMENUITEMINFOW; 
                                       out pImeMenu: IMEMENUITEMINFOW; dwSize: LongWord; 
                                       out pdwResult: LongWord): HResult;
begin
  Result := DefaultInterface.GetImeMenuItemsW(hIMC, dwFlags, dwType, pImeParentMenu, pImeMenu, 
                                              dwSize, pdwResult);
end;

function  TCActiveIMM.EnumInputContext(idThread: LongWord; out ppEnum: IEnumInputContext): HResult;
begin
  Result := DefaultInterface.EnumInputContext(idThread, ppEnum);
end;

{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
constructor TCActiveIMMProperties.Create(AServer: TCActiveIMM);
begin
  inherited Create;
  FServer := AServer;
end;

function TCActiveIMMProperties.GetDefaultInterface: IActiveIMMApp;
begin
  Result := FServer.DefaultInterface;
end;

{$ENDIF}

end.
