标题:EXE运行时如何关闭中文输入法
只看楼主
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
得分:0 
有可能模拟发送一个按键 <Shift> 吗?
2023-01-12 09:33
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 20楼 laowan001
要切换为En输入法时:LoadKeyboardLayout("0x0409", 1)
不要时恢复之前输入法状态:ActivateKeyboardLayout(hLayout, 0)
这样不可以吗

2023-01-12 10:40
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
得分:0 
回复 22楼 吹水佬
程序代码:
DECLARE LONG GetKeyboardLayout IN User32 LONG
DECLARE LONG LoadKeyboardLayout IN User32 STRING@, LONG
DECLARE LONG ActivateKeyboardLayout IN User32 LONG,LONG
hLayout = GetKeyboardLayout(0)

LoadKeyboardLayout("0x0409", 1) && KLF_ACTIVATE


上面是我在form.Activate时执行的

[此贴子已经被作者于2023-1-12 10:45编辑过]

2023-01-12 10:44
kangss
Rank: 4
等 级:贵宾
威 望:10
帖 子:138
专家分:237
注 册:2014-6-12
得分:0 
以下是引用laowan001在2023-1-12 09:15:56的发言:

https://bbs.bccn.net/viewthread.php?tid=485814&highlight=%CA%E4%C8%EB%B7%A8
VFP的IMESTATUS()适用XP,之后的windows版本可能不适用。
可以试试用WinAPI切换输入法,如:
DECLARE LONG GetKeyboardLayout IN User32 LONG
DECLARE LONG LoadKeyboardLayout IN User32 STRING@, LONG
DECLARE LONG ActivateKeyboardLayout IN User32 LONG,LONG
hLayout = GetKeyboardLayout(0)
?"切换为En输入法"
LoadKeyboardLayout("0x0409", 1) && KLF_ACTIVATE
?"按一键恢复原输入法"
INKEY(0)
ActivateKeyboardLayout(hLayout, 0)
上面是2018年的帖子,吹版提供的方法,试过了,可以达到目的
有一点不知能否实现,用了上面的方法,第一次右下角键盘位置显示为 ENG ,再点就没有了,等于输入法当前状态看不到了,能否只切换“中”“英”状态?


你这就是我在 7 楼说的“副作用”:一旦切换到ENG键盘布局,键盘快捷键切换就失效了
你表达的意思我猜对了,因为你想实现的功能,我一直在用。版主的方案是win7方案。
“LoadKeyboardLayout”不是切换输入法,是切换“键盘布局”。
如果你没有主动添加“ENG”,“ENG键盘布局”想要删除,还得安装布局才能删除。

你的想法,我早都知道 win10 下不好处理,昨天看到你问了,就搞了一下,我 6 楼的代码就是你想要的切换“中”“英”状态,遗憾的是:没法判断它的状态。
2023-01-12 10:52
kangss
Rank: 4
等 级:贵宾
威 望:10
帖 子:138
专家分:237
注 册:2014-6-12
得分:0 
以下是引用easyppt在2023-1-12 08:34:37的发言:

确实,扫码枪 条码输入 确实需要切换到英文模式,我们在工作中,这样的问题带来的麻烦 反复出现,如果能控制确实是好事。

现在 大部分用户都是使用搜狗输入法,如果能代码 控制 搜索输入法中英文 切换,至少可以解决大部分用户的问题,能代码 获取当前程序的 输入法状态 并控制搜狗的输入法吗

2023-01-12 11:03
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
得分:0 
回复 24楼 kangss
感谢感谢,我试试
2023-01-12 11:04
kangss
Rank: 4
等 级:贵宾
威 望:10
帖 子:138
专家分:237
注 册:2014-6-12
得分:0 
回复 26楼 laowan001
我猜你的意图没错吧?只是目前还没有找到获取“中”“英”状态的办法
2023-01-12 11:08
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
是不是把问题复杂化了,系统的键盘鼠标干预太多也不好。
获取数据后不可以判断出是否有效吗?
2023-01-12 14:52
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
确是暂时不用中文输入,可暂时卸载中文输入,到时再载入,就看用户会不会去系统设置里添加回去了,否则还真是复杂到无地自容。
2023-01-12 15:03
kangss
Rank: 4
等 级:贵宾
威 望:10
帖 子:138
专家分:237
注 册:2014-6-12
得分:0 
找到判断“中”“英”状态的办法了:https://blog.

isEnglishMode(){
    hWnd := winGetID("A")
    result := SendMessage(
        0x283, ; Message : WM_IME_CONTROL
        0x001, ; wParam : IMC_GETCONVERSIONMODE
        0, ; lParam : (NoArgs)
        , ; Control : (Window)
        ; 获取当前输入法的模式
        ; Retrieves the default window handle to the IME class.
        "ahk_id " DllCall("imm32\ImmGetDefaultIMEWnd", "Uint", hWnd, "Uint")
    )
    ; DetectHiddenWindows Fasle
    ; 返回值是0表示是英文模式,其他值表明是中文模式
    return result == 0
}
2023-01-12 16:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-511088-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013486 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved