Цель:
Я хочу изменить свой скрипт, чтобы он показывал только те приложения, которые появляются в строке поиска Windows при вводе имени приложения. Это должно исключать внутренние системные компоненты и службы, с которыми пользователи не взаимодействуют напрямую.
Я пробовал фильтровать по определенным ключевым словам, но этот подход неполный. Есть ли способ проверить, зарегистрировано ли установленное приложение для отображения в меню «Пуск» или в поиске Windows? Возможно, проверив ярлык меню «Пуск» или другой индикатор?
Вот базовый сценарий, который я использую для получения данных программного обеспечения:
Код: Выделить всё
import winreg
def foo(hive, flag):
aReg = winreg.ConnectRegistry(None, hive)
aKey = winreg.OpenKey(aReg, r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", 0, winreg.KEY_READ | flag)
count_subkey = winreg.QueryInfoKey(aKey)[0]
software_list = []
for i in range(count_subkey):
software = {}
try:
asubkey_name = winreg.EnumKey(aKey, i)
asubkey = winreg.OpenKey(aKey, asubkey_name)
software['name'] = winreg.QueryValueEx(asubkey, "DisplayName")[0]
try:
software['version'] = winreg.QueryValueEx(asubkey, "DisplayVersion")[0]
except EnvironmentError:
software['version'] = 'undefined'
try:
software['publisher'] = winreg.QueryValueEx(asubkey, "Publisher")[0]
except EnvironmentError:
software['publisher'] = 'undefined'
software_list.append(software)
except EnvironmentError:
continue
return software_list
software_list = foo(winreg.HKEY_LOCAL_MACHINE, winreg.KEY_WOW64_32KEY) + foo(winreg.HKEY_LOCAL_MACHINE, winreg.KEY_WOW64_64KEY) + foo(winreg.HKEY_CURRENT_USER, 0)
for software in software_list:
print('Name=%s, Version=%s, Publisher=%s' % (software['name'], software['version'], software['publisher']))
Код: Выделить всё
• Filtering out system apps by checking for certain keywords (like Microsoft Visual C++, Redistributable, etc.), but this is not a reliable method.
• Searching for a way to check if an app has a Start Menu shortcut, but I’m unsure how to integrate that into my script.
Код: Выделить всё
• Is there a reliable way to filter the software to only show those apps that are user-facing and searchable via the Start Menu or Windows search bar?
• Can this be done by checking for a Start Menu shortcut or other registration in the system?
Подробнее здесь: https://stackoverflow.com/questions/790 ... search-bar