Windows下使用Python调用API获取进程列表

作者:佚名 上传时间:2023-04-25 运行软件:PyCharm 2021.1.2 软件版本:Python 3.8.5 版权申诉

介绍使用Python编写程序,在Windows操作系统下调用API函数获取进程列表。程序使用了ctypes库调用kernel32.dll中的CreateToolhelp32Snapshot和Process32First/Process32Next函数。

import ctypes
import struct
from collections import namedtuple

# 定义PROCESSENTRY32结构体
class PROCESSENTRY32(ctypes.Structure):
    _fields_ = [("dwSize", ctypes.c_uint32),
                ("cntUsage", ctypes.c_uint32),
                ("th32ProcessID", ctypes.c_uint32),
                ("th32DefaultHeapID", ctypes.POINTER(ctypes.c_uint32)),
                ("th32ModuleID", ctypes.c_uint32),
                ("cntThreads", ctypes.c_uint32),
                ("th32ParentProcessID", ctypes.c_uint32),
                ("pcPriClassBase", ctypes.c_long),
                ("dwFlags", ctypes.c_uint32),
                ("szExeFile", ctypes.c_char * 260)]

# 获取进程列表函数
def get_process_list():
    # 加载kernel32.dll
    kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)

    # 创建进程快照(TH32CS_SNAPPROCESS表示只获取进程信息)
    hProcessSnap = kernel32.CreateToolhelp32Snapshot(0x02, 0)
    if hProcessSnap == -1:
        raise ValueError(ctypes.WinError(ctypes.get_last_error()))

    # 定义结构体大小
    pe32 = PROCESSENTRY32()
    pe32.dwSize = ctypes.sizeof(PROCESSENTRY32)

    # 获取第一个进程
    ret = kernel32.Process32First(hProcessSnap, ctypes.byref(pe32))
    if not ret:
        raise ValueError(ctypes.WinError(ctypes.get_last_error()))

    # 循环获取进程列表
    all_processes = []
    while ret:
        process = {
            "pid": pe32.th32ProcessID,
            "ppid": pe32.th32ParentProcessID,
            "name": pe32.szExeFile.decode('gbk'),
            "priority": pe32.pcPriClassBase
        }
        all_processes.append(process)
        ret = kernel32.Process32Next(hProcessSnap, ctypes.byref(pe32))

    # 关闭句柄
    kernel32.CloseHandle(hProcessSnap)

    return all_processes

if __name__ == '__main__':
    # 调用获取进程列表函数
    processes = get_process_list()

    # 打印进程信息
    print("进程列表:")
    for process in processes:
        print("进程名:%s,进程ID:%s,父进程ID:%s,优先级:%s" % 
              (process["name"], process["pid"], process["ppid"], process["priority"]))

免责申明:文章和图片全部来源于公开网络,如有侵权,请通知删除 server@dude6.com

用户评论
相关推荐
Windows使用Python调用API获取进程列表
介绍使用Python编写程序,在Windows操作系统下调用API函数获取进程列表。程序使用了ctypes库调用kernel32.dll中的CreateToolhelp32Snapshot和Proce
Python 3.8.5
PyCharm 2021.1.2
2023-04-25 02:09
使用Python调用Windows API获取进程相关信息
介绍如何使用Python调用Windows API中的一些函数获取进程PID、路径、命令行等相关信息的实现方法。'''import ctypesfrom ctypes import wintyp
Python 3.8.5
PyCharm 2020.2
2023-05-28 19:05
macOS使用Python调用系统API获取文件列表
此示例代码演示如何使用Python在macOS上调用系统API来获取特定文件夹中的文件列表,并打印文件名和路径信息。import os# 获取当前用户桌面路径desktop_path = os
macOS 10.15及以上
Python 3.x
2023-11-24 01:22
c++获取进程信息列表进程调用的dll列表
主要介绍了c++获取进程信息列表和进程所调用的dll列表,大家参考使用吧
PDF
169KB
2020-10-16 21:39
获取进程列表
获取计算机当前正在运行的进程及其调用的模块
RAR
0B
2018-12-07 09:35
Python调用windowsDLL
在python中某些时候需要C做效率上的补充,在实际应用中,需要做部分数据的交互。使用python中的ctypes模块可以很方便的调用windows的dll(也包括linux下的so等文件),下面将详
DOCX
0B
2019-05-04 22:31
获取系统进程列表
提供一个获取系统正在运行进程列表。找到对应的进程名称后可以调用API函数对该进程进行操作。这里只提供一个列表
RAR
0B
2019-07-11 04:30
使用JNA调用WINDOWS API
一直以为调用本地链接库函数的时候一定要借助JNI或者SWT来实现,一日中无意看到JNA,发现它也可以实现这类调用
JAR
0B
2019-09-17 23:30
Windows使用Python调用网页API示例代码
本示例代码演示了如何在Windows环境下使用Python语言调用网页API,将API返回的数据打印输出,并进行简单处理。示例中使用了Python自带的“urllib”和“json”模块进行API请求
Python 3.9.0
Python
2023-03-18 01:23
使用PythonWindows获取进程信息的方法
介绍如何使用Python在Windows下获取进程的PID、名称、CPU占用率等信息。使用了win32api和psutil库,通过调用系统接口获取信息。import win32apiimport
Python 3.7.9
2023-03-19 13:33