1先在Local extenal function定义下列API
Function function boolean ImmSimulateHotKey (UnsignedLong hWnd,UnsignedLong dwHotKeyID) library IMM32.dll
function unsignedlong GetKeyboardLayout (unsignedlong wLayout)library user32.dll
function boolean ImmIsIME(unsignedLong hklKeyboardLayout)library IMM32.DLL
如果是使用datawindow, 在itemchangedfocus event中
ulong hklKeyboardLayout
Choose Case dwo.name
Case chinese_text 需要中文输入的字段
hklKeyboardLayout=GetKeyboardLayout(0)
if not ImmIsIME(hklKeyboardLayout) then ImmSimulateHotKey(handle ( parent,112)
end if
Case Englist_text 英文输入字段
hklKeyboardLayout=GetKeyboardLayout(0)
if ImmIsIME(hklKeyboardLayout) then ImmSimulateHotKey(handle ( parent ),112)
end if
End Choose
在windows 编辑框中类似。
int li_rownumber
string ls_rownumber
constant int IME_THotKey_IME_NonIME_Toggle=112
ulong hklCurrent
ulong hnd
li_rownumber=ldw_datawindow.getcolumn()
ls_rownumber=string(li_rownumber)
ls_rownumber=","+ls_rownumber+","
if match(ls_item_list,ls_rownumber) then
//切换到中文输入法
hklCurrent=GetKeyboardLayout(0)
if not ImmIsIME(hklCurrent) then
hnd=Handle(lw_window)
ImmSimulateHotKey(hnd,IME_THotKey_IME_NonIME_Toggle)
end if
else
//切换到英文输入法
hklCurrent=GetKeyboardLayout(0)
if ImmIsIME(hklCurrent) then
hnd=Handle(lw_window)
ImmSimulateHotKey(hnd,IME_THotKey_IME_NonIME_Toggle)
end if
end if
函数声明:
function boolean ImmSimulateHotKey (ULong hWnd, ULong dwHotKeyID) library "IMM32.dll"
function ulong GetKeyboardLayout(ulong dwLayout) LIBRARY "user32.dll"
function boolean ImmIsIME(uLong hklKeyboardLayout) library "IMM32.DLL"
脚本如下:
constant int IME_THotKey_IME_NonIME_Toggle=112
ulong hklCurrent
ulong hnd
//切换到英文输入法
hklCurrent=GetKeyboardLayout(0)
if ImmIsIME(hklCurrent) then
hnd=Handle(parent)
ImmSimulateHotKey(hnd,IME_THotKey_IME_NonIME_Toggle)
end if
//切换到中文输入法
hklCurrent=GetKeyboardLayout(0)
if not ImmIsIME(hklCurrent) then
hnd=Handle(parent)
ImmSimulateHotKey(hnd,IME_THotKey_IME_NonIME_Toggle)
end if