智能打开 Windows 上已安装的应用

Open installed apps on Windows intelligently

我正在编写一个语音助手来自动化我的电脑 运行 Windows 11,我想使用语音命令打开应用程序,我不想对每个已安装应用程序的 .exe路径。有什么方法可以获取应用程序名称及其 .exe 路径的字典。我目前可以获取 运行 个应用程序并使用以下方法关闭它们:

def close_app(app_name):
    running_apps=psutil.process_iter(['pid','name'])
    found=False
    for app in running_apps:
        sys_app=app.info.get('name').split('.')[0].lower()

        if sys_app in app_name.split() or app_name in sys_app:
            pid=app.info.get('pid')
            
            try:
                app_pid = psutil.Process(pid)
                app_pid.terminate()
                found=True
            except: pass
            
        else: pass
    if not found:
        print(app_name + " is not running")
    else:
        print('Closed ' + app_name)

这可以通过以下代码完成:

    import os

    def searchfiles(extension, folder):
        with open(extension[1:] + "file.txt", "w", encoding="utf-8") as filewrite:
            for r, d, f in os.walk(folder):
                for file in f:
                    if file.endswith(extension):
                        filewrite.write(f"{r + file}\n")

    searchfiles('.exe', 'H:\')

灵感来自:https://pythonprogramming.altervista.org/find-all-the-files-on-your-computer/

在 Windows PowerShell there is a Get-Command utility. Finding Windows executables using Get-Command is described nicely in this issue 下。本质上它只是 运行

Get-Command *

现在您需要使用 python 中的这个来获取命令的结果作为变量。这可以通过

来完成
import subprocess  
data = subprocess.check_output(['Get-Command', '*'])

这可能不是最好的,也不是完整的答案,但也许是个有用的想法。

可能同时使用 wmic 并使用 which 或 gmc 来获取路径并构建字典? 以下是一个非常基本的代码,没有完全测试。

import subprocess
import shutil

Data = subprocess.check_output(['wmic', 'product', 'get', 'name'])
a = str(Data)
appsDict = {}

x = (a.replace("b\'Name","").split("\r\r\n"))

for i in range(len(x) - 1):
    appName = x[i+1].rstrip()
    appPath = shutil.which(appName)
    appsDict.update({appName: appPath})

print(appsDict)