结合我看得那个双通输入法程序来总结一下该输入法的所有用户接口
//启动并初始化当前IME输入法
BOOL ImeInquire(
LPIMEINFO lpIMEInfo, //用于初始化该输入法的结构地址
LPTSTR lpszWndClass, //当前输入法的名称
LPCTSTR或者dword lpszData //系统信息,9X系列值为0,NT/2000下有实际值
)
//配置当前ime参数函数
//该函数的功能是提供给输入法使用者一个可以更改某些隐含设置的能力.如果你用过别人
//的输入法,其中的"配置输入法..."功能既是也!对于一个初写输入法的人,可以不予理它.
BOOL ImeConfigure(HKL , //当前输入法句柄
HWND , //配置窗口的父窗口
DWORD , //配置什么
LPVOID //用户设置的数据)
//将字符或字符串转换成目标字符
DWORD IMEConversionList(
HIMC , // 与当前输入法相关的应用程序句柄
LPCTSTR, // 要转换的字符串 (也可能是结果串,可由uFlag指定)
LPCANDIDATELIST, // 转换后的字符串(也可能是源串,可由uFlag指定)
DWORD, //转换后有几个字符
UINT //指定结果的存放位置)
return : 如果成功,返回转换后的字符串长度
//退出当前使用的IME
BOOL WINAPI ImeDestroy(UINT uForce)
//应用软件访问输入法的接口.
LRESULT ImeEscape( //用户软件访问输入法内部信息的接口
HIMC hIMC, //当前的应用程序句柄
UINT uEscape, //设置函数功能
//=IME_ESC_QUERY _SUPPORT
//=IME_ESC_RESERVED_LAST IME_ESC_RESERVED_FIRST
//=IME_ESC_PRIVATE_FIRST IME_ESC_PRIVATE_LAST
//=IME_ESC_SEQUENCE_TO_ INTERNAL
//=IME_ESC_GET_EUDC_ DICTIONARY
//=IME_ESC_SET_EUDC_ DICTIONARY
//=IME_ESC_MAX_KEY
//=IME_ESC_IME_NAME
//=IME_ESC_SYNC_HOTKEY
//=IME_ESC_HANJA_MODE
//=IME_ESC_GETHELPFILENAME(只适应 Windows 98和Windows 2000)
//=IME_ESC_PRIVATE_HOTKEY(w95下不可用)
LPVOID lpData //当前功能所需的数据
)
如果失败,返回0,否则有个功能决定有时,人们可以用此函数怀区输入法的名称、帮助文件名称等。当然,我们可以不提供这些功能。
//IME输入键盘事件管理函数,处理应用程序传入的所有击键事件,监测是否是当前输入法所需的
BOOL ImeProcessKey( HIMC , //应用程序句柄
UINT , //需处理的虚键
DWORD, //击键消息参数
CONST LPBYTE //当前键盘状态(256字节))
return : 如果此键是该输入法需要的,则返回TRUE,否则为FALSE.只有返回true的击键,IME才去处理
//启动当前IME输入法
BOOL ImeSelect( HIMC , //当前应用程序句柄
BOOL //是否初始化当前输入法,TRUE表示初始化)
return : 成功返回true,否则为FALSE
//设置当前的输入处于活动状态
BOOL ImeSetActiveContext( HIMC , //当前用户程序句柄
BOOL //激活或搁置:=TRUE 激活 =FALSE 搁置)
return : 成功返回TRUE,否则为FALSE
//将输入的键盘事件转换为汉字编码事件
UINT ImeToAsciiEx( UINT , //虚键
UINT , //扫描码
CONST LPBYTE , //用户定义的键盘状态
LPDWORD , //转换后的数据存放区
UINT , //活动菜单标志
HIMC //当前的应用程序句柄)
BOOL NotifyIME( //输入法选择窗口状态管理函数:
HIMC hIMC, //当前的应用程序句柄
DWORD dwAction, //状态值
DWORD dwIndex, //与状态值有关的序号
DWORD dwValue //与状态值有关的值
)
状态值说明:
=NI_OPENCANDIDATE 打开编码选择窗口
=NI_CLOSECANDIDATE 关闭当前的编码选择窗
=NI_SELECTCANDIDATESTR 选摘编码
此时:dwIndex 被选择的编码列表序号.
dwValue 被选中的编码在当前的编码列表中的序号
=NI_CHANGECANDIDATELIST 改变当前的编码列表(按pageup等键操作)
此时:dwIndex 被选择的编码列表序号.
dwValue 不用
=NI_SETCANDIDATE_PAGESTART 设置编码开始页号
此时: dwIndex 被改变的编码列表序号
dwValue 新页的开始序号.
=NI_SETCANDIDATE_PAGESIZE 改变编码列表页的大小
此时:dwIndex 当前编码页序号
dwValue 新的页大小
=NI_CONTEXTUPDATED 更新应用程序的信息的输入法的信息:移动位置,设置模式,设置编码窗口,字体。此时:dwIndex 只用于 dwValue=IMC_SETCONVERSIONMODE, IMC_SETSENTENCEMODE
dwValue 可取由 WM_IME_CONTROL 发送的下列值:
IMC_SETCANDIDATEPOS
IMC_SETCOMPOSITIONFONT
IMC_SETCOMPOSITIONWINDOW
IMC_SETCONVERSIONMODE
IMC_SETSENTENCEMODE
IMC_SETOPENSTATUS
=NI_COMPOSITIONSTR 改变编码窗口中的编码
此时:dwIndex 取下列值:CPS_COMPLETE 完成编码转换
CPS_CONVERT 转换编码
CPS_REVERT 取消当前的编码
CPS_CANCEL 清除编码,并关闭编码窗
dwValue 不用
此函数成功,返回TRUE,否则为FALSE
//向输入法字典注册字符串
ImeRegisterWord(LPCTSTR lpRead, DWORD dw, LPCTSTR lpStr)
//和上面的操作相反
ImeUnregisterWord(LPCTSTR lpRead, DWORD dw, LPCTSTR lpStr)
//这个函数的功能还有待考证
ImeEnumRegisterWord(REGISTERWORDENUMPROC lpfn, LPCTSTR lpRead, DWORD dw, LPCTSTR lpStr, LPVOID lpData)
//由应用程序设置输入法编码
ImeSetCompositionString(HIMC hIMC, DWORD dwIndex, LPCVOID lpComp, DWORD dwComp, LPCVOID lpRead, DWORD dwRead)
还有些不是太明白 慢慢研究了吧