无忧启动论坛

标题: 【已解决】求输入法切换到ENG的代码(bat、vbs、wcs、ahk)都行。谢谢 [打印本页]

作者: yyz2191958    时间: 2025-2-21 14:13
标题: 【已解决】求输入法切换到ENG的代码(bat、vbs、wcs、ahk)都行。谢谢
本帖最后由 yyz2191958 于 2025-2-24 09:11 编辑

完美解决了:
输入法切换ENG(英文).ahk:
; AHK 切换输入法为 ENG(英文)
PostMessage, 0x50, 0, 0x0409, , A ; 0x0409 是 ENG 的语言 ID

======================================
输入法切换到中文(简体).ahk:
; AHK 切换为中文(简体)
PostMessage, 0x50, 0, 0x0804, , A ; 0x0804 是 中文(简体) ID

==========================================================
原来的问题:
输入法切换到ENG的代码(bat、vbs、wcs、ahk)都行。谢谢
【需求(PE 环境中 使用)无论当前是输入法是什么,运行代码以后,都切换到ENG(英文)

(强迫症哦,哈哈)

谢谢






切换英文.exe.rar

197.23 KB, 下载次数: 65, 下载积分: 无忧币 -2

切换到中文.exe.rar

197.24 KB, 下载次数: 21, 下载积分: 无忧币 -2


作者: aceainarj    时间: 2025-2-21 14:30
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Keyboard Layout\Preload]
"1"="00000804"
"2"="e0010804"

[HKEY_CURRENT_USER\Keyboard Layout\Substitutes]
"00000804"="00000409"

[HKEY_CURRENT_USER\Keyboard Layout\Toggle]

作者: aceainarj    时间: 2025-2-21 14:31
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Keyboard Layout]

[HKEY_CURRENT_USER\Keyboard Layout\Preload]
"1"="d0000804"
"2"="00000804"
"3"="00000804"
"4"="00000804"

[HKEY_CURRENT_USER\Keyboard Layout\Substitutes]
"d0000804"="00000409"

[HKEY_CURRENT_USER\Keyboard Layout\Toggle]


作者: martin313    时间: 2025-2-21 14:47
本帖最后由 martin313 于 2025-2-21 15:47 编辑

以下是一个通过批处理调用 PowerShell 实现切换到 ENG 输入法的解决方案:

@echo off
powershell -Command "$sig = '[DllImport(\"user32.dll\")] public static extern IntPtr GetForegroundWindow(); [DllImport(\"user32.dll\")] public static extern bool PostMessage(IntPtr hWnd, int Msg, int wParam, int lParam); [DllImport(\"user32.dll\")] public static extern IntPtr LoadKeyboardLayout(string pwszKLID, uint flags);'; Add-Type -MemberDefinition $sig -Name Keyboard -Namespace API; $hkl = [API.Keyboard]::LoadKeyboardLayout('00000409', 1); $hWnd = [API.Keyboard]::GetForegroundWindow(); [API.Keyboard]::PostMessage($hWnd, 0x50, 1, $hkl.ToInt32()); Start-Sleep -Milliseconds 200"

代码说明:
使用 PostMessage API 向当前窗口发送 WM_INPUTLANGCHANGEREQUEST 消息(0x50)
参数 0x0409 对应美式英语键盘布局(0409:00000409)
兼容 Windows 7 及以上系统,无需管理员权限

使用方法:
将代码保存为 SwitchToENG.bat
双击运行即可立即切换至 ENG 输入法

注意事项:
需确保 PowerShell 可正常使用(默认已启用)
若系统从未运行过 PowerShell 脚本,首次执行可能会有短暂延迟
切换效果对当前活动窗口立即生效
作者: yyz2191958    时间: 2025-2-21 16:38
martin313 发表于 2025-2-21 14:47
以下是一个通过批处理调用 PowerShell 实现切换到 ENG 输入法的解决方案:

@echo off

PE 环境 没有PowerShell  谢谢
作者: yyz2191958    时间: 2025-2-21 16:44
aceainarj 发表于 2025-2-21 14:30
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Keyboard Layout\Preload]

没有效果也谢谢
作者: martin313    时间: 2025-2-21 17:21
纯VBScript无法完成楼主的要求


作者: yyz2191958    时间: 2025-2-21 17:24
martin313 发表于 2025-2-21 17:21
纯VBScript无法完成楼主的要求

谢谢 解答
作者: 忧心的启    时间: 2025-2-21 17:24
晕就一个注册表,自己不会找找吗。
作者: yyz2191958    时间: 2025-2-21 17:25
忧心的启 发表于 2025-2-21 17:24
晕就一个注册表,自己不会找找吗。

你没有看明白我的意思哦
作者: holley2008    时间: 2025-2-21 17:40
本帖最后由 holley2008 于 2025-2-21 17:44 编辑
  1. ; AHK 切换输入法为 ENG(英文)
  2. PostMessage, 0x50, 0, 0x0409, , A ; 0x0409 是 ENG 的语言 ID
复制代码
  1. // WCS 切换输入法为 ENG
  2. var shell = new ActiveXObject("WScript.Shell");
  3. shell.SendKeys("^{SPACE}");
复制代码

确认一下你的PE 中ENG的语言ID是不是0409
作者: yyz2191958    时间: 2025-2-21 17:48
holley2008 发表于 2025-2-21 17:40
确认一下你的PE 中ENG的语言ID是不是0409

我试一试先 谢谢
作者: qq8899399    时间: 2025-2-21 17:50
同示 在线蹲一个 批处理的解决方案
作者: yyz2191958    时间: 2025-2-21 17:52
本帖最后由 yyz2191958 于 2025-2-21 17:53 编辑
holley2008 发表于 2025-2-21 17:40
确认一下你的PE 中ENG的语言ID是不是0409

AHK 切换输入法为 ENG(英文)————————成功
(WCS 切换输入法为 ENG————不成功)
再次感谢
作者: martin313    时间: 2025-2-21 18:16
yyz2191958 发表于 2025-2-21 17:25
你没有看明白我的意思哦
Lua 代码也无法实现

纯Lua原生环境无法直接调用Windows API(如LoadKeyboardLayout, PostMessage等),因其设计定位为轻量级脚本语言,不包含操作系统级交互功能。要实现输入法切换,必须借助依赖系统工具(如PowerShell)
作者: fjun67    时间: 2025-2-21 19:08
也算是一个创意
作者: yyz2191958    时间: 2025-2-21 19:14
fjun67 发表于 2025-2-21 19:08
也算是一个创意

强迫症的问题解决了   我很满意
作者: fruit    时间: 2025-2-21 20:59
学习一下,谢谢楼主分享
作者: fjun67    时间: 2025-2-21 20:59
yyz2191958 发表于 2025-2-21 19:14
强迫症的问题解决了   我很满意

呵呵,那就好
作者: 9zhmke    时间: 2025-2-21 22:01
以前我也遇到在软件界面输入用户名时有中文的情况,没找到办法,最终使用了粘贴大法才解决了。
作者: promrhxq    时间: 2025-2-21 22:18
感谢分享好东东
作者: 绿光科技    时间: 2025-2-22 01:17
这个值得学习一下
作者: wang1126    时间: 2025-2-22 05:57
谢谢楼主分享
作者: martin313    时间: 2025-2-22 09:23
yyz2191958 发表于 2025-2-21 19:14
强迫症的问题解决了   我很满意


按下 F1 切换为英文,按下 F2 切换为中文。

; 切换为英文
F1::
    PostMessage, 0x50, 0, 0x0409, , A
    return

; 切换为中文(简体)
F2::
    PostMessage, 0x50, 0, 0x0804, , A
    return
作者: yyz2191958    时间: 2025-2-22 09:32
martin313 发表于 2025-2-22 09:23
按下 F1 切换为英文,按下 F2 切换为中文。

; 切换为英文

不错 谢谢
作者: yyz2191958    时间: 2025-2-22 09:37
martin313 发表于 2025-2-22 09:23
按下 F1 切换为英文,按下 F2 切换为中文。

; 切换为英文

确实可行  非常感谢
作者: szwp    时间: 2025-2-22 09:43
yyz2191958 发表于 2025-2-21 16:38
PE 环境 没有PowerShell  谢谢

可以有
作者: guong    时间: 2025-2-22 11:58
来学习一下
作者: sulong    时间: 2025-2-22 12:15
原来如此,感谢分享
作者: lucky323su    时间: 2025-2-22 14:36
谢谢分享。
作者: milkgirl    时间: 2025-2-22 16:33
学习学习
作者: yyz2191958    时间: 2025-3-6 21:07
holley2008 发表于 2025-2-21 17:40
确认一下你的PE 中ENG的语言ID是不是0409

怎样查看 “搜狗拼音输入法” 的语言ID?谢谢
作者: holley2008    时间: 2025-3-7 09:05
yyz2191958 发表于 2025-3-6 21:07
怎样查看 “搜狗拼音输入法” 的语言ID?谢谢

前面提到的所谓“语言ID”,你可以简单理解为一种键盘布局或区域语言,一般在此HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts
只对应zh_CN、Eng或其它国家语言,没有单纯针对某款输入法所谓的ID。
作者: yyz2191958    时间: 2025-3-7 09:09
holley2008 发表于 2025-3-7 09:05
前面提到的所谓“语言ID”,你可以简单理解为一种键盘布局或区域语言,一般在此HKEY_LOCAL_MACHINE\SYSTE ...

谢谢 我看看




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3