#卸载ENG键盘

win更新后默认添加的ENG输入法键盘,本代码用于快速卸载该布局
import ctypes

# 定义 Windows API 中的常量
# KLF_ACTIVATE 标志位,用于激活加载的键盘布局。
KLF_ACTIVATE = 1
# 美式英语的语言标识符字符串。
# 必须是字节字符串 (byte string) 才能传递给C函数。
US_KEYBOARD_LAYOUT_ID = b"00000409"

# 加载 user32.dll 库,该库包含键盘管理功能
user32 = ctypes.windll.user32


def main():
    """
    加载然后卸载美式英语键盘布局。
    """
    print(f"正在尝试加载键盘布局: {US_KEYBOARD_LAYOUT_ID.decode()}...")

    # --- 等同于汇编代码中的: invoke LoadKeyboardLayout, str_us_keyboard, 1 ---
    # 调用 user32.dll 中的 LoadKeyboardLayoutA 函数
    handle = user32.LoadKeyboardLayoutA(US_KEYBOARD_LAYOUT_ID, KLF_ACTIVATE)

    # 检查函数是否成功。返回值为 0 表示失败。
    if not handle:
        # 获取Windows API的最后错误代码
        error_code = ctypes.windll.kernel32.GetLastError()
        print(f"加载键盘布局失败。Windows 错误代码: {error_code}")
        return

    print(f"成功加载布局。句柄: {handle}")

    # --- 等同于汇编代码中的: invoke UnloadKeyboardLayout, eax ---
    # 将句柄 (在汇编中是 eax 寄存器) 传递给 UnloadKeyboardLayout
    print("现在卸载该键盘布局...")
    success = user32.UnloadKeyboardLayout(handle)

    # 检查卸载操作是否成功
    if success:
        print("成功卸载布局。")
    else:
        # 获取Windows API的最后错误代码
        error_code = ctypes.windll.kernel32.GetLastError()
        print(f"卸载键盘布局失败。Windows 错误代码: {error_code}")


if __name__ == "__main__":
    main()
 
 
Back to Top