下你所需,载你所想!
汇集开发技术源码资料

拦截输入法翻译替换输入内容HOOK ImmGetCompositionStringW

:205.653KB :1 :2020-01-16 13:46:48

部分简介

.子程序 ApiGetCompositionStringW, 长整数型, 公开
.参数 hIMC, 整数型
.参数 dwIndex, 整数型
.参数 lpBuf, 整数型
.参数 dwBufLen, 整数型
.局部变量 myReturn, 长整数型
.局部变量 cImeSz, 字节集
.局部变量 lLen, 整数型
.局部变量 szReplace, 文本型
.局部变量 cReplace, 字节集
.局部变量 StrBufLen, 整数型

.如果真 (dwIndex ≠ #GCS_RESULTSTR)
myApiHook [2].Stop ()
myReturn = ImmGetCompositionStringW (hIMC, dwIndex, lpBuf, dwBufLen)
myApiHook [2].Begin ()
返回 (myReturn)
.如果真结束
cImeSz = 取空白字节集 (256)
lLen = 254
myApiHook [2].Stop ()
ImmGetCompositionStringW (hIMC, #GCS_RESULTSTR, 取变量数据地址 (cImeSz), lLen)
myApiHook [2].Begin ()
调用子程序 (&InputMethodContentProcessing, , szReplace, U2A (cImeSz))
cReplace = A2U (szReplace)
StrBufLen = 取字节集长度 (cReplace)
.如果真 (lpBuf = 0 或 dwBufLen = 0)
myReturn = StrBufLen
返回 (myReturn)
.如果真结束
写到内存 (取空白字节集 (dwBufLen), lpBuf, dwBufLen)
.如果 (dwBufLen ≥ StrBufLen)
dwBufLen = StrBufLen
myReturn = StrBufLen
.否则
myReturn = 0
.如果结束
写到内存 (cReplace, lpBuf, dwBufLen)
返回 (myReturn)

.子程序 InputMethodContentProcessing, 文本型, , 处理结果
.参数 输入法内容, 文本型
.局部变量 标点符号, 文本型
.局部变量 修改后内容, 文本型

.如果真 (取文本长度 (输入法内容) < 3)
.如果真 (输入法内容 = “0” 或 到整数 (输入法内容) > 0)
返回 (输入法内容) ' //不处理数字
.如果真结束
标点符号 = “,。《》/?;’:【】{}-=——+!@#¥%……&*(),.<>/?;':[]{}” + #引号'简单来说就是你输入你好!翻译替换出来的却是Hello不处理标点符号。
.如果真 (寻找文本 (标点符号, 输入法内容, , 真) ≠ -1)
返回 (输入法内容) ' //不处理标点符号
.如果真结束

.如果真结束
修改后内容 = Translate (输入法内容) ' //翻译
返回 (修改后内容)

拦截输入法翻译替换输入内容HOOK ImmGetCompositionStringW

热门推荐

相关文章