## page was renamed from MicroProj/2008-04-08 ##language:zh #pragma section-numbers off ##含有章节索引导航的 ZPyUG 文章通用模板 <<TableOfContents>> ## 默许导航,请保留 <<Include(ZPyUGnav)>> = 枚举M$当前进程和端口 = {{{Sean Lu <voidclass@gmail.com> reply-to python-cn@googlegroups.com, to python-cn@googlegroups.com, date Tue, Apr 8, 2008 at 9:21 AM subject [CPyUG:46317] Re: 有没有什么模块可以枚举windows当前的进程和当前开了哪些端口? }}} ##startInc {{{#!python """ Enumerates active processes as seen under windows Task Manager on Win NT/2k/XP using PSAPI.dll (new api for processes) and using ctypes.Use it as you please. Based on information from http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q175030&ID=KB;EN-US;Q175030 By Eric Koome email ekoome@yahoo.com license GPL """ from ctypes import * #PSAPI.DLL psapi = windll.psapi #Kernel32.DLL kernel = windll.kernel32 def EnumProcesses(): 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) if hProcess: psapi.EnumProcessModules(hProcess, byref(hModule),sizeof(hModule), byref(count)) psapi.GetModuleBaseNameA(hProcess, hModule.value, modname,sizeof(modname)) print "".join([ i for i in modname if i != '\x00']) #-- Clean up for i in range(modname._length_): modname[i]='\x00' kernel.CloseHandle(hProcess) if __name__ == '__main__': EnumProcesses() }}} ##endInc ---- '''反馈''' 创建 by -- ZoomQuiet [<<DateTime(2008-04-08T01:28:09Z)>>]