如何解决输入法问题
各位大哥大姐们:
小弟正在做一个应用程序,想在该应用程序中的系统设置中添加关于输入法的设置,如把输入法设置为全拼或五笔等,保存退出后,当焦点在输入框时,自动输入法自动为该所设置的输入法。望各位高手们尽快给我回复,不胜感激!
coffeman
[140 byte] By [
coffeman] at [2007-12-11]
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"
//设置中文
ulong hklKeyboardLayout
hklKeyboardLayout=GetKeyboardLayout(0)
if not ImmIsIME(hklKeyboardLayout) then
ImmSimulateHotKey(handle ( adr_dragobject ),112)
end if
//设置英文
ulong hklKeyboardLayout
hklKeyboardLayout=GetKeyboardLayout(0)
if ImmIsIME(hklKeyboardLayout) then
ImmSimulateHotKey(handle ( adr_dragobject ),112)
end if
建一表,输入法名称varchar(20)、输入法(16进制)char(8)、输入法(16进制)ulong、是否选种char(1).
从注册表中读取输入法。
string ls_preload[]
int temp,upper
RegistryKeys("HKEY_CURRENT_USER\keyboard layout\preload",ls_preload[])
upper=UpperBound(ls_preload)
FOR temp=1 TO upper
RegistryGet(&
"HKEY_CURRENT_USER\keyboard layout\preload\"+ls_preload[temp],&
"",ls_layout[temp])
RegistryGet(&
"HKEY_LOCAL_MACHINE\System\CurrentControlSet\control\keyboard layouts\" &
+ls_layout[temp],"layout text",ls_layout_text[temp])
NEXT
存入表中,计算16进制->10进制。再做上选种标记。
声明:function boolean ActivateKeyboardLayout(long var1,uint var2 ) library "user32.dll"
需要时:ActivateKeyboardLayout(16进制的输入法,1)