Python Win32 进程

2025年3月17日 | 阅读11分钟

在本文中,我们将讨论 Python win32 进程。我们还将逐一讨论它的方法。

基本上,Win32 进程是 Python 中的一个方法。通过这个模块可以访问扩展的 Win32 进程创建和管理功能。Create 方法创建进程对象(构造函数)。可以使用其他方法在对象上终止、暂停、恢复进程以及设置进程的优先级。

Windows Management Instrumentation (WMI; 以前称为 WBEM) 和 WMI 对 Windows 驱动程序模型的扩展是 Windows 2019/2016/2012/2008 和 Windows 10/7/XP 中可管理性的基础 (WDM)。

ActiveXperts Network Monitor 提供了基于 WMI 创建监视检查程序的能力。ActiveXperts 收集了超过一百个 WMI 示例。这些示例可以作为您自己创建新检查程序的起点。

本网站提供了许多 WMI 示例。

ActiveXperts Network Monitor 使用 Win32_Process WMI 类来监视您的服务器。

Win32_Process WMI 类代表了 Windows 操作系统上的一系列事件。这个类的一个后代或成员是一个序列,它涉及一个或多个处理器或解释器的交互、一些可执行代码以及一组输入,例如在 Windows 系统上运行的客户端程序。

现在问题来了,什么是 Python win32?

Python win32 和 Win32 应用程序编程接口 (API) 的功能可以通过使用 PyWin32 库(Windows 的扩展库)在 Python 中使用。

让我们简单介绍一下 win32api 模块

win32api 模块提供了多种用于控制进程的额外方法。这些方法使您能够执行启动新进程所需的许多常规步骤,但它们仍然未能提供最高级别的低级控制。

与之前解释的 os.system 函数相比,WinExec 函数为 GUI 程序做了各种调整。例如,不会创建控制台,并且该函数不会等到新进程完成。

该函数需要这两个输入

  • 要执行的命令
  • 或者,应用程序窗口的初始状态

让我们简单介绍一下 win32api.ShellExecute

此外,win32api 模块还提供了另一个用于启动新进程的有用功能。与启动随机进程相比,ShellExecute 函数的主要目的是打开文档。例如,您可以指示 ShellExecute “打开 MyDocument.doc”。Windows 会代表您选择启动哪个进程来打开 .doc 文件。这与在 Windows 资源管理器中单击(或双击)一个 .doc 文件所执行的操作相同。

正在运行的程序被称为进程(processed)。进程不一定需要用户手动运行;它也可能是操作系统生成的系统进程。任何在操作系统上运行的程序都必须首先生成一个独立的进程才能开始运行。在典型的操作系统安装中,大多数进程是后台程序和操作系统服务,用于维持硬件、软件和操作系统的良好工作状态。

本文将探讨几种不同的 Python 方法,用于获取 Windows 操作系统当前活动进程的列表。

为了获得期望的结果,我们首先将描述一种 Python 方法。然后我们将研究一个来自 Windows 命令处理器的命令来完成同样的事情。

pip install wmi

将上面的代码复制到终端中。

示例

输出

Python Win32 Process
Python Win32 Process

首先初始化 wmi 库的 WMI() 函数。这使我们能够访问其内部函数,如 WMI.Win32_Service、WMI.Win32_Process 和 WMI.Win32_Printjob,每个函数都旨在执行特定任务。为了获取系统活动进程的列表,我们将使用 WMI.Win32_Process 函数。之后,我们通过调用 WMI.Win32_Process() 函数遍历所有正在运行的进程,并将它们放入变量 process 中。然后使用相应的属性来获取进程的 ProcessID (pid) 和 ProcessName (name)。为了给输出添加填充并正确对齐,我们使用了 F-strings 进行输出。

现在让我们来看看 Win32process 模块的不同方法。

1. STARTUPINFO

在这个方法中,我们创建一个新的 STARTUPINFO 对象。

让我们了解如何创建它,如下所示

win32process.STARTUPINFO

PySTARTUPINFO = STARTUPINFO()

2. beginthreadex

在这个方法中,我们创建一个新线程。

让我们了解如何创建它,如下所示

win32process.beginthreadex

PyHANDLE, int = beginthreadex(sa, stackSize , entryPoint , args , flags )

让我们了解一下它的参数,如下所示

参数

  • sa: PySECURITY_ATTRIBUTES(安全属性,或 None)
  • stackSize : int(新线程的堆栈大小,或 0 表示默认大小。)
  • entryPoint : function(它是一个线程函数)
  • args : tuple
  • flags : int

CREATE_SUSPENDED 是一个延迟线程启动的选项。

结果以元组形式返回线程句柄和线程 ID。

3. CreateProcess

win32process.CreateProcess PyHANDLE, PyHANDLE, int, int = CreateProcess(appName, commandLine , processAttributes , threadAttributes , bInheritHandles , dwCreationFlags , newEnvironment , currentDirectory , startupinfo ) 创建一个新进程及其主线程。新创建的进程运行指定的可执行文件。

参数

  • appName: string(可执行模块的名称,或 None)
  • Commandline: string(命令行参数,或 Nothing)
  • processAttributes: PySECURITY_ATTRIBUTES(进程安全属性,或 None)
  • threadAttributes: PySECURITY_ATTRIBUTES(线程安全方面,或 None)
  • bInheritHandles: int
  • dwCreationFlags: int

4. CreateRemoteThread

win32process.CreateRemoteThread PyHANDLE, int = CreateRemoteThread(hprocess, sa , stackSize , entryPoint , Parameter , flags ) 创建一个在另一个进程的虚拟地址空间中执行的线程。

参数

  • hprocess : PyHANDLE(远程进程的句柄)
  • sa : PySECURITY_ATTRIBUTES(安全特性,或 None)
  • stackSize : int(新线程的堆栈大小,或 0 表示默认大小。)
  • entryPoint : function(线程函数的地址。)
  • Parameter : int(一个 void 指针,作为传递给函数的参数)
  • flags : int

结果以元组形式返回线程句柄和线程 ID。

5. CreateProcessAsUser

win32process.CreateProcessAsUser 创建一个以指定用户为上下文的新进程。

PyHANDLE, PyHANDLE, int, int = CreateProcessAsUser(hToken, appName , commandLine , processAttributes , threadAttributes , bInheritHandles , dwCreationFlags , newEnvironment , currentDirectory , startupinfo )

参数

  • hToken: PyHANDLE(表示当前登录用户的令牌句柄)
  • appName: string(可执行模块的名称,或 None)
  • commandLine: string(命令行参数,或 Nothing)
  • processAttributes: PySECURITY_ATTRIBUTES(进程安全属性,或 None)
  • threadAttributes: PySECURITY_ATTRIBUTES(线程安全方面,或 None)
  • bInheritHandles: int(继承句柄标志)
  • dwCreationFlags: int(创建标志)
  • newEnvironment: None(一个字符串或 Unicode 对定义的字典,用于指定进程环境,或 None 表示使用默认环境。)
  • currentDirectory: string(当前目录的名称,或 None)
  • startupinfo: PySTARTUPINFO(一个 STARTUPINFO 对象,描述新进程主窗口的外观。)

因此,结果是一个 (hProcess, hThread, dwProcessId, dwThreadId) 的元组

6. GetCurrentProcess

win32process.GetCurrentProcess 获取活动进程的一个虚拟句柄。

int = GetCurrentProcess()

7. GetCurrentProcessId

win32process.GetCurrentProcessId 显示调用进程的唯一进程标识。

int = GetCurrentProcessId()

8. GetProcessVersion

win32process.GetProcessVersion 显示执行特定进程所需的系统主版本号和次版本号。

int = GetProcessVersion(processId)

参数

  • processId: int(所需进程的标识。)

9. GetCurrentProcessId

win32process.GetCurrentProcessId 显示调用进程的唯一进程标识。

int = GetCurrentProcessId()

10. GetStartupInfo

win32process.GetStartupInfo 显示在创建调用进程时提供的 STARTUPINFO 结构的内容。

PySTARTUPINFO = GetStartupInfo()

11. GetPriorityClass

win32process.GetPriorityClass

int = GetPriorityClass(handle)

参数

  • handle: PyHANDLE(线程的句柄)

12. GetExitCodeThread

win32process.GetExitCodeThread

int = GetExitCodeThread(handle)

参数

  • handle: PyHANDLE(线程的句柄)

13. GetExitCodeProcess

win32process.GetExitCodeProcess

int = GetExitCodeProcess(handle)

参数

  • handle: PyHANDLE(线程的句柄)

14. GetWindowThreadProcessId

win32process.GetWindowThreadProcessId 返回负责创建指定窗口的线程和进程的 ID。

int, int = GetWindowThreadProcessId(hwnd)

参数

  • hwnd: int(此参数处理窗口)

因此,结果是一个 (threadId, processId) 的元组

15. SetThreadPriority

win32process.SetThreadPriority

SetThreadPriority(handle, nPriority)

参数

  • handle: PyHANDLE(此参数处理线程)
  • nPriority: int(此参数是线程的优先级级别)

16. GetThreadPriority

win32process.GetThreadPriority

int = GetThreadPriority(handle)

参数

  • handle: PyHANDLE(此参数处理线程)

17. GetProcessPriorityBoost

win32process.GetProcessPriorityBoost 确定是否启用了进程的动态优先级调整。

bool = GetProcessPriorityBoost(Process)

参数

  • Process: PyHANDLE(此参数是进程的句柄)

18. SetProcessPriorityBoost

win32process.SetProcessPriorityBoost 启用或禁用进程的动态优先级调整。

SetProcessPriorityBoost(Process, DisablePriorityBoost)

参数

  • Process: PyHANDLE(此参数处理一个进程)
  • DisablePriorityBoost: boolean(此参数指示 True 表示禁用,False 表示启用)

19. GetThreadPriorityBoost

win32process.GetThreadPriorityBoost

确定是否为线程启用了动态优先级调整。

bool = GetThreadPriorityBoost(Thread)

参数

  • Thread: PyHANDLE(此参数是线程的句柄)

20. SetThreadPriorityBoost

win32process.SetThreadPriorityBoost 启用或禁用线程的动态优先级调整。

SetThreadPriorityBoost(Thread, DisablePriorityBoost)

参数

  • Thread: PyHANDLE(此参数是线程的句柄)
  • DisablePriorityBoost: boolean((此参数指示 True 表示禁用,False 表示启用))

21. GetThreadIOPendingFlag

win32process.GetThreadIOPendingFlag 确定线程是否有任何未完成的 IO 请求。

bool = GetThreadIOPendingFlag(Thread)

参数

  • Thread: PyHANDLE(此参数是线程的句柄)

22. GetThreadTimes

win32process.GetThreadTimes

它返回线程的时间统计信息。

dict = GetThreadTimes(Thread)

参数

  • Thread: PyHANDLE(此参数是线程的句柄)

23. GetProcessId

int = GetProcessId(Process)

它返回一个进程句柄的 Pid。

参数

  • Process: PyHANDLE(此参数是线程的句柄)

24. SetPriorityClass

win32process.SetPriorityClass

SetPriorityClass(handle, dwPriorityClass)

参数

  • handle: PyHANDLE(此参数是进程的句柄)
  • dwPriorityClass: int(此参数给出优先级类别值)

25. AttachThreadInput

win32process.AttachThreadInput 连接和断开两个线程的输入。

AttachThreadInput(idAttach, idAttachTo, Attach)

参数

  • idAttach: int(此参数显示线程的 ID)
  • idAttachTo: int(此参数显示线程的 ID)
  • Attach: bool(确定线程应连接还是断开。)

26. SetThreadIdealProcessor

win32process.SetThreadIdealProcessor

语法

参数

  • handle: PyHANDLE(感兴趣的线程的句柄)
  • dwIdealProcessor: int(理想的处理器编号)

返回类型

此方法返回 int 值

27. GetProcessAffinityMask

win32process.GetProcessAffinityMask

语法

参数

  • hProcess: PyHANDLE(感兴趣的进程的句柄)

返回类型

此方法返回一个元组(进程亲和性掩码,系统亲和性掩码)。

28. SetProcessAffinityMask

win32process.SetProcessAffinityMask

语法

为指定进程设置处理器亲和性掩码。

参数

  • hProcess: PyHANDLE(感兴趣的进程的句柄)
  • mask: int(处理器亲和性掩码)

注意:某些平台没有此功能。

29. SetThreadAffinityMask

win32process.SetThreadAffinityMask

语法

参数

  • hThread: PyHANDLE(感兴趣的线程的句柄)
  • ThreadAffinityMask: int(处理器亲和性掩码)

返回类型

此方法返回一个 int 值。

30. SuspendThread

win32process.SuspendThread

语法

暂停指定的线程。

参数

  • handle: PyHANDLE(线程的句柄)

返回值

返回值是线程之前的暂停计数

31. ResumeThread

win32process.ResumeThread

语法

恢复指定的线程。当暂停计数递减到零时,线程的执行将恢复。

参数

  • handle: PyHANDLE(线程的句柄)

返回值

返回值是线程之前的暂停计数

32. TerminateProcess

win32process.TerminateProcess

语法

参数

  • handle: PyHANDLE(进程的句柄)
  • exitCode: int(进程的退出代码)

33. xitProcess

win32process.ExitProcess

  • ExitProcess: 进程及其所有线程的结束

参数

  • exitCode: int(为进程提供退出代码信息,以及由于此调用而终止的所有线程。)

停止进程的最佳方法是使用 ExitProcess。此函数提供了一个干净的进程关闭过程。这包括联系每个关联的动态链接库 (DLL) 的入口点函数,并带有一个值,指示进程正在与 DLL 分离。如果一个进程通过调用 win32process::TerminateProcess 来终止,则与该进程关联的 DLL 不会被通知进程终止。

34. EnumProcesses

win32process.EnumProcesses

语法

为实际运行的活动提供进程 ID。

35. EnumProcessModules

win32process.EnumProcessModules

语法

列出进程句柄已加载的模块

参数

  • hProcess: PyHANDLE(由 OpenProcess 返回的进程句柄)

36. EnumProcessModulesEx

win32process.EnumProcessModulesEx

语法

列出进程已加载的 32 位或 64 位模块。

参数

  • hProcess : PyHANDLE(由 OpenProcess 返回的进程句柄)FilterFlag=LIST_MODULES_DEFAULT : int(选择是返回 32 位还是 64 位模块。)需要 Windows Vista 或更高版本。

37. GetModuleFileNameEx

win32process.GetModuleFileNameEx

语法

参数

  • hProcess: PyHANDLE(由 OpenProcess 返回的进程句柄)
  • hModule: PyHANDLE(此参数处理模块)

38. GetProcessMemoryInfo

win32process.GetProcessMemoryInfo

语法

返回一个表示 PROCESS_MEMORY_COUNTERS 结构的字典作为进程内存统计信息。

参数

  • hProcess: PyHANDLE(由 OpenProcess 返回的进程句柄)

39. GetProcessTimes

win32process.GetProcessTimes

语法

使用进程句柄获取进程的时间统计信息。(UserTime 和 KernelTime 以 100 纳秒为单位)

参数

  • hProcess: PyHANDLE(由 OpenProcess 返回的进程句柄)

40. GetProcessIoCounters

win32process.GetProcessIoCounters

语法

进程的 I/O 统计信息以对应于 IO_COUNTERS 结构的字典形式返回。

参数

  • hProcess: PyHANDLE(由 OpenProcess 返回的进程句柄)

41. GetProcessWindowStation

win32process.GetProcessWindowStation

语法

返回调用进程的窗口站句柄。

42. GetProcessWorkingSetSize

win32process.GetProcessWorkingSetSize

语法

返回进程的最小和最大工作集大小。

参数

  • hProcess: PyHANDLE(由 win32api::OpenProcess 返回的进程句柄)

43. SetProcessWorkingSetSize

win32process.SetProcessWorkingSetSize

语法

设置进程的最小和最大工作集大小。

参数

  • hProcess : PyHANDLE(由 OpenProcess 返回的进程句柄)
  • MinimumWorkingSetSize : int(保持在物理内存中的最小字节数)
  • MaximumWorkingSetSize : int(保持在物理内存中的最大字节数)

注意:要完全换出该过程,请将最小值和最大值都设置为 -1。

44. GetProcessShutdownParameters

win32process.GetProcessShutdownParameters

语法

显示进程当前的终止级别和触发器。

范围是 000-0FF. windows reserved, Last, 200-2FF Middle, First, 300-3FF, and Fourth, 400-4FF Windows reserves.

45. SetProcessShutdownParameters

win32process.SetProcessShutdownParameters

语法

设置进程的标志和终止优先级。

参数

  • Level: int(此参数显示优先级越高越早)
  • Flags: int(此参数显示目前只有 SHUTDOWN NORETRY 有效)。

范围是 000-0FF. 100-1FF Last, 200-2FF Middle, 300-3FF First, 400-4FF, and reserved by windows window reserved.

46. GetGuiResources

win32process.GetGuiResources

语法

给出进程持有的 GDI 或用户对象句柄的数量。

参数

  • Process: PyHANDLE(此参数是 Win32api::OpenProcess 返回的进程句柄)
  • Flags: int(此参数显示 GR USEROBJECTS 或 GR GDIOBJECTS(来自 win32con))

47. IsWow64Process

win32process.IsWow64Process

语法

识别指定的进程当前是否在 WOW64 下运行。

参数

  • Process=None: PyHANDLE(由 win32api::OpenProcess, win32api::GetCurrentProcess 等返回的进程句柄;如果给定 None(默认值),将使用当前进程句柄。)

让我们看看它的返回值。

如果操作系统不提供此函数,则返回值为 False(即,

永远不会抛出 NotImplemented 异常)。但是,一个

如果函数可用,通常会抛出 win32process.error 异常

但无效。

结论

在本文中,我们讨论了 Python win32 进程。并且,我们还逐一讨论了不同类型的方法及其参数和返回值。