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 将上面的代码复制到终端中。 示例输出 ![]() ![]() 首先初始化 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 ) 让我们了解一下它的参数,如下所示 参数
CREATE_SUSPENDED 是一个延迟线程启动的选项。 结果以元组形式返回线程句柄和线程 ID。 3. CreateProcesswin32process.CreateProcess PyHANDLE, PyHANDLE, int, int = CreateProcess(appName, commandLine , processAttributes , threadAttributes , bInheritHandles , dwCreationFlags , newEnvironment , currentDirectory , startupinfo ) 创建一个新进程及其主线程。新创建的进程运行指定的可执行文件。 参数
4. CreateRemoteThreadwin32process.CreateRemoteThread PyHANDLE, int = CreateRemoteThread(hprocess, sa , stackSize , entryPoint , Parameter , flags ) 创建一个在另一个进程的虚拟地址空间中执行的线程。 参数
结果以元组形式返回线程句柄和线程 ID。 5. CreateProcessAsUserwin32process.CreateProcessAsUser 创建一个以指定用户为上下文的新进程。 PyHANDLE, PyHANDLE, int, int = CreateProcessAsUser(hToken, appName , commandLine , processAttributes , threadAttributes , bInheritHandles , dwCreationFlags , newEnvironment , currentDirectory , startupinfo ) 参数
因此,结果是一个 (hProcess, hThread, dwProcessId, dwThreadId) 的元组 6. GetCurrentProcesswin32process.GetCurrentProcess 获取活动进程的一个虚拟句柄。 int = GetCurrentProcess() 7. GetCurrentProcessIdwin32process.GetCurrentProcessId 显示调用进程的唯一进程标识。 int = GetCurrentProcessId() 8. GetProcessVersionwin32process.GetProcessVersion 显示执行特定进程所需的系统主版本号和次版本号。 int = GetProcessVersion(processId) 参数
9. GetCurrentProcessIdwin32process.GetCurrentProcessId 显示调用进程的唯一进程标识。 int = GetCurrentProcessId() 10. GetStartupInfowin32process.GetStartupInfo 显示在创建调用进程时提供的 STARTUPINFO 结构的内容。 PySTARTUPINFO = GetStartupInfo() 11. GetPriorityClasswin32process.GetPriorityClass int = GetPriorityClass(handle) 参数
12. GetExitCodeThreadwin32process.GetExitCodeThread int = GetExitCodeThread(handle) 参数
13. GetExitCodeProcesswin32process.GetExitCodeProcess int = GetExitCodeProcess(handle) 参数
14. GetWindowThreadProcessIdwin32process.GetWindowThreadProcessId 返回负责创建指定窗口的线程和进程的 ID。 int, int = GetWindowThreadProcessId(hwnd) 参数
因此,结果是一个 (threadId, processId) 的元组 15. SetThreadPrioritywin32process.SetThreadPriority SetThreadPriority(handle, nPriority) 参数
16. GetThreadPrioritywin32process.GetThreadPriority int = GetThreadPriority(handle) 参数
17. GetProcessPriorityBoostwin32process.GetProcessPriorityBoost 确定是否启用了进程的动态优先级调整。 bool = GetProcessPriorityBoost(Process) 参数
18. SetProcessPriorityBoostwin32process.SetProcessPriorityBoost 启用或禁用进程的动态优先级调整。 SetProcessPriorityBoost(Process, DisablePriorityBoost) 参数
19. GetThreadPriorityBoostwin32process.GetThreadPriorityBoost 确定是否为线程启用了动态优先级调整。 bool = GetThreadPriorityBoost(Thread) 参数
20. SetThreadPriorityBoostwin32process.SetThreadPriorityBoost 启用或禁用线程的动态优先级调整。 SetThreadPriorityBoost(Thread, DisablePriorityBoost) 参数
21. GetThreadIOPendingFlagwin32process.GetThreadIOPendingFlag 确定线程是否有任何未完成的 IO 请求。 bool = GetThreadIOPendingFlag(Thread) 参数
22. GetThreadTimeswin32process.GetThreadTimes 它返回线程的时间统计信息。 dict = GetThreadTimes(Thread) 参数
23. GetProcessIdint = GetProcessId(Process) 它返回一个进程句柄的 Pid。 参数
24. SetPriorityClasswin32process.SetPriorityClass SetPriorityClass(handle, dwPriorityClass) 参数
25. AttachThreadInputwin32process.AttachThreadInput 连接和断开两个线程的输入。 AttachThreadInput(idAttach, idAttachTo, Attach) 参数
26. SetThreadIdealProcessorwin32process.SetThreadIdealProcessor 语法 参数
返回类型 此方法返回 int 值 27. GetProcessAffinityMaskwin32process.GetProcessAffinityMask 语法 参数
返回类型 此方法返回一个元组(进程亲和性掩码,系统亲和性掩码)。 28. SetProcessAffinityMaskwin32process.SetProcessAffinityMask 语法 为指定进程设置处理器亲和性掩码。 参数
注意:某些平台没有此功能。29. SetThreadAffinityMaskwin32process.SetThreadAffinityMask 语法 参数
返回类型 此方法返回一个 int 值。 30. SuspendThreadwin32process.SuspendThread 语法 暂停指定的线程。 参数
返回值 返回值是线程之前的暂停计数 31. ResumeThreadwin32process.ResumeThread 语法 恢复指定的线程。当暂停计数递减到零时,线程的执行将恢复。 参数
返回值 返回值是线程之前的暂停计数 32. TerminateProcesswin32process.TerminateProcess 语法 参数
33. xitProcesswin32process.ExitProcess
参数
停止进程的最佳方法是使用 ExitProcess。此函数提供了一个干净的进程关闭过程。这包括联系每个关联的动态链接库 (DLL) 的入口点函数,并带有一个值,指示进程正在与 DLL 分离。如果一个进程通过调用 win32process::TerminateProcess 来终止,则与该进程关联的 DLL 不会被通知进程终止。 34. EnumProcesseswin32process.EnumProcesses 语法 为实际运行的活动提供进程 ID。 35. EnumProcessModuleswin32process.EnumProcessModules 语法 列出进程句柄已加载的模块 参数
36. EnumProcessModulesExwin32process.EnumProcessModulesEx 语法 列出进程已加载的 32 位或 64 位模块。 参数
37. GetModuleFileNameExwin32process.GetModuleFileNameEx 语法 参数
38. GetProcessMemoryInfowin32process.GetProcessMemoryInfo 语法 返回一个表示 PROCESS_MEMORY_COUNTERS 结构的字典作为进程内存统计信息。 参数
39. GetProcessTimeswin32process.GetProcessTimes 语法 使用进程句柄获取进程的时间统计信息。(UserTime 和 KernelTime 以 100 纳秒为单位) 参数
40. GetProcessIoCounterswin32process.GetProcessIoCounters 语法 进程的 I/O 统计信息以对应于 IO_COUNTERS 结构的字典形式返回。 参数
41. GetProcessWindowStationwin32process.GetProcessWindowStation 语法 返回调用进程的窗口站句柄。 42. GetProcessWorkingSetSizewin32process.GetProcessWorkingSetSize 语法 返回进程的最小和最大工作集大小。 参数
43. SetProcessWorkingSetSizewin32process.SetProcessWorkingSetSize 语法 设置进程的最小和最大工作集大小。 参数
注意:要完全换出该过程,请将最小值和最大值都设置为 -1。44. GetProcessShutdownParameterswin32process.GetProcessShutdownParameters 语法 显示进程当前的终止级别和触发器。 范围是 000-0FF. windows reserved, Last, 200-2FF Middle, First, 300-3FF, and Fourth, 400-4FF Windows reserves. 45. SetProcessShutdownParameterswin32process.SetProcessShutdownParameters 语法 设置进程的标志和终止优先级。 参数
范围是 000-0FF. 100-1FF Last, 200-2FF Middle, 300-3FF First, 400-4FF, and reserved by windows window reserved. 46. GetGuiResourceswin32process.GetGuiResources 语法 给出进程持有的 GDI 或用户对象句柄的数量。 参数
47. IsWow64Processwin32process.IsWow64Process 语法 识别指定的进程当前是否在 WOW64 下运行。 参数
让我们看看它的返回值。 如果操作系统不提供此函数,则返回值为 False(即, 永远不会抛出 NotImplemented 异常)。但是,一个 如果函数可用,通常会抛出 win32process.error 异常 但无效。 结论在本文中,我们讨论了 Python win32 进程。并且,我们还逐一讨论了不同类型的方法及其参数和返回值。 |
我们请求您订阅我们的新闻通讯以获取最新更新。