+ -
当前位置:首页 → 问答吧 → python的高手帮忙看看这段代码的问题

python的高手帮忙看看这段代码的问题

时间:2011-01-06

来源:互联网

from ctypes import *
#PSAPI.DLL
psapi = windll.psapi
#Kernel32.DLL
kernel = windll.kernel32
   
  #PSAPI.DLL
  psapi = windll.psapi
  #Kernel32.DLL
  kernel = windll.kernel32

  def EnumProcesses(pName):
  arr = c_ulong * 256
  lpidProcess= arr()
  cb = sizeof(lpidProcess)
  cbNeeded = c_ulong()
  hModule = c_ulong()
  count = c_ulong()
  modname = c_buffer(30)
  PROCESS_QUERY_INFORMATION = 0x0400
  PROCESS_VM_READ = 0x0010
   
  #Call Enumprocesses to get hold of process id's
  psapi.EnumProcesses(byref(lpidProcess),
  cb,
  byref(cbNeeded))
   
  #Number of processes returned
  nReturned = cbNeeded.value/sizeof(c_ulong())
   
  pidProcess = [i for i in lpidProcess][:nReturned]
   
  for pid in pidProcess:
   
  #Get handle to the process based on PID
  hProcess = kernel.OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
  False, pid)
   
  needID=pid
  if hProcess:
  psapi.EnumProcessModules(hProcess, byref(hModule), sizeof(hModule), byref(count))
  psapi.GetModuleBaseNameA(hProcess, hModule.value, modname, sizeof(modname))
  procName="".join([ i for i in modname if i != '\x00'])
  #print procName
  ePID=needID
  #print ePID
   
   
   
  #-- Clean up
  for i in range(modname._length_):
  modname[i]='\x00'
   
  kernel.CloseHandle(hProcess)
   
  if cmp(procName,pName)==0:
  print("----------",procName,ePID)
  return ePID
   
   
  def killPid(PID):
  kernel32 = windll.LoadLibrary('kernel32.dll')
  handle = kernel32.OpenProcess(1, False,PID)
  if handle:
  kernel32.TerminateProcess(handle,0)
  else:
  print('can\'t open process %s' % PID)
   
  pida=int(EnumProcesses("cmd.exe"))
  print(pida)
  killPid(pida)

作者: kemi56   发布时间: 2011-01-06

反复强调过多次了,版主应该发个帖子专门置顶了。
1. 代码用标签格式化过再贴出来。保证缩进是正确的。
2. 任何情况下,把问题症状说清楚。抛错了把抛错信息贴出来;结果和预期不一样把实际的结果和预期的结果说清楚。我们又不是编译器,别一段代码贴出来就让人检错。
3. 同样,我们又不是编译器,用自然语言描述你的代码功能。否则别人怎么知道某段代码是你写错了还是故意为之?靠猜吗?

作者: iambic   发布时间: 2011-01-06