【AHK】挽救 win11 —— 微软拼音输入法的 / 键输出中文顿号的问题

文章讲述了用户在Win11系统下遇到的微软拼音输入法顿号输入问题,通过AHK编程语言调整输入法设置,使用/键输出中文顿号,并介绍了获取输入法状态和处理键盘钩子的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

需求

win11下的微软拼音输入法还是比较好用的,相对以前常用的搜狗输入法来说,资源占用少,没广告。但是有个对我来说致命的问题,就是不知道从哪个版本开始,由 / 键输出中文顿号,变成了 \ 输出,这就极其让人不适了,甚至一度让我想卸载这个输入法。

因此,需要解决中文顿号()的输入问题,可以考虑使用 AHK,强行使用 / 输出中文顿号。

代码

CSDN 的文章模板缺少对 AutoHotkey 代码的渲染能力,下述代码的颜色大家将就看看。

;====================================================================
; 调整微软拼音输入法,用 / 输出中文顿号 、
;====================================================================
is_chinese_mode(){
    hWnd := WinGetID("A")

    origin_detect_hidden_window := A_DetectHiddenWindows
    DetectHiddenWindows(True)
    result := SendMessage(
        0x283, ; Message : WM_IME_CONTROL
        0x001, ; wParam : IMC_GETCONVERSIONMODE
        0, ; lParam : (NoArgs)
        , ; Control : (Window)
        "ahk_id " DllCall("imm32\ImmGetDefaultIMEWnd", "Uint", hWnd, "Uint") ; 获取当前输入法窗口句柄
    )
    DetectHiddenWindows(origin_detect_hidden_window)
    
    ; 微软拼音(英-中,新/旧,新旧/新旧)0/1024-1/1025
    return  (result == 1 or result == 1025)
}

$/::{ 
    if(is_chinese_mode()){
        Send("\")
    }else{
        Send("/")
    }
}

这段代码有几个地方值得注意:

  1. 核心逻辑是获取当前输入法的中英文状态,这个经过多轮搜索,最终确认通过 SendMessage() 函数来实现(参考1)。这是一个类似 windows 的系统函数,里面的参数具体值在微软网站根本找不到,比如 IMC_GETCONVERSIONMODE 对应的值是 0x001,也许安装个 Visual Studio Community 再直接查找相应的头文件定义可以找到。
  2. 想要成功获取当前输入法窗口句柄,必须开启 DetectHiddenWindows,否则找不到
  3. SendMessage() 函数的返回值有多种可能,必须根据实际情况进行处理。
  4. 最终步骤是通过截取 / 键来实现,这里有个问题,就是英文模式下,若直接输出原字符,会导致 AHK 再一次截获到 / 键,于是再一次启动该热键,从而进入死循环。为避免这种情况,必须使用键盘钩子,即加个 $ 符号。(参考2)

参考

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值