diff --git a/CompileToExe.txt b/CompileToExe.txt index 06313eb..9ddf18c 100644 --- a/CompileToExe.txt +++ b/CompileToExe.txt @@ -1,3 +1,3 @@ -pyinstaller --onedir --clean --noconsole --distpath=D:\LicenseChecker\1.2\exe --icon=data\LicenseChecker.ico --add-data=data\LicenseChecker.ico;data --add-data=data\Lpro.db;data --add-data=data\LicenseChecker.png;data --add-data=data\gpl-2.0.rtf;data --add-data=data\python-powered.png;data --add-data=data\User-DB.db;data --add-data=data\About.ui;data --add-data=data\main.ui;data --add-data=data\DoubleClick.ui;data --add-data=data\PoisZamen.ui;data --add-data=data\Spravka.ui;data --add-data=data\ViewBD.ui;data --add-data=data\RuchPoisk.ui;data --add-data=data\Media.ui;data --add-data=data\settings.ui;data --add-data=data\settings.ini;data --name=LicenseChecker "D:\LicenseChecker\1.2\main.pyw" +pyinstaller --onedir --clean --noconsole --distpath=D:\LicenseChecker\1.3\exe --icon=data\LicenseChecker.ico --add-data=data\LicenseChecker.ico;data --add-data=data\Lpro.db;data --add-data=data\LicenseChecker.png;data --add-data=data\gpl-2.0.rtf;data --add-data=data\python-powered.png;data --add-data=data\User-DB.db;data --add-data=data\About.ui;data --add-data=data\main.ui;data --add-data=data\DoubleClick.ui;data --add-data=data\PoisZamen.ui;data --add-data=data\Spravka.ui;data --add-data=data\ViewBD.ui;data --add-data=data\RuchPoisk.ui;data --add-data=data\Media.ui;data --add-data=data\settings.ui;data --add-data=data\settings.ini;data --add-data=data\cat-auto.png;data --add-data=data\cat-bd.png;data --add-data=data\cat-media.png;data --add-data=data\cat-ruch.png;data --add-data=data\cat-zamena.png;data --name=LicenseChecker "D:\LicenseChecker\1.3\main.pyw" - cd /d D:\LicenseChecker\1.2 +cd /d D:\LicenseChecker\1.3 diff --git a/data/About.ui b/data/About.ui index b5535f3..f8bc4d3 100644 --- a/data/About.ui +++ b/data/About.ui @@ -37,7 +37,7 @@ - LicenseChecker 1.2 + LicenseChecker 1.3 @@ -70,13 +70,13 @@ <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-weight:600;">Цель:</span><span style=" font-family:'MS Shell Dlg 2';"> Помочь разобраться с лицензиями на программное обеспечение</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2';"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-weight:600;">Лицензия:</span><span style=" font-family:'MS Shell Dlg 2';"> GNU GPL v2</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2';"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-weight:600;">Разработчик:</span><span style=" font-family:'MS Shell Dlg 2';"> Алексей Черемных (mrKaban) </span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2';"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-weight:600;">Официальный сайт: </span><span style=" font-family:'MS Shell Dlg 2';">КонтинентСвободы.рф</span></p></body></html> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Цель:</span> Помочь разобраться с лицензиями на программное обеспечение</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Лицензия:</span> GNU GPL v2</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Разработчик:</span> Алексей Черемных (mrKaban) </p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Официальный сайт: </span>КонтинентСвободы.рф</p></body></html> diff --git a/data/DoubleClick.ui b/data/DoubleClick.ui index 33370de..ead0c55 100644 --- a/data/DoubleClick.ui +++ b/data/DoubleClick.ui @@ -32,6 +32,9 @@ 281 + + false + diff --git a/data/LicenseChecker.ico b/data/LicenseChecker.ico index c35a08a..3d41b89 100644 Binary files a/data/LicenseChecker.ico and b/data/LicenseChecker.ico differ diff --git a/data/Media.ui b/data/Media.ui index 015d8a9..eb0495b 100644 --- a/data/Media.ui +++ b/data/Media.ui @@ -133,6 +133,12 @@ 221 + + true + + + false + diff --git a/data/RuchPoisk.ui b/data/RuchPoisk.ui index b514d9c..cd02789 100644 --- a/data/RuchPoisk.ui +++ b/data/RuchPoisk.ui @@ -26,6 +26,12 @@ 231 + + true + + + false + diff --git a/data/Spravka.ui b/data/Spravka.ui index c97016f..5a691e4 100644 --- a/data/Spravka.ui +++ b/data/Spravka.ui @@ -50,7 +50,7 @@ <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:12pt;">Автоматический поиск срабатывает при запуске программы. Пользователь при появлении окна видит его результаты. Все данные берутся из системного реестра Windows. Названия фильтруются от версий, так как часто разработчики названия своих программ в реестре указывают с версиями. Цены указываются примерные, поэтому могут не совпадать с реальными. При двойном клике по строке открываются подробности. В контекстном меню присутствует пункт копировать.</span></p></body></html> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Автоматический поиск срабатывает при запуске программы. Пользователь при появлении окна видит его результаты. Все данные берутся из системного реестра Windows. Названия фильтруются от версий, так как часто разработчики названия своих программ в реестре указывают с версиями. Цены указываются примерные, поэтому могут не совпадать с реальными. При двойном клике по строке открываются подробности. Копировать содержимое можно при помощи сочетания клавиш CTRL + C.</span></p></body></html> @@ -72,7 +72,7 @@ p, li { white-space: pre-wrap; } <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:12pt;">Ручной поиск программ в указанной директории ищет все исполняемые файлы, собирает их в один список, а далее сравнивает элементы списка с базой данных. Можно указывать отдельную папку, или весь жесткий диск. Степень обнаружения зависит от наполнения имен файл в базе или совпадением имени файла с названием программы. При поиске учитываются только exe файлы.</span></p></body></html> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Ручной поиск программ в указанной директории ищет все исполняемые файлы, собирает их в один список, а далее сравнивает элементы списка с базой данных. Можно указывать отдельную папку, или весь жесткий диск. Степень обнаружения зависит от наполнения имен файл в базе или совпадением имени файла с названием программы. При поиске учитываются только exe файлы. Можно указать сразу несколько директорий для поиска. Вручную написать можно только одну директорию.</span></p></body></html> @@ -94,7 +94,7 @@ p, li { white-space: pre-wrap; } <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:12pt;">Медиа поиск позволяет найти в указанной папке все изображения, аудио и видео наиболее популярных форматов (.tiff, .jpeg, .bmp, .jpe, .jpg, .png, .gif, .psd, .mpeg, .flv, .mov, .m4a, .ac3, .aac, .h264, .m4v, .mkv, .mp4, .3gp, .avi, .ogg, .vob, .wma, .mp3, .wav, .mpg, .wmv). Можно указать минимальный размер обнаруживаемых файлов. Для поиска можно указывать отдельные папки или весь диск.</span></p></body></html> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Медиа поиск позволяет найти в указанной папке все изображения, аудио и видео наиболее популярных форматов (.tiff, .jpeg, .bmp, .jpe, .jpg, .png, .gif, .psd, .mpeg, .flv, .mov, .m4a, .ac3, .aac, .h264, .m4v, .mkv, .mp4, .3gp, .avi, .ogg, .vob, .wma, .mp3, .wav, .mpg, .wmv). Можно указать минимальный размер обнаруживаемых файлов. Для поиска можно указывать отдельные папки или весь диск.</span></p></body></html> @@ -116,7 +116,7 @@ p, li { white-space: pre-wrap; } <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:12pt;">Поиск в базе позволяет найти в ней программу по части названия. Например, 'Архиватор WinRaR 3.53', в базе достаточно набрать 'Winrar' Сама база данных хранится в папке с программой \\data\\Lpro.db.</span></p></body></html> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Поиск в базе позволяет найти в ней программу по части названия. Например, 'Архиватор WinRaR 3.53', в базе достаточно набрать 'Winrar' Сама база данных хранится в папке с программой \\data\\Lpro.db.</span></p></body></html> diff --git a/data/ViewBD.ui b/data/ViewBD.ui index f8fcb2e..d6ea16f 100644 --- a/data/ViewBD.ui +++ b/data/ViewBD.ui @@ -88,6 +88,9 @@ 201 + + true + diff --git a/main.pyw b/main.pyw index eb9447c..7fcc626 100644 --- a/main.pyw +++ b/main.pyw @@ -19,6 +19,7 @@ import urllib.request #для проверки наличия новых вер from PyQt5.QtWidgets import QStyledItemDelegate #Для окрашивания строк from PyQt5.QtGui import QColor, QPalette #Для окрашивания строк import configparser #для создания настроек +import parametr @@ -143,6 +144,8 @@ def Avtopoisk(self=None): if os.path.exists(s3) or os.path.isfile(s3): data.append(('Путь:', s3)) #data.append(('Путь:', IntallPath[s])) + if s3 == 'undefined': + data.append(('Путь:', 'Неизвестно')) except KeyError: #если в реестре он не указан data.append(('Путь:', 'Неизвестно')) try:#Ищим основной исполняемый для подтверждения @@ -425,7 +428,7 @@ def UpdateProg(): #QMessageBox.about(self, "Файл сохранен", "Файл успешно сохранен: " + fileName[0]) QMessageBox.critical(win, "Нет соединения с сервером", "Не удалось проверить наличие обновлений.") return - search_exemple = re.search(r'1.2', h, re.M|re.I) # ТУТ НАДО ИСПРАВИТЬ ВЕРСИЮ ПРОГРАММЫ!!!!!!!!!!!!!!!!!!!!!!!!!!! + search_exemple = re.search(r'1.3', h, re.M|re.I) # ТУТ НАДО ИСПРАВИТЬ ВЕРСИЮ ПРОГРАММЫ!!!!!!!!!!!!!!!!!!!!!!!!!!! if not search_exemple: try: QMessageBox.about(win, "Обнаружена новая версия", "Сейчас будет открыта веб-страница с доступными релизами.\ @@ -598,25 +601,35 @@ def RuchPoisk(): dirlist = [] def OpenKatalog(): """Открыть каталог""" + try: + PredKatalog = winRuchPoisk.leKatalog.text() + try: + nachalo = PredKatalog.find(' ') + konets = len(PredKatalog) + PredKatalog.replace(PredKatalog[nachalo:konets], '') + except: + pass + except: + PredKatalog = "." winRuchPoisk.leKatalog.setText("") winRuchPoisk.tableWidgetRuch.clear() dirlist.clear() if winRuchPoisk.rb1kat.isChecked(): - d = QFileDialog.getExistingDirectory(winRuchPoisk,"Указать каталог для поиска остатков программ",".") + d = QFileDialog.getExistingDirectory(winRuchPoisk,"Указать каталог для поиска остатков программ", PredKatalog) dirlist.append(d) winRuchPoisk.leKatalog.setText(dirlist[0]) if winRuchPoisk.rb2kat.isChecked(): - d = QFileDialog.getExistingDirectory(winRuchPoisk,"Указать первый каталог для поиска остатков программ",".") + d = QFileDialog.getExistingDirectory(winRuchPoisk,"Указать первый каталог для поиска остатков программ", PredKatalog) dirlist.append(d) - d = QFileDialog.getExistingDirectory(winRuchPoisk,"Указать второй каталог для поиска остатков программ",".") + d = QFileDialog.getExistingDirectory(winRuchPoisk,"Указать второй каталог для поиска остатков программ", PredKatalog) dirlist.append(d) winRuchPoisk.leKatalog.setText(dirlist[0] + ' ' + dirlist[1]) if winRuchPoisk.rb3kat.isChecked(): - d = QFileDialog.getExistingDirectory(winRuchPoisk,"Указать первый каталог для поиска остатков программ",".") + d = QFileDialog.getExistingDirectory(winRuchPoisk,"Указать первый каталог для поиска остатков программ", PredKatalog) dirlist.append(d) - d = QFileDialog.getExistingDirectory(winRuchPoisk,"Указать второй каталог для поиска остатков программ",".") + d = QFileDialog.getExistingDirectory(winRuchPoisk,"Указать второй каталог для поиска остатков программ", PredKatalog) dirlist.append(d) - d = QFileDialog.getExistingDirectory(winRuchPoisk,"Указать третий каталог для поиска остатков программ",".") + d = QFileDialog.getExistingDirectory(winRuchPoisk,"Указать третий каталог для поиска остатков программ", PredKatalog) dirlist.append(d) winRuchPoisk.leKatalog.setText(dirlist[0] + ' ' + dirlist[1] + ' ' + dirlist[2]) winRuchPoisk.pbObzor.clicked.connect(OpenKatalog) @@ -826,9 +839,13 @@ def MediaPoisk(): """Открыть каталог""" global katalog katalog = None + try: + PredKatalog = winMediaPoisk.leKatalog.text() + except: + PredKatalog = "." winMediaPoisk.leKatalog.setText("") #winMediaPoisk.tableWidgetMedia.clear() - katalog = QFileDialog.getExistingDirectory(winMediaPoisk,"Указать каталог для медиа-файлов",".") + katalog = QFileDialog.getExistingDirectory(winMediaPoisk,"Указать каталог для медиа-файлов", PredKatalog) winMediaPoisk.leKatalog.setText(katalog) winMediaPoisk.pbObzor.clicked.connect(OpenMedKatalog) def ButtonMediaPoisk(): @@ -975,6 +992,22 @@ def MediaPoisk(): winMediaPoisk.pbSave.clicked.connect(SaveMedia) winMediaPoisk.show() win.mMediaPoisk.triggered.connect(MediaPoisk) -Avtopoisk() -win.show() -sys.exit(app.exec()) + +#Пример ярлыка для запуска с параметрами: +#D:\LicenseChecker\1.3\exe\LicenseChecker\LicenseChecker.exe AutoHidden "D:\\Public\\2.html" +#D:\LicenseChecker\1.3\exe\LicenseChecker\LicenseChecker.exe AutoHidden "default" +#D:\LicenseChecker\1.3\exe\LicenseChecker\LicenseChecker.exe RuchHidden "C:\\Program Files" "D:\\Public\\3.html" +#D:\LicenseChecker\1.3\exe\LicenseChecker\LicenseChecker.exe RuchHidden "C:\\Program Files" "default" +try: + if sys.argv[1] == 'AutoHidden': + parametr.AutoHidden() + elif sys.argv[1] == 'RuchHidden': + parametr.RuchHidden() + else: + Avtopoisk() + win.show() + sys.exit(app.exec()) +except: + Avtopoisk() + win.show() + sys.exit(app.exec()) diff --git a/parametr.py b/parametr.py new file mode 100644 index 0000000..2b68af0 --- /dev/null +++ b/parametr.py @@ -0,0 +1,198 @@ +from CheckOS import * +import sys +from reestr import foo #функция получения данных из реестра +import winreg #Нужна для работы со значением типа реестр +from filtr import filter #Фильтрация автопоиска +import sqlite3 #База данных SQLite +from datetime import datetime #какая дата и время +import socket #Для получения имени компьютера +import webbrowser #Для открытия веб-страницы +import os #Для поиска файлов + + +def AutoHidden(self=None): + """Автопоиск при запуске с параметрами""" + #Получаем данные из реестра в список(словари) + 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) + #Добавляю ОС и стоимость + name_os, cena_os = DetectOS() + data = [] + data.append((name_os, 'Платное ПО', 'Shareware', cena_os)) + slovarSave = {}#Словарь для сохранения результатов поиска в HTML + #Пробую работать с SQLite + BaseLpro = sqlite3.connect(r"data\Lpro.db", uri=True) + BaseLpro.row_factory = sqlite3.Row + CurBLpro = BaseLpro.cursor() + IntallPath = {} + i = 2 + software_list = sorted(software_list, key=lambda x: x['name']) #Сортировка списка словарей в автопоиске + n1 = [] #список для удаления дублей, в него добавляю, чтобы сравнить есть ли уже этот элемент + for itemsoft in software_list: + NameP=filter(itemsoft['name']) + if NameP not in n1: #Удаляю дубли + n1.append(NameP) + else: + continue #иначе переходим к следующей итеоации + try: + IntallPath[NameP] = itemsoft['InstallLocation'] + except: + IntallPath[itemsoft['name']] = itemsoft['InstallLocation'] + s = 'SELECT * FROM program WHERE (name LIKE "' + NameP + '%%")' + CurBLpro.execute(s) + records = CurBLpro.fetchall() + added = False + for row in records: + #tree.insert("" , i-1, text=i, values=(NameP, row[2], row[3], row[4])) + h = row[4] + h = h.replace("\n", "") + data.append((NameP, row[2], row[3], h)) + slovarSave[NameP] = {'Name':NameP, 'TipPO':row[2], 'License':row[3], 'Cena':h} + added = True + break + if added == False: + #tree.insert("" , i-1, text=i, values=(itemsoft['name'], "Неизвестно", "Неизвестно", "???")) + data.append((itemsoft['name'], "Неизвестно", "Неизвестно", "???")) + slovarSave[NameP] = {'Name':NameP, 'TipPO':"Неизвестно", 'License':"Неизвестно", 'Cena':"???"} + i += 1 + CurBLpro.close() + BaseLpro.close() + #Сохраняем отчет автопоиска в HTML + SbHTML = """ + + + +

Отчет автопоиска LicenseChecker

""" + SbHTML = SbHTML + '

ПК: '+socket.gethostname() + ' в ' + datetime.strftime(datetime.now(), "%d.%m.%Y %H:%M:%S") +'

' + SbHTML = SbHTML + """ + + + + """ + s='' + s1='' + for itemsoft in slovarSave: + s = slovarSave[itemsoft] + s1 = '
Название в БД + Тип ПО + Лицензия + Стоимость +
' + s['Name'] + '\n' + ' ' + s['TipPO'] + '\n' + s1 = s1 + ' ' + s['License'] + '\n' + ' ' + s['Cena'] + '\n' + SbHTML = SbHTML + s1 + s2 = """ +
+

Официальный сайт: КонтинентСвободы.рф

+ + """ + SbHTML = SbHTML + s2 + ftypes = [('HTML', '.html')] #Указываю тип расширение + #options = QFileDialog.Options() + #fileName = 'D:\\Public\\1.html' + fileName = sys.argv[2] + if fileName == 'default': + sdf = socket.gethostname() + datetime.strftime(datetime.now(), "_%d-%m-%Y_%H-%M-%S") + fileName = str(os.path.dirname(os.path.abspath(__file__))) +'\\' + 'auto_' + sdf +'.html' + try: + f = open(fileName,'w+') + f.write(SbHTML) #Записываем в файл + f.close() + except: + sdf = socket.gethostname() + datetime.strftime(datetime.now(), "_%d-%m-%Y_%H-%M-%S") + fileName = str(os.path.dirname(os.path.abspath(__file__))) +'\\' + 'auto_' + sdf +'.html' + f = open(fileName,'w+') + f.write(SbHTML) #Записываем в файл + f.close() +def RuchHidden(self=None): + """Ручной поиск при запуске с параметрами""" + slovarSave= {} + size_list=[] + dirlist = [] + dir = sys.argv[2] + #dir = 'C:\\Program Files' + spisok=[] + slovar={} + for root, dirs, files in os.walk(dir): # пройти по директории рекурсивно + for name in files: + if name[-4:]=='.exe': + fullname = os.path.join(root, name) # получаем полное имя файла + fullname = fullname.replace("/", "\\") + slovar[name]=fullname + spisok.append(name) + BaseLproRuch = sqlite3.connect(r"data\Lpro.db", uri=True) + BaseLproRuch.row_factory = sqlite3.Row #подключаем базу данных и курсор + CurBLproRuch = BaseLproRuch.cursor() + data = [] + added = False #Для отслеживания добавлен вариант из списка или нет + for itemsoft in spisok: #В списке имена файлом с расширением exe + NameP=itemsoft + NamePF = NameP.replace((NameP[NameP.find('.exe'):]), '') + s = 'SELECT * FROM program WHERE (file LIKE "' + NamePF + '")' + CurBLproRuch.execute(s) + records = CurBLproRuch.fetchall() + for row in records: + h = row[4] + h = h.replace("\n", "") + data.append((slovar[itemsoft], row[1], row[2], row[3], h)) + size_list.append(((len(slovar[itemsoft]))*6)) + #Создаю словари внутри словаря + slovarSave[row[1]] = {'Address':slovar[itemsoft], 'Name':row[1], 'TipPO':row[2], 'License':row[3], 'Cena':row[4]} + added = True + if added == False: + #Если не найдено в поле file, тогда ищем в поле name + s = 'SELECT * FROM program WHERE (name LIKE "' + NamePF + '%%")' + CurBLproRuch.execute(s) + records = CurBLproRuch.fetchall() + for row in records: + h = row[4] + h = h.replace("\n", "") + data.append((slovar[itemsoft], row[1], row[2], row[3], h)) + size_list.append(((len(slovar[itemsoft]))*6)) + #Создаю словари внутри словаря + slovarSave[row[1]] = {'Address':slovar[itemsoft], 'Name':row[1], 'TipPO':row[2], 'License':row[3], 'Cena':row[4]} + added = True + CurBLproRuch.close() #Закрываю соединение с базой и с курсором для базы + BaseLproRuch.close() + SbHTML = """ + + + +

Отчет ручного поиска LicenseChecker

""" + SbHTML = SbHTML + '

ПК: '+socket.gethostname() + ' в ' + datetime.strftime(datetime.now(), "%d.%m.%Y %H:%M:%S") +'

' + SbHTML = SbHTML + """ + + + + """ + s='' + s1='' + for itemsoft in slovarSave: + s = slovarSave[itemsoft] + s1 = '
Название в БД + Путь + Тип ПО + Лицензия + Стоимость +
' + s['Name'] + '\n' + ' ' + s['Address'] + '\n' + ' ' + s['TipPO'] + '\n' + s1 = s1 + ' ' + s['License'] + '\n' + ' ' + s['Cena'] + '\n' + SbHTML = SbHTML + s1 + s2 = """ +
+

Официальный сайт: КонтинентСвободы.рф

+ + """ + SbHTML = SbHTML + s2 + ftypes = [('HTML', '.html')] #Указываю тип расширение + fileName = sys.argv[3] + if fileName == 'default': + sdf = socket.gethostname() + datetime.strftime(datetime.now(), "_%d-%m-%Y_%H-%M-%S") + fileName = str(os.path.dirname(os.path.abspath(__file__))) +'\\' + 'ruch_' + sdf +'.html' + try: + f = open(fileName,'w+') + f.write(SbHTML) #Записываем в файл + f.close() + except: + sdf = socket.gethostname() + datetime.strftime(datetime.now(), "_%d-%m-%Y_%H-%M-%S") + fileName = str(os.path.dirname(os.path.abspath(__file__))) +'\\' + 'ruch_' + sdf +'.html' + f = open(fileName,'w+') + f.write(SbHTML) #Записываем в файл + f.close() diff --git a/reestr.py b/reestr.py index 43f983b..5ae2352 100644 --- a/reestr.py +++ b/reestr.py @@ -26,13 +26,19 @@ def foo(hive, flag): software['publisher'] = 'undefined' try: software['InstallLocation'] = winreg.QueryValueEx(asubkey, "InstallLocation")[0] + if software['InstallLocation'] == '' or software['InstallLocation'] == None: + software['InstallLocation'] = 'undefined' #except EnvironmentError: except: try: software['InstallLocation'] = winreg.QueryValueEx(asubkey, "InstallDir")[0] + if software['InstallLocation'] == '' or software['InstallLocation'] == None: + software['InstallLocation'] = 'undefined' except: try: software['InstallLocation'] = winreg.QueryValueEx(asubkey, "DisplayIcon")[0] + if software['InstallLocation'] == '' or software['InstallLocation'] == None: + software['InstallLocation'] = 'undefined' except: software['InstallLocation'] = 'undefined' #try: