在 Windows 系统中,判断键盘类型有多种方法,常见的途径可以从硬件层面和软件层面进行识别和分类。以下是几种常见的判断键盘类型的逻辑或途径:

news/2025/3/1 20:24:02/文章来源:https://www.cnblogs.com/suv789/p/18745363

在 Windows 系统中,判断键盘类型有多种方法,常见的途径可以从硬件层面和软件层面进行识别和分类。以下是几种常见的判断键盘类型的逻辑或途径:

1. 通过注册表(Registry)判断键盘类型

Windows 系统会在注册表中存储与硬件相关的配置信息,包括键盘的类型。可以通过查看相关的注册表项来推测键盘类型。

  • 路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters
  • 键值
    • OverrideKeyboardType:该值会存储一个数字,表示键盘的类型。通过该值可以判断是否是标准键盘或者其他类型的设备。

该方法常用于识别默认的输入设备类型,但它主要适用于传统键盘类型,可能无法识别更复杂的输入设备。

2. 通过设备管理器检查硬件信息

Windows 操作系统通过设备管理器识别系统中的所有硬件设备,包括键盘。你可以通过以下步骤查看:

  • 打开设备管理器(Device Manager)。
  • 展开键盘(Keyboards)类别。
  • 右键点击键盘设备,选择属性
  • 详细信息标签页中查看硬件ID、制造商等信息。

这种方法主要通过硬件识别判断键盘的类型(例如,USB 键盘、PS/2 键盘等)。

3. 通过 GetRawInputDeviceList 函数

如果需要通过编程方式判断键盘的类型,可以使用 GetRawInputDeviceList 函数,它能够提供系统中所有输入设备的信息,包括键盘、鼠标等。通过此函数,可以获得设备的类型、ID 等。

示例代码

cppCopy Code
RAWINPUTDEVICE devices[10];
UINT nDevices;
if (GetRawInputDeviceList(devices, &nDevices, sizeof(RAWINPUTDEVICE)) == 0) {for (UINT i = 0; i < nDevices; i++) {if (devices[i].dwType == RIM_TYPEKEYBOARD) {// 键盘设备类型判断// 可以通过不同的 dwSubType 判断具体的键盘类型}}
}

该方法常用于编写需要更复杂输入识别的应用程序。

4. 通过设备的 HID(Human Interface Device)信息判断

键盘通常是 HID 设备的一种,可以通过查询 HID 类设备的信息来判断键盘类型。Windows 提供了 HID API,允许开发者获取设备的报告描述符、属性等信息。

  • 通过 HidD_GetPreparsedData 获取设备的报告描述符。
  • 通过 HID 报告描述符判断设备是否为键盘以及其具体的型号和功能。

这是一种较为底层的方式,适用于需要获取键盘详细信息的场景。

5. 通过 WM_KEYDOWN 或 WM_INPUT 消息

在编写应用程序时,可以通过捕获 Windows 消息(如 WM_KEYDOWNWM_INPUT)来判断输入的设备类型。通过这些消息可以判断用户是否按下了键盘的某个键,并进一步判断是哪种类型的键盘。

示例

  • 如果消息来自 USB 设备,可以推测这是一个 USB 键盘。
  • 如果是 WM_KEYDOWN 来自 PS/2 键盘,可以推测该键盘为 PS/2 类型。

6. 通过 wscapi.dll 查询系统硬件信息

使用 Windows 系统中的 wscapi.dllwin32api 等函数,可以获取详细的硬件信息。通过查询硬件设备的型号、接口、属性等信息,可以推断出键盘的类型。

7. 通过 BIOS/UEFI 设置中的信息

部分高级的 BIOS 或 UEFI 系统设置中,会显示连接的输入设备类型。通过查看 BIOS 设置中对硬件的描述,也可以获得键盘类型的相关信息,尤其是对传统的 PS/2 键盘,BIOS 通常会有明确的区分。

8. 通过 ps/2 或 usb 接口判断

  • PS/2 接口:如果键盘通过 PS/2 接口连接,通常可以通过硬件接口判断是 PS/2 键盘。
  • USB 接口:如果通过 USB 端口连接,可以通过设备管理器或系统信息工具查看设备是 USB 键盘。

9. 使用外部工具(如 DirectInput

DirectInput 是 Windows 提供的一种 API,用于获取输入设备的信息。通过它,可以获取输入设备(包括键盘、游戏手柄等)的状态。

示例代码

cppCopy Code
LPDIRECTINPUT8 pDI;
HRESULT hr = DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, (VOID**)&pDI, NULL);
if (SUCCEEDED(hr)) {// 检查连接的设备,确定是否为键盘设备
}

  • 硬件层面:通过注册表、设备管理器、HID 信息、BIOS/UEFI 等途径判断。
  • 软件层面:通过 GetRawInputDeviceListWM_KEYDOWNDirectInput 等 API 判断。
  • 接口层面:通过 USB 或 PS/2 接口类型来区分。

不同的场景和需求决定了使用哪种方式来判断键盘的类型。对于开发者来说,可能会结合多种方法来确保准确识别键盘类型。


在 Windows 系统中,可以通过多种途径和方法使用 PowerShell、.cmd 文件、以及 .reg 注册表文件来判断键盘的类型。以下是基于这些工具的不同方法,涵盖了硬件识别和系统级配置的几个逻辑途径:

1. 通过 PowerShell 判断键盘类型

PowerShell 是一个强大的命令行工具,提供了与系统硬件交互的多种方式。可以通过以下方法来查询和判断键盘类型。

1.1 获取键盘设备信息(通过 WMI 查询)

WMI(Windows Management Instrumentation)是 Windows 系统的管理框架,通过 PowerShell 可以使用 WMI 来获取硬件信息,包括键盘设备。

powershellCopy Code
Get-WmiObject -Class Win32_Keyboard

这条命令返回系统中的键盘信息,包括制造商、型号、键盘类型等属性。具体键盘的类型(如 USB 键盘、PS/2 键盘等)可以通过查看 DeviceIDCaption 属性推测。

1.2 通过 Get-PSDrive 获取 USB 设备

如果是 USB 键盘,可以通过 PowerShell 查看连接的 USB 设备:

powershellCopy Code
Get-WmiObject -Query "SELECT * FROM Win32_PnPEntity WHERE Caption LIKE '%keyboard%'"

该命令通过查询系统中所有键盘类型的设备来判断连接的键盘类型。如果设备的 Caption 包含 "keyboard",则它就是键盘设备。

2. 通过 CMD 批处理文件判断键盘类型

CMD 文件通常用于执行一系列命令,但它的功能较为有限,因此它的判断方式也较为简单。

2.1 使用 WMIC 查询键盘信息

WMIC(Windows Management Instrumentation Command-line)是 Windows 系统中的一个命令行工具,可以用来查询硬件信息。通过 WMIC 查询键盘设备的信息:

cmdCopy Code
wmic path Win32_Keyboard get DeviceID, Caption

此命令将返回键盘的相关信息,包括设备 ID 和型号(Caption)。可以根据这些信息推测键盘的类型。

2.2 查看设备列表中的键盘

如果你想通过 .cmd 文件获取连接设备的更多详细信息,可以使用 devcon 工具(设备控制工具):

cmdCopy Code
devcon find *keyboard*

该命令会列出所有键盘类型的设备,并可以帮助你识别是 USB 还是 PS/2 类型的键盘。

3. 通过 .reg 注册表文件判断键盘类型

在 Windows 中,注册表保存了许多硬件和系统配置信息,包括键盘的设置。可以通过注册表查看和修改键盘设置。

3.1 查看注册表键值来判断键盘类型

Windows 在注册表中保存了与输入设备相关的一些信息。你可以通过以下路径查看和判断键盘的类型:

  • 路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters

    • 该路径下有一些键盘参数,OverrideKeyboardType 键值可以指示键盘的类型。
  • 路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\HID

    • 通过查看 HID(Human Interface Device)设备的注册表项,可以获取到连接的键盘设备的详细信息。

注册表文件示例:

Copy Code
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters]
"OverrideKeyboardType"="1"
  • "OverrideKeyboardType" 键值通常为 1 或 2,可以用于推测键盘类型。

3.2 通过 .reg 文件修改和查询键盘设置

你还可以创建一个 .reg 文件来查询或修改键盘类型相关的设置。举例来说:

Copy Code
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters]
"OverrideKeyboardType"="2"

.reg 文件可以修改注册表中的键盘设置,例如切换不同的键盘类型或禁用某些功能。

4. 其他系统工具与命令

除了 PowerShell、CMD、和注册表之外,Windows 还有一些其他的系统工具和命令可用于判断键盘类型。

4.1 通过设备管理器查询键盘信息

你可以直接通过 Windows 的设备管理器查询硬件信息。设备管理器会列出所有连接的硬件设备,包括键盘。

  • 打开设备管理器 (devmgmt.msc),展开 “键盘” 选项。
  • 右键点击键盘设备,查看“属性”中的设备类型、型号等信息。

4.2 通过 GetRawInputDeviceList 函数(编程方法)

如果你需要在应用程序中判断键盘类型,可以使用 GetRawInputDeviceList 函数来获取所有输入设备的信息。

cppCopy Code
RAWINPUTDEVICE devices[10];
UINT nDevices;
if (GetRawInputDeviceList(devices, &nDevices, sizeof(RAWINPUTDEVICE)) == 0) {for (UINT i = 0; i < nDevices; i++) {if (devices[i].dwType == RIM_TYPEKEYBOARD) {// 判断键盘类型}}
}

判断 Windows 系统中键盘类型的方法很多,主要可以通过以下途径:

  1. PowerShell:通过 WMI 查询、USB 设备查询等。
  2. CMD 批处理文件:通过 wmic 和 devcon 工具查询设备信息。
  3. .reg 注册表文件:通过修改或查看注册表中的设备信息。
  4. 设备管理器:直接查看系统设备列表。
  5. API 调用:通过编程接口(如 GetRawInputDeviceList)来获取详细的硬件信息。

每种方法的适用场景有所不同,具体选择哪种方式取决于你的需求。


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/891670.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

foobar2000 v2.24.2 汉化版

foobar2000 v2.24.2 汉化版 -----------------------【软件截图】---------------------- -----------------------【软件介绍】---------------------- foobar2000 是一个 Windows 平台下的高级音频播放器.包含完全支持 unicode 及支持播放增益的高级标签功能. 特色: * 支持的…

Jsmoke-一款强大的js检测工具,浏览器部署即用,使用方便且高效

Jsmoke 🚬🚬 by Yn8rt ​ 该插件由 Yn8rt师傅 开发,插件可以理解为主动版的hae和apifinder,因为其中的大多数规则我都引用了,当你认为当前页面,以及其调用的js文件存在敏感信息的时候,可以用它来帮你打开突破口,速度很快,非常方便,也比较直观,该插件用于检…

【恐怖の算法】 斜率优化

【恐怖の算法】 斜率优化【恐怖の算法】 斜率优化 斜率优化是一种用于优化动态规划(DP)算法时间复杂度的技巧,通常可以将一些原本时间复杂度较高的 DP 问题优化到线性时间复杂度。下面将详细介绍斜率优化的原理、步骤,并给出一个具体的 C++ 实现示例。 原理 在某些动态规划…

[联合省选2025 游记] Now and forever

正在写。。。但是估计有人会急,所以同步更新([联合省选2025 游记] Now and forever day -1 乐死我了,今天出了个巨大的乐子,总结为逐火十三英桀 文章链接:https://www.luogu.com.cn/article/xlmq65ph 直击主题:https://pic1.imgdb.cn/item/67c1b6ded0e0a243d4083603.png …

Java学习——数组

数组的定义和声明1.声明数组 int[] array =null;这一步在栈里面压入了一个array;声明的时候数组还不存在 2.创建数组 array=new int[10] ;这一步在堆里面开辟了一个内存 3.给数组元素赋值 for (int i = 0; i < nums.length; i++) { nums[i] = i + 1; System.out.println(nu…

pyenv下载慢的解决方式

pyenv install 不知道为什么会卡住 解决方法就是手动直接下载对应的版本 放到对应的目录 例如这里显示的To C:\Users\28453\.pyenv\pyenv-win\install_cache\python-3.12.9-amd64.exe 我们只需要到 python 官网去下载对应的版本 并放到指定目录 我用的是 pyenv-win 需要下载 …

MongoDB聚合查询

MongoDB聚合查询 创建测试数据 db.student.drop() db.student.insertOne({_id: 1,name: "zhangsan",age: 12,teacher: ["Tom","Jack"]}) db.student.insertOne({_id: 2,name: "lisi",age: 15,teacher: ["Lucy","Tom&qu…

htmx怎么样,光速弃坑

前言 htmx可以说是对html标签的加强,提供了一些额外的标签属性,来获得一些功能,比如ajax局部渲染之类的。 快速自定义事件等等…… 使用? <script src="https://cdn.bootcdn.net/ajax/libs/htmx/2.0.4/htmx.min.js"></script>我想首先使用一下获取&l…

2024春季NOI省选游记

前言 初二,同步赛选手,Day 1 还行,Day 2 拉跨。 Day 1 (时刻有些许偏差) \(8:25\) 公布密码了,居然没有 PDF 密码。 \(8:26\) 开 T1,感觉余数必须要枚举,剩下的可能需要 \(\log\) 找解。 \(8:35\) 开始写二分,没过大样例。 \(8:57\) 调了半天,发现二分是假的。 \(9:13\…

3.1 多元函数的全微分

1 多元函数的全微分 1.1 定义 1.1.1 回顾一元函数的微分 1.1.2 多元函数的定义1.1.3 可微推导连续 但连续不一定可微,证明如下: 若连续一定可微,又一元函数必满足二元函数的性质,又一元函数可微必可导,可推至连续必可导,矛盾 1.2 多元函数可微的必要条件 1.2.1 可微必可导…

React—10—受控组件和非受控组件;高阶组件

一、概念 我的理解是,是否有react提供数据,分为受控组件和非受控组件。 比如input元素,只要绑定了value属性,那么在react中,用户在输入框输入的值不会显示在输入框(react应该做了限制,原生html的input框即使value绑定了值依然可以输入), 这就导致,想改变value的值,必须…