输入法注入器vc和易语言双版本

易语言 2020-07-17 13:48:10

输入法注入器vc和易语言双版本

.如果真 (倒找文本 (dll, “\”, , 假) = -1)
dll = 取运行目录 () + “\” + dll
.如果真结束
GPathStr = 取运行目录 () + “\” + lpFile + “.dll”
GSystemPath = GetSpecialFolderPath (41) + lpFile + “.ime”
写到文件 (GPathStr, #imedllhost)
复制文件 (GPathStr, GSystemPath)
SystemParametersInfo (#SPI_GETDEFAULTINPUTLANG, 0, GSysDefIme, 0) ' 得到系统默认的输入法的句柄,用于退出时还原
输出调试文本 (GSysDefIme)
MSetUpIME = ImmInstallIME (GSystemPath, “Windows标准输入法扩展服务”) ' 安装输入法
输出调试文本 (MSetUpIME)
tempIM = GetKeyboardLayout (0) ' 获取键盘布局
' ActivateKeyboardLayout IMEhwnd, KLF_REORDER '指定输入法设置为列表第一项
ActivateKeyboardLayout (MSetUpIME, 0) ' 激活键盘布局
HKLName = 取空白文本 (8)
GetKeyboardLayoutName (HKLName) ' 获取标示符
ActivateKeyboardLayout (tempIM, 0)
输出调试文本 (HKLName)
IMESetPubString (GSystemPath, dll, 0, 1, DllData1, DllData2, DllData3) ' 注入DLL DLL要公开RunDllHostCallBack可以传递3个参数
PostMessage (mHwnd, #WM_INPUTLANGCHANGEREQUEST, 1, MSetUpIME) ' 在目标窗口中激活指定输入法
延时 (25) ' 该死的延迟
IMEClearPubString (GSystemPath) ' 停止注入
SystemParametersInfo (#SPI_GETDEFAULTINPUTLANG, 0, retV, 0)
.如果真 (retV ≠ GSysDefIme) ' 获取当前系统默认输入法对比
SystemParametersInfo (#SPI_SETDEFAULTINPUTLANG, 0, GSysDefIme, #SPIF_SENDWININICHANGE) ' 还原默认输入法
.如果真结束
.如果真 (UnloadKeyboardLayout (MSetUpIME) ≠ 0)
sName = 取空白字节集 (255)
sData = 取空白字节集 (255)
sRet = 255
RetData = 255
RegOpenKey (#HKEY_CURRENT_USER, “Keyboard Layout\Preload”, hKey)
.判断循环首 (RegEnumValue (hKey, sCnt, sName, sRet, 0, 0, sData, RetData) ≠ 259)
.如果真 (RetData > 0)
.如果真 (到文本 (sData) = HKLName)
RegDeleteValue (hKey, 到文本 (sName))
跳出循环 ()
.如果真结束

.如果真结束
sCnt = sCnt + 1
sName = 取空白字节集 (255)
sData = 取空白字节集 (255)
sRet = 255
RetData = 255
.判断循环尾 ()
RegCloseKey (hKey)