Rohith Nambiar
Rohith Nambiar

Reputation: 3730

Open installed apps on Windows intelligently

I am coding a voice assistant to automate my pc which is running Windows 11 and I want to open apps using voice commands, I don't want to hard code every installed app's .exe path. Is there any way to get a dictionary of the app's name and their .exe path. I am able to get currently running apps and close them using this:

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)

Upvotes: 2

Views: 316

Answers (3)

gnaanaa
gnaanaa

Reputation: 423

Possibly using both wmic and use either which or gmc to grab the path and build the dict? Following is a very basic code, not tested completely.

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)

Upvotes: 1

Dmytro Oliinychenko
Dmytro Oliinychenko

Reputation: 520

Under Windows PowerShell there is a Get-Command utility. Finding Windows executables using Get-Command is described nicely in this issue. Essentially it's just running

Get-Command *

Now you need to use this from python to get the results of command as a variable. This can be done by

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

Probably this is not the best, and not a complete answer, but maybe it's a useful idea.

Upvotes: 1

Danny
Danny

Reputation: 77

This can be accomplished via the following code:

    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:\\')

Inspired from: https://pythonprogramming.altervista.org/find-all-the-files-on-your-computer/

Upvotes: 0

Related Questions