使用python检测键盘的vid和pid

问题描述 投票:0回答:1

我是Python新手,但我会尽力解释发生了什么。所以我想编写一个 python 脚本,使用 pywin32 检测键盘和鼠标的 VID、PID 和 NAME。我已经编写了一个用于检测鼠标的脚本并且它可以工作。这是脚本:

def list_mice_devices():
    wmi = win32com.client.GetObject("winmgmts:")
    devices = wmi.InstancesOf("Win32_PointingDevice")
    mice_list = []
 
    for device in devices:
        name = device.Name
        match = re.search(r'VID_(\w+)&PID_(\w+)', device.PNPDeviceID)
        
        vid, pid = match.groups() if match else (None, None)
        mice_list.append((name, vid, pid))
 
    return mice_list
 
def select_mouse_and_configure():
    print(Fore.CYAN + "\nDetecting mice devices...")
    mice = list_mice_devices()
 
    if not mice:
        print(Fore.RED + "No mouse devices found. Exiting...")
        time.sleep(5)
        exit()

输出: 正在检测鼠标设备... 1 → Synaptics SMBus 触摸板 VID:未找到,PID:未找到 2 → USB 输入设备 VID:1532,PID:008A 选择您的鼠标编号:

现在我用“Win32_Keyboard”尝试它,它给出了错误这是键盘的脚本:

def list_keyboard_devices():
    wmi = win32com.client.GetObject("winmgmts:")
    devices = wmi.InstancesOf("Win32_Keyboards")
    keyboard_list = []
    
    for device in devices:
        name = device.Name
        match = re.search(r'VID_(\w+)&PID_(\w+)', device.PNPDeviceID)
        
        vid, pid = match.groups() if match else (None, None)
        keyboard_list.append((name, vid, pid))
 
    return keyboard_list

def select_keyboard_and_configure():
    print(Fore.CYAN + "\nDetecting keyboard devices...")
    keyboards = list_keyboard_devices()
 
    if not keyboards:
        print(Fore.RED + "No keyboard devices found. Exiting...")
        time.sleep(5)
        exit()

输出:

Detecting keyboard devices...
Traceback (most recent call last):
  File "C:\Project 101\python\keyboard.py", line 102, in <module>
    select_keyboard_and_configure()
  File "C:\Project 101\python\keyboard.py", line 69, in select_keyboard_and_configure
    keyboards = list_keyboard_devices()
                ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Project 101\python\keyboard.py", line 58, in list_keyboard_devices
    for device in devices:
pywintypes.com_error: (-2147217392, 'OLE error 0x80041010', None, None)

基本上它们是相同的并且应该可以工作。如果有人可以提供帮助,我们将不胜感激。 谢谢。

我还没有尝试解决它,但我已经研究了(https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-keyboard)以了解“win32_keyboard类是如何工作的

python winapi pywin32 hid
1个回答
0
投票

如果鼠标可以工作,但键盘不能工作,请尝试使用

pywinusb
获取仅键盘的 ID。我在一个很棒的网站上找到了这个(只需在谷歌上快速搜索即可找到它),我将链接放在代码下方。

import pywinusb.hid as hid

def get_keyboard_pid_vid():
    keyboards = hid.find_all_hid_devices()
    for keyboard in keyboards:
        if keyboard.product_name == 'Keyboard':
            return keyboard.vendor_id, keyboard.product_id
    return None

pid, vid = get_keyboard_pid_vid()
print(f"PID: {pid}, VID: {vid}")

我怀疑这也适用于鼠标,所以如果它也停止工作,请尝试这个。请注意,您需要在系统上安装

pywinusb
,然后才能运行此代码。

来源

© www.soinside.com 2019 - 2024. All rights reserved.