Люк прав. Чтобы получить локализованную версию Processor (_Total) \% Processor Time, мы должны получить локализованные имена каждого из компонентов пути «Processor» и «% Processor Time» с постоянным значением «(_Total)» , Индексы могут варьироваться в зависимости от версии ОС, поэтому вы должны обнаруживать их при каждом запуске. Модуль win32pyutil содержит методы, которые загружают карту с указанием индекса в английский, но сохраняют ее, и, поскольку она не маленькая, если она вам нужна только один раз, это может привести к потере памяти. Мы используем следующее:
def _find_pdh_counter_localized_name(eng_names,machine_name=None):
'''
Create a map of english names to indexes. We then lookup the english
name in the map to get the localized name.
Shamefully lifted from win32pdhutil, only this one uses a transient map
instead of a persistent one.
Will throw KeyError if a name is asked for that is not in the list.
'''
import win32api, win32con
counter_reg_value = win32api.RegQueryValueEx(
win32con.HKEY_PERFORMANCE_DATA, "Counter 009"
)
counter_list = counter_reg_value[0]
eng_map={}
for i in range(0, len(counter_list) - 1, 2):
try:
counter_id = int(counter_list[i])
except ValueError:
continue
eng_map[counter_list[i+1].lower()] = counter_id
ret = []
for name in eng_names:
ret.append(win32pdh.LookupPerfNameByIndex(
machine_name, eng_map[name.lower()])
)
del eng_map
return tuple(ret)
Для построения имени счетчика:
names = _find_pdh_counter_localized_name(['processor','% processor time'])
counter_name = r'\%s(_Total)\%s' % names
, что дает желаемое значение. например, "\ Processore (_Total) \% Tempo Processore" на итальянском языке.