zoukankan      html  css  js  c++  java
  • AutoHotkey+BUG小狼毫+BUG win10输入法设置的艰难摸索(未完待续)

    第一目标:只用小狼毫输入法(默认英文),由于:

    第二目标:英文+小狼毫输入法,需要 AutoHotkey 能获取当前是英文键盘还是小狼毫,这样能实现在不同输入法状态使用不同的鼠标形状

    还用到 imetool.exe 小工具,从win7时一直在用的。

    英文有美国键盘和英国键盘之分,

    但是美国键盘属于中文系的,AutoHotkey无法区分当前是小狼毫输入法还是美国键盘输入法

    所以就只好用英文键盘了,不爽的就是用小狼毫时,托盘图标会多个 CH 图标(win7时还强迫症用脚本删除该图标,现在只能忍忍)

    英文时是单个 EN 图标。

    删除英文输入法只剩小狼毫时,又会出现两个小狼毫(BUG,影响 Win-Space 无脑切换)

    实现方式:

    • windows语言只安装中文即可
    • 中文输入法只放小狼毫
    • imetool 删除所有输入法
    • 这时只有小狼毫输入法,用AutoHotkey脚本 changeIME("04090409") 强制转到英文输入法,就会自动添加了,这样在 imetool 和 HKEY_CURRENT_USERKeyboard LayoutPreload 下都是的,却不影响正常使用。
    • 在需要强制英文的时候,只需要 changeIME("04090409") 

    相关代码:

    ;切换输入法
    changeIME(sID)
    {
        WinActive("A")
        ctl := ControlGetFocus() || WinGetID()
        PostMessage(0x50,, dllcall("LoadKeyboardLayout", "str",sID, "uint",1), ctl, "A") ;NOTE 美国英语要用"08040804" 若不放ctl 在TC帮助的查找窗口无法切换
    }
    
    ;在用的所有输入法sID(8位16进制字符串)
    ;TODO 小狼毫 ****0804,而不是 E**
    arrUsingSid()
    {
        cnt := dllcall("GetKeyboardLayoutList", "uint",0, "uint",0)
        VarSetCapacity(hkl, cnt*4, 0)
        dllcall("GetKeyboardLayoutList", "uint",cnt, "uint",&hkl)
        arr := []
        loop(cnt)
        {
            sID := format("{:08X}", numget(hkl,(A_Index-1)*4))
            ;sID := (sID = "08040804") ? "00000804" : sID
            arr.push(sID)
        }
        return arr
        ;方法2 见 HKEY_CURRENT_USERKeyboard LayoutPreload
    }
    
    ;TODO rime和极点无效,微软拼音可以
    ;某日本人脚本中的获取输入法中英文状态(英文0,中文1)
    getState(winTitle:="A")
    {
        if !(idWIn := WinExist(winTitle))
            return
        DefaultIMEWnd := dllcall("imm32ImmGetDefaultIMEWnd", "uint",idWin, "uint")
        DetectSave := A_DetectHiddenWindows
        DetectHiddenWindows true
        res := SendMessage(WM_IME_CONTROL:=0x283, IMC_GETOPENSTATUS:=5,,, "ahk_id " . DefaultIMEWnd)
        DetectHiddenWindows DetectSave
        return res
    }
  • 相关阅读:
    Fragment传参
    android手机旋转方向识别
    如何激活已经运行过的Activity, 而不是重新启动新的Activity
    Android 在Canvas中实现画笔效果(一)--钢笔
    [AS3]as3画笔实例实现橡皮擦功能源代码
    在 Windows 環境下利用 VNC 遠端控管 Mac OS X Server
    mac下开发IOS代码管理
    Android开发--仿微信语音对讲录音
    Android 二维码 生成和识别(附Demo源码)
    Android开源项目分类汇总
  • 原文地址:https://www.cnblogs.com/hyaray/p/12657774.html
Copyright © 2011-2022 走看看