python如何获取电脑打开了那些软件

python如何获取电脑打开了那些软件

Python获取电脑打开的软件的方法包括:使用第三方库psutil、调用操作系统命令、使用Windows API和基于窗口标题的检测。其中,psutil是最常用的方法,因为它是跨平台的,易于使用且功能强大。下面详细介绍如何在Python中获取电脑当前打开的软件。

一、PSUTIL库的使用

安装和导入psutil

psutil 是一个跨平台库,旨在获取系统信息和进程信息。我们首先需要安装这个库:

pip install psutil

安装完成后,我们可以通过以下代码导入并使用它来获取当前运行的所有进程:

import psutil

获取所有进程的信息

for proc in psutil.process_iter(['pid', 'name']):

try:

print(f"PID: {proc.info['pid']} - Name: {proc.info['name']}")

except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):

pass

获取详细的进程信息

除了获取进程的名称和PID,psutil 还可以获取更多详细的信息,比如启动时间、CPU使用率、内存使用情况等:

for proc in psutil.process_iter(['pid', 'name', 'username', 'create_time', 'cpu_percent', 'memory_info']):

try:

info = proc.info

print(f"PID: {info['pid']}, Name: {info['name']}, User: {info['username']}, "

f"Started at: {info['create_time']}, CPU: {info['cpu_percent']}%, "

f"Memory: {info['memory_info'].rss / (1024 * 1024):.2f} MB")

except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):

pass

二、调用操作系统命令

Windows平台

在Windows平台上,我们可以使用 subprocess 模块来调用操作系统的 tasklist 命令来获取正在运行的进程:

import subprocess

调用 tasklist 命令

output = subprocess.check_output("tasklist", shell=True).decode()

输出结果

print(output)

macOS和Linux平台

在macOS和Linux平台上,可以使用 ps 命令来获取进程列表:

import subprocess

调用 ps 命令

output = subprocess.check_output(["ps", "-e"]).decode()

输出结果

print(output)

三、使用Windows API

Windows API 提供了更多强大的功能,可以更详细地获取和控制进程信息。我们可以使用 ctypes 模块来调用这些API。

获取正在运行的进程列表

以下是一个示例,展示如何使用Windows API获取正在运行的进程列表:

import ctypes

import ctypes.wintypes

定义需要的结构和常量

TH32CS_SNAPPROCESS = 0x00000002

class PROCESSENTRY32(ctypes.Structure):

_fields_ = [("dwSize", ctypes.wintypes.DWORD),

("cntUsage", ctypes.wintypes.DWORD),

("th32ProcessID", ctypes.wintypes.DWORD),

("th32DefaultHeapID", ctypes.POINTER(ctypes.wintypes.ULONG)),

("th32ModuleID", ctypes.wintypes.DWORD),

("cntThreads", ctypes.wintypes.DWORD),

("th32ParentProcessID", ctypes.wintypes.DWORD),

("pcPriClassBase", ctypes.c_long),

("dwFlags", ctypes.wintypes.DWORD),

("szExeFile", ctypes.c_char * 260)]

加载库

kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)

CreateToolhelp32Snapshot = kernel32.CreateToolhelp32Snapshot

Process32First = kernel32.Process32First

Process32Next = kernel32.Process32Next

获取进程快照

hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)

pe32 = PROCESSENTRY32()

pe32.dwSize = ctypes.sizeof(PROCESSENTRY32)

遍历进程列表

if Process32First(hProcessSnap, ctypes.byref(pe32)):

while True:

print(f"PID: {pe32.th32ProcessID}, Name: {pe32.szExeFile.decode()}")

if not Process32Next(hProcessSnap, ctypes.byref(pe32)):

break

四、基于窗口标题的检测

有些情况下,我们可能只对有窗口的应用程序感兴趣。此时,我们可以使用 pygetwindow 库来获取当前打开的窗口:

安装和使用pygetwindow

首先安装 pygetwindow

pip install pygetwindow

然后使用它来获取当前打开的窗口:

import pygetwindow as gw

获取所有窗口的标题

windows = gw.getAllTitles()

输出窗口标题

for window in windows:

print(window)

结论

通过以上方法,我们可以在Python中轻松获取当前电脑上打开的软件和进程。psutil 是一个非常强大的库,适用于大多数情况,而调用操作系统命令和使用Windows API则提供了更多的灵活性和控制。最后,基于窗口标题的检测方法非常适合只对有窗口的应用程序进行操作的场景。无论选择哪种方法,都可以根据具体需求进行定制和扩展。

相关问答FAQs:

1. 电脑上的Python如何获取当前打开的软件列表?

要获取电脑上当前打开的软件列表,可以使用Python中的psutil库。通过psutil.process_iter()函数可以获取当前正在运行的进程列表,然后通过遍历进程列表获取每个进程的名称。

import psutil

def get_running_apps():
    apps = []
    for proc in psutil.process_iter():
        try:
            app_name = proc.name()
            apps.append(app_name)
        except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
            pass
    return apps

running_apps = get_running_apps()
print(running_apps)

2. 如何判断某个软件是否在电脑上打开?

要判断某个软件是否在电脑上打开,可以在获取当前打开的软件列表后,使用Python的in关键字进行判断。

import psutil

def is_app_running(app_name):
    for proc in psutil.process_iter():
        try:
            if app_name.lower() in proc.name().lower():
                return True
        except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
            pass
    return False

app_name = "Chrome"
if is_app_running(app_name):
    print(f"{app_name} is running.")
else:
    print(f"{app_name} is not running.")

3. 如何获取电脑上每个打开软件的详细信息?

要获取电脑上每个打开软件的详细信息,可以使用psutil库中的pid属性获取进程的ID,然后使用psutil.Process(pid)来获取进程的详细信息。

import psutil

def get_running_apps_info():
    apps_info = []
    for proc in psutil.process_iter():
        try:
            app_info = {}
            app_info['name'] = proc.name()
            app_info['pid'] = proc.pid
            app_info['status'] = proc.status()
            app_info['cpu_usage'] = proc.cpu_percent()
            app_info['memory_usage'] = proc.memory_percent()
            apps_info.append(app_info)
        except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
            pass
    return apps_info

running_apps_info = get_running_apps_info()
for app_info in running_apps_info:
    print(app_info)

以上是关于如何获取电脑上打开的软件的几个常见问题的解答,希望对您有帮助!

文章包含AI辅助创作,作者:Edit1,如若转载,请注明出处:https://docs.pingcode.com/baike/1274938

(0)
Edit1Edit1
免费注册
电话联系

4008001024

微信咨询
微信咨询
返回顶部