首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

求python枚举windows 操作系统进程的源代码,该怎么解决

2013-04-26 
求python枚举windows 操作系统进程的源代码不要通过tasklist的。我要的是通过windows api调用来实现的。由于

求python枚举windows 操作系统进程的源代码
不要通过tasklist的。
我要的是通过windows api调用来实现的。
由于我的代码在ProcessFirst32这个函数一直返回FALSE,之前的结构体PROCESSENTRY32的dwSize都已经设置过了。但是还是一直返回FALSE.
经过我多天的苦闷不爽的探索,决定将这个问题提出来,望喜欢python的朋友能帮我这个大忙。

注意啊:
1.不要tasklist的。
2.求调用windows api来实现的。

有问题 可以电子邮件联系或者就在csdn论坛联系也行。
我的email:sc_email_personal@163.com


[解决办法]
下面代码是从网上抄录下来的,32位python27版本下运行结果正常...

import ctypes

CreateToolhelp32Snapshot = ctypes.windll.kernel32.CreateToolhelp32Snapshot
Process32First = ctypes.windll.kernel32.Process32First
Process32Next = ctypes.windll.kernel32.Process32Next
CloseHandle = ctypes.windll.kernel32.CloseHandle

TH32CS_SNAPPROCESS = 0x00000002
class PROCESSENTRY32(ctypes.Structure):
     _fields_ = [("dwSize", ctypes.c_ulong),
                 ("cntUsage", ctypes.c_ulong),
                 ("th32ProcessID", ctypes.c_ulong),
                 ("th32DefaultHeapID", ctypes.c_ulong),
                 ("th32ModuleID", ctypes.c_ulong),
                 ("cntThreads", ctypes.c_ulong),
                 ("th32ParentProcessID", ctypes.c_ulong),
                 ("pcPriClassBase", ctypes.c_ulong),
                 ("dwFlags", ctypes.c_ulong),
                 ("szExeFile", ctypes.c_char * 260)]
                 

def get_process_info():
     h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
     pe = PROCESSENTRY32()
     pe.dwSize = ctypes.sizeof(PROCESSENTRY32)
     if Process32First(h, ctypes.byref(pe)):
        while True:
            yield pe.th32ProcessID, pe.szExeFile
            if not Process32Next(h,  ctypes.byref(pe)):
                break
     CloseHandle(h)
     
if __name__ == '__main__':
    for pid, name in get_process_info():
        print "%4d: %s" % (pid, name)

热点排行