Python win32pdh.EnumObjectItems调用错误
我正在Windows7中运行Python 2.7,安装了Python win32pdh.EnumObjectItems调用错误,python,pywin32,Python,Pywin32,我正在Windows7中运行Python 2.7,安装了pywin32-216-win32-py2.7。我正在运行以下代码,它在一台计算机上运行正常,但在另一台计算机上输出错误(都是Win7、Py2.7、同一个pywin库) 错误消息: GetProcessID中第9行的文件“C:\Energy\Support Sheets\Kill Excel.py” items,instances=win32pdh.EnumObjectItems(无,无,对象,win32pdh.PERF_DETAIL_向导
pywin32-216-win32-py2.7
。我正在运行以下代码,它在一台计算机上运行正常,但在另一台计算机上输出错误(都是Win7、Py2.7、同一个pywin库)
错误消息:
GetProcessID中第9行的文件“C:\Energy\Support Sheets\Kill Excel.py”
items,instances=win32pdh.EnumObjectItems(无,无,对象,win32pdh.PERF_DETAIL_向导)
错误:(-1073738824,“缓冲区大小的EnumObjectItems”,“在计算机上找不到指定的对象”。)
完整代码:
import win32api, win32con
import win32pdh
import os
import signal
import time
def GetProcessID( name ) :
object = "Process"
items, instances = win32pdh.EnumObjectItems( None, None, object, win32pdh.PERF_DETAIL_WIZARD )
val = None
if name in instances :
hq = win32pdh.OpenQuery()
hcs = [ ]
item = "ID Process"
path = win32pdh.MakeCounterPath( ( None, object, name, None, 0, item ) )
hcs.append( win32pdh.AddCounter( hq, path ) )
win32pdh.CollectQueryData( hq )
time.sleep( 0.01 )
win32pdh.CollectQueryData( hq )
for hc in hcs:
type, val = win32pdh.GetFormattedCounterValue( hc, win32pdh.PDH_FMT_LONG )
win32pdh.RemoveCounter( hc )
win32pdh.CloseQuery( hq )
return val
def Kill_Process_pid(pid):
handle = win32api.OpenProcess(win32con.PROCESS_TERMINATE, 0, pid) #get process handle
win32api.TerminateProcess(handle, -1) #kill by handle
win32api.CloseHandle(handle) #close api
def Kill_Process(name):
pid = GetProcessID(name)
if pid:
try:
Kill_Process_pid(pid)
return True
except:
pass
else:
return False
# MAIN FUNCTION
print 'Killing Excel instances...',
while Kill_Process('EXCEL'):
time.sleep(0.2)
print 'Done!'
当进程性能计数器被禁用时,我也遇到了同样的问题——显然这可能会发生。有关于如何重新启用计数器的说明。如果无法在计算机上安装软件,可以运行regedit并搜索名为“禁用性能计数器”的键,然后将其删除
之后,您可能需要以管理员身份在cmd shell上运行“lodctr/R”以重新加载性能计数器,然后它才能工作。您的语言环境是英语吗?否则,对象名称的拼写可能会有所不同。