| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2500 人关注过本帖
标题:EXE运行时如何关闭中文输入法
只看楼主 加入收藏
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1070
专家分:2613
注 册:2015-12-30
收藏
得分:0 
有可能模拟发送一个按键 <Shift> 吗?
2023-01-12 09:33
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10568
专家分:43011
注 册: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
等 级:版主
威 望:66
帖 子:1070
专家分:2613
注 册: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: 7Rank: 7Rank: 7
等 级:贵宾
威 望:14
帖 子:241
专家分:508
注 册: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: 7Rank: 7Rank: 7
等 级:贵宾
威 望:14
帖 子:241
专家分:508
注 册:2014-6-12
收藏
得分:0 
以下是引用easyppt在2023-1-12 08:34:37的发言:

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

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

图片附件: 游客没有浏览图片的权限,请 登录注册
2023-01-12 11:03
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1070
专家分:2613
注 册:2015-12-30
收藏
得分:0 
回复 24楼 kangss
感谢感谢,我试试
2023-01-12 11:04
kangss
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:14
帖 子:241
专家分:508
注 册:2014-6-12
收藏
得分:0 
回复 26楼 laowan001
我猜你的意图没错吧?只是目前还没有找到获取“中”“英”状态的办法
2023-01-12 11:08
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10568
专家分:43011
注 册:2014-5-20
收藏
得分:0 
是不是把问题复杂化了,系统的键盘鼠标干预太多也不好。
获取数据后不可以判断出是否有效吗?
2023-01-12 14:52
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10568
专家分:43011
注 册:2014-5-20
收藏
得分:0 
确是暂时不用中文输入,可暂时卸载中文输入,到时再载入,就看用户会不会去系统设置里添加回去了,否则还真是复杂到无地自容。
2023-01-12 15:03
kangss
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:14
帖 子:241
专家分:508
注 册: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
快速回复:EXE运行时如何关闭中文输入法
数据加载中...
 
   



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

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