修改微软拼音输入法的“/”快捷键
By
rebellion51
at 2022-03-14 • 0人收藏 • 1080人看过
微软拼音系统自带,很好用,响应快,也没有广告,但是有一个不爽的地方,就是它的“/”键,无论是中文模式还是英文模式,都只能输出“/”,这与我们常规的输入习惯不一样。我们希望的是:在中文模式下,按“/”键,输出“、”,英文模式下,按“/”键,输出“/”。一番搜索后,从网上的一段ahk代码获得灵感。
发布后创建快捷方式,放在startup文件夹,可实现开机自动启动。
我的环境是:win11,64位系统。
以下是代码:
import win.ui;
/*DSG{{*/
mainForm = win.form(text="顿号";right=959;bottom=591)
mainForm.add()
/*}}*/
import win.ui.menu;
import key.hotkey;
import win.util.tray;
//创建超级热键,必须用于窗口程序中
var hotkey = key.hotkey(mainForm)
//判断输入法状态是否是中文
var isChineseMode = function(){
imm32 = raw.loadDll("imm32")
var hwnd = ::User32.GetForegroundWindow()
var hwnd2 = imm32.ImmGetDefaultIMEWnd(hwnd)
var ime_status = ::User32.SendMessage(hwnd2, 0x283/*_WM_IME_CONTROL*/, 0x001 ,0)
return ime_status == 1025;
}
//为“/”绑定热键
hotkey.reg(
"/",
function(hwnd,...){
if isChineseMode(){
..key.sendString("、")
} else {
..key.sendString("/")
}
}
)
// 创建托盘图标
var tray = win.util.tray(mainForm)
// 不在前台显示
mainForm.show(false);
mainForm.wndproc = {
[0xACCF/*_WM_TRAYMESSAGE*/ ] = function(hwnd,message,wParam,lParam){
if( lParam = 0x205/*_WM_RBUTTONUP*/ ){
var pt = ::POINT();
::User32.GetCursorPos(pt);
//弹出托盘菜单以前,一定要前置主窗口中,不然不点击菜单不会消失
win.setForeground(mainForm.hwnd)
mainForm.popmenu.popup(pt.x,pt.y,true )
}
}
}
mainForm.popmenu = win.ui.popmenu(mainForm);//创建弹出菜单
mainForm.popmenu.add('&退出',function(id){ mainForm.close() })
return win.loopMessage();
5 个回复 | 最后更新于 2022-03-14
登录后方可回帖

感谢分享,
,有用