dev 24.01.31

This commit is contained in:
Julian Freeman
2024-02-01 00:44:45 -04:00
parent b9f4822e37
commit 06327f3bfc
12 changed files with 882 additions and 1 deletions

86
util_func.py Normal file
View File

@@ -0,0 +1,86 @@
# coding: utf8
import os
import wmi
import json
import win32gui
import requests
import subprocess
from pathlib import Path
from PySide6.QtCore import QDir, QSettings
from PySide6.QtGui import QImage, QIcon, QPixmap
def get_isp_name() -> str:
req = requests.get("https://ipinfo.io/")
if req.status_code == 200:
try:
data = json.loads(req.content)
return data.get("org", "[Not found]")
except json.JSONDecodeError:
return "[Decode Error]"
return "[Return Error]"
def get_win_manufacturer() -> list[str]:
w = wmi.WMI()
cs_ls = w.Win32_ComputerSystem()
if len(cs_ls) > 0:
cs = cs_ls[0]
return [cs.model, cs.Manufacturer]
return []
def get_win_license() -> str:
temp_out = str(Path(QDir.tempPath(), "lic.txt"))
return_code = subprocess.call(
rf'cscript /Nologo /U "C:\Windows\System32\slmgr.vbs" /dlv >{temp_out}',
shell=True,
)
if return_code == 0:
with open(temp_out, "r", encoding="utf-16-le") as f:
return f.read()
return ""
def get_win_installed_software() -> dict[str, str]:
def gather_software(path: str, software_dict: dict[str, str]):
reg = QSettings(path, QSettings.Format.NativeFormat)
soft = reg.childGroups()
for s in soft:
c = QSettings(path + "\\" + s.split("/")[0], QSettings.Format.NativeFormat)
name = str(c.value("DisplayName"))
if name == "None":
continue
icon = str(c.value("DisplayIcon"))
software_dict[name] = icon
all_software = {}
gather_software(r"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", all_software)
gather_software(r"HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall", all_software)
gather_software(r"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall", all_software)
return all_software
def extract_win_icon_from_file(icon: str, default: QIcon) -> QIcon:
if icon == "None":
return default
if icon.endswith(",0"):
icon = icon[:-2]
icon = icon.replace('"', "")
icon = icon.replace("'", "")
if not os.path.exists(icon):
return default
if not icon.endswith(("exe", "EXE")):
return QIcon(icon)
large, small = win32gui.ExtractIconEx(icon, 0)
if len(small) > 0:
win32gui.DestroyIcon(small[0])
if len(large) > 0:
image = QImage.fromHICON(large[0])
return QIcon(QPixmap(image))
else:
return default