RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1551760
Accepted
QuL1ux
QuL1ux
Asked:2023-11-17 11:09:35 +0000 UTC2023-11-17 11:09:35 +0000 UTC 2023-11-17 11:09:35 +0000 UTC

计算机上所有已安装程序的列表、其目录和可执行文件

  • 772

我正在编写的代码应该与俄语单词和应用程序名称相匹配,并按名称启动最合适的一个。这里原则上是没有问题的,有以下代码进行对比:

from fuzzywuzzy import fuzz
from transliterate import translit

russian_word = translit(input(), 'ru', reversed=True)
data = {'name': '', 'percent': 0}

for app in installed_apps:
    percentage = fuzz.ratio(app[:-4], russian_word)
    if percentage > data['percent']:
        data['percent'] = percentage
        data['name'] = app[:-4]

print(data['name'], data['percent'])

但获取已安装应用程序的列表和可执行文件的目录时出现问题。很长一段时间我试图从 gpt 聊天中获取信息,但到处都是。有这样的代码选项:使用winapps、winreg、shutil或pywin32简单地使用os。但我没有尝试的一切,一切都运行不完美,要么程序列表不完整,要么大多数程序找不到该目录,要么它指向所有文件(包括卸载程序)。

也就是说,这个想法是什么?您需要找到用于启动使用任何安装程序(从互联网、蒸汽、史诗游戏、微软商店安装)安装的应用程序的可执行文件,并运行它,只知道它的大概名称。简而言之,获取已安装应用程序的列表以及启动它们的直接路径。

PS操作系统:Windows

python
  • 2 2 个回答
  • 236 Views

2 个回答

  • Voted
  1. Best Answer
    Amgarak
    2023-11-20T21:02:03Z2023-11-20T21:02:03Z

    这项任务并不容易,但经过一番思考,我发明了一种自行车。看看吧,也许它会适合你))

    import os
    import win32com.client
    
    def resolve_shortcut(shortcut_path):
        if shortcut_path.lower().endswith((".lnk", ".url")):
            shell = win32com.client.Dispatch("WScript.Shell")
            shortcut = shell.CreateShortcut(shortcut_path)
            target_path = os.path.abspath(shortcut.TargetPath)
            _, extension = os.path.splitext(target_path)
            
            # Исключаем unins000.exe, Uninstall.exe, setup.exe из выдачи
            if extension.lower() == ".exe" and os.path.basename(target_path).lower() not in ("unins000.exe", "uninstall.exe", "setup.exe"):
                return target_path
        return None
    
    def get_programs_from_start_menu():
        start_menu_path = os.path.join(os.environ['ProgramData'], 'Microsoft', 'Windows', 'Start Menu', 'Programs')
        
        programs = []
    
        for root, dirs, files in os.walk(start_menu_path):
            for file in files:
                program_path = os.path.join(root, file)
                programs.append(program_path)
    
        return programs
    
    # Пример использования
    programs = get_programs_from_start_menu()
    for program in programs:
        exe_path = resolve_shortcut(program)
        if exe_path is not None:
            print(f"Ярлык: {program}, Путь к .exe: {exe_path}")
    

    添加:

    import os
    import win32com.client
    
    def resolve_shortcut(shortcut_path):
        if shortcut_path.lower().endswith((".lnk", ".url")):
            shell = win32com.client.Dispatch("WScript.Shell")
            shortcut = shell.CreateShortcut(shortcut_path)
            target_path = os.path.abspath(shortcut.TargetPath)
            _, extension = os.path.splitext(target_path)
            
            # Исключаем unins000.exe и Uninstall.exe и setup.exe
            if extension.lower() == ".exe" and os.path.basename(target_path).lower() not in ("unins000.exe", "uninstall.exe", "setup.exe"):
                return target_path
        return None
    
    def get_shortcuts_from_path(path):
        shortcuts = []
        for root, dirs, files in os.walk(path):
            for file in files:
                shortcut_path = os.path.join(root, file)
                shortcuts.append(shortcut_path)
        return shortcuts
    
    def get_programs_from_start_menu_and_desktop():
        start_menu_path = os.path.join(os.environ['ProgramData'], 'Microsoft', 'Windows', 'Start Menu', 'Programs')
        desktop_path = os.path.join(os.environ['USERPROFILE'], 'Desktop')
        
        start_menu_shortcuts = get_shortcuts_from_path(start_menu_path)
        desktop_shortcuts = get_shortcuts_from_path(desktop_path)
    
        return start_menu_shortcuts + desktop_shortcuts
    
    # Пример использования
    programs = get_programs_from_start_menu_and_desktop()
    for program in programs:
        exe_path = resolve_shortcut(program)
        if exe_path is not None:
            print(f"Ярлык: {program}, Путь к .exe: {exe_path}")
    

    所有已安装程序的列表:

    import subprocess
    
    # Команда для получения списка установленных программ в Windows
    command = 'wmic product get name'
    
    result = subprocess.run(command, stdout=subprocess.PIPE, text=True, shell=True)
    
    print(result.stdout)
    
    • 1
  2. ganz
    2023-11-21T01:15:52Z2023-11-21T01:15:52Z

    在 Windows 中,安装程序是一个抽象概念:安装程序最好仅将已编译的应用程序放置在 programm files* 文件夹中(但不一定是 Minecraft 启动器,它放置在 appdata 中的某处)。另外在安装程序中选择“选择安装路径”,实际上可以是7zip压缩包(也就是说,最后可以将“my_cool_app.bat和unins111.ps1”这样的两个文件复制到随机位置,甚至可以复制到另一个磁盘上。因此,100%的结果并不是通过扫描开始菜单、默认用户和其他桌面的启动快捷方式来获得部分结果。(但这并不能解决我的世界的问题)因此,更好的选择是创建一个流行应用程序及其俄语文本解释的数据库(例如,通过语音启动屏幕保护程序 C:...* .scr)。当然,这需要对文件系统进行全面扫描以查找可执行文件、搜索数据库以及添加/更改数据库的路径。但这并不能解决使用新路径卸载/重新安装的问题。这里还有第三个选项(拐杖):在数据库中搜索可执行文件,同时使用“窗口搜索”——让这种感染发挥其作用。


    文字对于通讯来说太大,但不保证得到答复

    • 1

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5