我是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类是如何工作的
如果鼠标可以工作,但键盘不能工作,请尝试使用
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
,然后才能运行此代码。