diff --git a/mainwindow.py b/mainwindow.py index 1267183..62aa363 100755 --- a/mainwindow.py +++ b/mainwindow.py @@ -660,466 +660,7 @@ def GetScreenSize(): ]) return screenInformation # 返回结果 -class GetDllFromWindowsISO: - wineBottonPath = get_home() + "/.wine" - isoPath = None - dllList = None - message = None - dllFound = None - dllControl = None - foundButton = None - saveDll = None - setWineBotton = None - browser = None - mount = False - mountButton = None - dllListModel = None - arch = 0 - def ShowWindow(): - #DisableButton(True) - GetDllFromWindowsISO.message = QtWidgets.QMainWindow() - widget = QtWidgets.QWidget() - widgetLayout = QtWidgets.QGridLayout() - if not e1.currentText() == "": - GetDllFromWindowsISO.wineBottonPath = e1.currentText() - widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", f"""提示: - 目前本提取功能暂只支持 NT 内核系统的官方安装镜像,不支持读取 ghost 等第三方封装方式的安装镜像 - 以及不要拷贝/替换太多的 dll,否则可能会导致 wine 容器异常,以及不要替换 Wine 的核心 dll - 最后,拷贝/替换 dll 后,建议点击下面“设置 wine 容器”按钮==》函数库 进行设置 -当前选择的 Wine 容器:{GetDllFromWindowsISO.wineBottonPath}""")), 0, 0, 1, 5) - isoLabel = QtWidgets.QLabel(transla.transe("U", "ISO镜像:")) - GetDllFromWindowsISO.isoPath = QtWidgets.QComboBox() - GetDllFromWindowsISO.browser = QtWidgets.QPushButton(transla.transe("U", "浏览")) - isoControl = QtWidgets.QWidget() - isoControlLayout = QtWidgets.QHBoxLayout() - isoControl.setLayout(isoControlLayout) - dllControl = QtWidgets.QWidget() - dllControlLayout = QtWidgets.QHBoxLayout() - dllControl.setLayout(dllControlLayout) - GetDllFromWindowsISO.mountButton = QtWidgets.QPushButton(transla.transe("U", "读取/挂载ISO镜像")) - umountButton = QtWidgets.QPushButton(transla.transe("U", "关闭/卸载ISO镜像")) - GetDllFromWindowsISO.dllFound = QtWidgets.QComboBox() - GetDllFromWindowsISO.foundButton = QtWidgets.QPushButton(transla.transe("U", "查找")) - GetDllFromWindowsISO.dllList = QtWidgets.QListView() - GetDllFromWindowsISO.saveDll = QtWidgets.QPushButton(transla.transe("U", "保存到 wine 容器中")) - GetDllFromWindowsISO.setWineBotton = QtWidgets.QPushButton(transla.transe("U", "设置 wine 容器")) - isoLabel.setSizePolicy(size) - GetDllFromWindowsISO.isoPath.setEditable(True) - GetDllFromWindowsISO.isoPath.addItems(isoPath) - GetDllFromWindowsISO.isoPath.setEditText("") - GetDllFromWindowsISO.browser.setSizePolicy(size) - GetDllFromWindowsISO.mountButton.setSizePolicy(size) - isoControlLayout.addWidget(GetDllFromWindowsISO.mountButton) - umountButton.setSizePolicy(size) - isoControlLayout.addWidget(umountButton) - GetDllFromWindowsISO.dllFound.setEditable(True) - GetDllFromWindowsISO.dllFound.addItems(isoPathFound) - GetDllFromWindowsISO.dllFound.setEditText("") - GetDllFromWindowsISO.saveDll.setSizePolicy(size) - dllControlLayout.addWidget(GetDllFromWindowsISO.saveDll) - GetDllFromWindowsISO.setWineBotton.setSizePolicy(size) - GetDllFromWindowsISO.DisbledDown(True) - dllControlLayout.addWidget(GetDllFromWindowsISO.setWineBotton) - widgetLayout.addWidget(isoLabel, 1, 0, 1, 1) - widgetLayout.addWidget(GetDllFromWindowsISO.isoPath, 1, 1, 1, 1) - widgetLayout.addWidget(GetDllFromWindowsISO.browser, 1, 2, 1, 1) - widgetLayout.addWidget(isoControl, 2, 1, 1, 1) - widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "查找DLL\n(为空则代表不查找,\n将显示全部内容):")), 3, 0, 1, 1) - widgetLayout.addWidget(GetDllFromWindowsISO.dllFound, 3, 1, 1, 1) - widgetLayout.addWidget(GetDllFromWindowsISO.foundButton, 3, 2, 1, 1) - widgetLayout.addWidget(GetDllFromWindowsISO.dllList, 4, 1, 1, 1) - widgetLayout.addWidget(dllControl, 5, 1, 1, 1) - widget.setLayout(widgetLayout) - GetDllFromWindowsISO.browser.clicked.connect(GetDllFromWindowsISO.Browser) - GetDllFromWindowsISO.mountButton.clicked.connect(GetDllFromWindowsISO.MountDisk) - umountButton.clicked.connect(GetDllFromWindowsISO.UmountDisk) - GetDllFromWindowsISO.foundButton.clicked.connect(GetDllFromWindowsISO.Found) - GetDllFromWindowsISO.saveDll.clicked.connect(GetDllFromWindowsISO.CopyDll) - GetDllFromWindowsISO.setWineBotton.clicked.connect(lambda: RunWineProgram("winecfg", Disbled=False)) - GetDllFromWindowsISO.message.setCentralWidget(widget) - GetDllFromWindowsISO.dllListModel = QtCore.QStringListModel() - GetDllFromWindowsISO.dllListModel.setStringList([]) - GetDllFromWindowsISO.dllList.setModel(GetDllFromWindowsISO.dllListModel) - GetDllFromWindowsISO.isoPath.currentText() - GetDllFromWindowsISO.message.setWindowTitle(f"Wine 运行器 {version}——从 ISO 提取 DLL") - GetDllFromWindowsISO.message.setWindowIcon(QtGui.QIcon(iconPath)) - GetDllFromWindowsISO.message.show() - - def DisbledUp(state): - GetDllFromWindowsISO.isoPath.setDisabled(state) - GetDllFromWindowsISO.browser.setDisabled(state) - GetDllFromWindowsISO.mountButton.setDisabled(state) - - - def DisbledDown(state): - GetDllFromWindowsISO.dllList.setDisabled(state) - GetDllFromWindowsISO.dllFound.setDisabled(state) - GetDllFromWindowsISO.saveDll.setDisabled(state) - GetDllFromWindowsISO.setWineBotton.setDisabled(state) - GetDllFromWindowsISO.foundButton.setDisabled(state) - - def Browser(): - path = QtWidgets.QFileDialog.getOpenFileName(GetDllFromWindowsISO.message, "选择 ISO 镜像文件", json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/FindISO.json"))["path"], "iso 镜像文件(*.iso);;ISO 镜像文件(*.ISO);;所有文件(*.*)")[0] - if path == None or path == "": - return - GetDllFromWindowsISO.isoPath.setEditText(path) - write_txt(get_home() + "/.config/deepin-wine-runner/FindISO.json", json.dumps({"path": os.path.dirname(path)})) # 写入配置文件 - - def Found(): - found = GetDllFromWindowsISO.dllFound.currentText() - findList = [] - try: - if found == "": - # 显示所有内容 - # 下面内容需要分类讨论 - if GetDllFromWindowsISO.arch == 0: - for i in os.listdir("/tmp/wine-runner-getdll/i386"): - if i[-3:] == "dl_": - findList.append(i[:-1] + "l") - elif GetDllFromWindowsISO.arch == 32: - for i in os.listdir("/tmp/wine-runner-getdll-wim/Windows/SysWOW64"): - if i[-3:] == "dll": - findList.append(i[:-1] + "l") - elif GetDllFromWindowsISO.arch == 64: - for i in os.listdir("/tmp/wine-runner-getdll-wim/Windows/System32"): - if i[-3:] == "dll": - findList.append(i[:-1] + "l") - GetDllFromWindowsISO.dllListModel.setStringList(findList) - return - if GetDllFromWindowsISO.arch == 0: - for i in os.listdir("/tmp/wine-runner-getdll/i386"): - if found in i[:-1] + "l": - findList.append(i[:-1] + "l") - elif GetDllFromWindowsISO.arch == 32: - for i in os.listdir("/tmp/wine-runner-getdll-wim/Windows/SysWOW64"): - if found in i[:-1] + "l": - findList.append(i[:-1] + "l") - elif GetDllFromWindowsISO.arch == 64: - for i in os.listdir("/tmp/wine-runner-getdll-wim/Windows/System32"): - if found in i[:-1] + "l": - findList.append(i[:-1] + "l") - if len(isoPath) == 0: - if isoPathFound[-1] != found: - isoPathFound.append(found) # 将记录写进数组 - write_txt(get_home() + "/.config/deepin-wine-runner/ISOPathFound.json", str(json.dumps(ListToDictionary(isoPathFound)))) # 将历史记录的数组转换为字典并写入 - GetDllFromWindowsISO.dllFound.clear() - GetDllFromWindowsISO.dllFound.addItems(isoPathFound) - GetDllFromWindowsISO.dllListModel.setStringList(findList) - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(GetDllFromWindowsISO.message, transla.trans("错误"), traceback.format_exc()) - - - def MountDisk(): - if not os.path.exists(GetDllFromWindowsISO.isoPath.currentText()): - QtWidgets.QMessageBox.critical(GetDllFromWindowsISO.message, transla.trans("错误"), transla.trans("您选择的 ISO 镜像文件不存在")) - return - if os.path.exists("/tmp/wine-runner-getdll"): - try: - os.rmdir("/tmp/wine-runner-getdll") - os.system("rm -rf /tmp/wine-runner-getdll-wim") - except: - # 如果无法删除可能是挂载了文件 - os.system("wimunmount /tmp/wine-runner-getdll-wim") - os.system("pkexec umount /tmp/wine-runner-getdll") - - try: - os.rmdir("/tmp/wine-runner-getdll") - os.rmdir("/tmp/wine-runner-getdll-wim") - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(GetDllFromWindowsISO.message, "错误", traceback.format_exc()) - return - os.makedirs("/tmp/wine-runner-getdll") - os.system(f"pkexec mount '{GetDllFromWindowsISO.isoPath.currentText()}' /tmp/wine-runner-getdll") - findList = [] - # 判断是新版的 Windows ISO(Windows Vista 及以上版本) - if os.path.exists("/tmp/wine-runner-getdll/sources/install.wim"): - # 如果没有安装 wimtools 的话 - if os.system("which wimmount") != 0: - QtWidgets.QMessageBox.critical(GetDllFromWindowsISO.message, "错误", f"镜像内容读取/挂载失败,因为没有安装 wimtools 以至无法读取") - return - # 是新版,挂载 wim - # 需要让用户选择挂载内容 - QtWidgets.QInputDialog.getMultiLineText(GetDllFromWindowsISO.message, "提示", "挂载文件需要用户记住并在下一个对话框输入 Index 以挂载正确的镜像,按下下方任意按钮即可继续", subprocess.getoutput("wiminfo '/tmp/wine-runner-getdll/sources/install.wim'")) - choose = QtWidgets.QInputDialog.getInt(GetDllFromWindowsISO.message, "提示", "请输入 Index") - if not choose[1]: - return - os.makedirs("/tmp/wine-runner-getdll-wim") - os.system(f"wimmount /tmp/wine-runner-getdll/sources/install.wim {choose[0]} /tmp/wine-runner-getdll-wim") - if os.path.exists("/tmp/wine-runner-getdll-wim/Windows/SysWOW64"): - # 如果是 64 位镜像 - if QtWidgets.QInputDialog.getItem(GetDllFromWindowsISO.message, "选择位数", "选择位数(如果没有选择,默认为 64 位)", ["32", "64"], 1, False) == "32": - # 64 位镜像的 32 位是存在 SysWOW64 的 - try: - for i in os.listdir("/tmp/wine-runner-getdll-wim/Windows/SysWOW64"): - if i[-3:] == "dll": - findList.append(i[:-1] + "l") - GetDllFromWindowsISO.dllListModel.setStringList(findList) - GetDllFromWindowsISO.arch = 32 - GetDllFromWindowsISO.DisbledDown(False) - GetDllFromWindowsISO.DisbledUp(True) - GetDllFromWindowsISO.mount = True - if len(isoPath) == 0 or isoPath[-1] != GetDllFromWindowsISO.isoPath.currentText(): - isoPath.append(GetDllFromWindowsISO.isoPath.currentText()) # 将记录写进数组 - write_txt(get_home() + "/.config/deepin-wine-runner/ISOPath.json", str(json.dumps(ListToDictionary(isoPath)))) # 将历史记录的数组转换为字典并写入 - GetDllFromWindowsISO.isoPath.clear() - GetDllFromWindowsISO.isoPath.addItems(isoPath) - return - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(GetDllFromWindowsISO.message, "错误", f"镜像内容读取/挂载失败,报错如下:\n{traceback.format_exc()}") - return - try: - for i in os.listdir("/tmp/wine-runner-getdll-wim/Windows/System32"): - if i[-3:] == "dll": - findList.append(i[:-1] + "l") - GetDllFromWindowsISO.arch = 64 - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(GetDllFromWindowsISO.message, "错误", f"镜像内容读取/挂载失败,报错如下:\n{traceback.format_exc()}") - return - GetDllFromWindowsISO.dllListModel.setStringList(findList) - else: - try: - for i in os.listdir("/tmp/wine-runner-getdll/i386"): - if i[-3:] == "dl_": - findList.append(i[:-1] + "l") - GetDllFromWindowsISO.arch = 0 - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(GetDllFromWindowsISO.message, "错误", f"镜像内容读取/挂载失败,报错如下:\n{traceback.format_exc()}") - return - GetDllFromWindowsISO.dllListModel.setStringList(findList) - GetDllFromWindowsISO.DisbledDown(False) - GetDllFromWindowsISO.DisbledUp(True) - GetDllFromWindowsISO.mount = True - if len(isoPath) == 0 or isoPath[-1] != GetDllFromWindowsISO.isoPath.currentText(): - isoPath.append(GetDllFromWindowsISO.isoPath.currentText()) # 将记录写进数组 - write_txt(get_home() + "/.config/deepin-wine-runner/ISOPath.json", str(json.dumps(ListToDictionary(isoPath)))) # 将历史记录的数组转换为字典并写入 - GetDllFromWindowsISO.isoPath.clear() - GetDllFromWindowsISO.isoPath.addItems(isoPath) - #GetDllFromWindowsISO.isoPath['value'] = isoPath - - def UmountDisk(): - os.system("wimunmount /tmp/wine-runner-getdll-wim") - os.system("pkexec umount /tmp/wine-runner-getdll") - try: - shutil.rmtree("/tmp/wine-runner-getdll") - os.system("rm -rf /tmp/wine-runner-getdll-wim") - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(GetDllFromWindowsISO.message, transla.transe("U", "错误"), f"关闭/卸载镜像失败,报错如下:\n{traceback.format_exc()}") - return - GetDllFromWindowsISO.DisbledDown(True) - GetDllFromWindowsISO.DisbledUp(False) - GetDllFromWindowsISO.mount = False - QtWidgets.QMessageBox.information(GetDllFromWindowsISO.message, transla.transe("U", "提示"), transla.transe("U", "关闭/卸载成功!")) - - def CopyDll(): - choose = GetDllFromWindowsISO.dllList.selectionModel().selectedIndexes()[0].data() - if os.path.exists(f"{GetDllFromWindowsISO.wineBottonPath}/drive_c/windows/system32/{choose}"): - if QtWidgets.QMessageBox.question(GetDllFromWindowsISO.message, "提示", f"DLL {choose} 已经存在,是否覆盖?") == QtWidgets.QMessageBox.No: - return - try: - # 要分类讨论 - if GetDllFromWindowsISO.arch == 0: - shutil.copy(f"/tmp/wine-runner-getdll/i386/{choose[:-1]}_", f"{GetDllFromWindowsISO.wineBottonPath}/drive_c/windows/system32/{choose}") - elif GetDllFromWindowsISO.arch == 32: - shutil.copy(f"/tmp/wine-runner-getdll-wim/Windows/SysWOW64/{choose[:-1]}l", f"{GetDllFromWindowsISO.wineBottonPath}/drive_c/windows/system32/{choose}") - elif GetDllFromWindowsISO.arch == 64: - shutil.copy(f"/tmp/wine-runner-getdll-wim/Windows/System32/{choose[:-1]}l", f"{GetDllFromWindowsISO.wineBottonPath}/drive_c/windows/system32/{choose}") - # 选择原装或优于内建 - if QtWidgets.QInputDialog.getItem(GetDllFromWindowsISO.message, "选择", "选择模式", ["原装先于内建", "原装"], 0, False) == "原装先于内建": - # 原装先于内建 - os.system(f"WINEPREFIX='{GetDllFromWindowsISO.wineBottonPath}' '{wine[o1.currentText()]}' reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v {os.path.splitext(choose)[0]} /d native,builtin /f") - else: - # 原装 - os.system(f"WINEPREFIX='{GetDllFromWindowsISO.wineBottonPath}' '{wine[o1.currentText()]}' reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v {os.path.splitext(choose)[0]} /d native /f") - QtWidgets.QMessageBox.information(GetDllFromWindowsISO.message, "提示", "提取成功!") - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(GetDllFromWindowsISO.message, "错误", traceback.format_exc()) - choose = None -class ProgramRunStatusShow(): - msgWindow = None - def ShowWindow(): - global choose - choose = None - dateVersion = "" - if not os.path.exists(e2.currentText()): - QtWidgets.QMessageBox.information(widget, "提示", "您输入的 exe 不存在") - return - try: - sha = ProgramRunStatusUpload.GetSHA1(e2.currentText()) - lists = json.loads(requests.get(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci9hcHAv").decode("utf-8") + sha + base64.b64decode("L2FsbC5qc29u").decode("utf-8")).text) - r = requests.get(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci9hcHAv").decode("utf-8") + sha + base64.b64decode("L3RpdGxlLnR4dA==").decode("utf-8")) - r.encoding = "utf-8" - title = r.text - except: - choosemsg = QtWidgets.QMessageBox() - choosemsg.setText("""暂时还没有该软件的运行情况信息,请问需要?""") - choosemsg.setWindowTitle("提示") - def Choose(choices): - global choose - choose = choices - choosemsg.addButton("取消", QtWidgets.QMessageBox.ActionRole).clicked.connect(lambda: Choose(0)) - choosemsg.addButton("提交评分", QtWidgets.QMessageBox.ActionRole).clicked.connect(lambda: Choose(1)) - choosemsg.addButton("预测评分(不准确)", QtWidgets.QMessageBox.ActionRole).clicked.connect(lambda: Choose(2)) - choosemsg.exec_() - if choose == None or choose == 0: - return - if choose == 1: - ProgramRunStatusUpload.ShowWindow(sha) - return - if choose == 2: - try: - lists = [0, 0, 0, 0, 0, 0, 0, 0] - info = json.loads(requests.get(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0OjMwMjUwL0FJP1NIQTE9").decode("utf-8") + sha).text) - lists[int(info["Fen"])] = 1 - dateVersion = info["Version"] - title = "null" - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(window, "错误", "无法获取预测数值") - return - - - informationList = [ - "0分:无法运行并且也没有报错,自己无法解决", - "1分:无法运行但有报错,自己无法解决", - "2分:可以运行但是效果很差,几乎无法使用", - "3分:可以运行且勉强可以使用", - "4分:可以运行,体验大差不差,还是有点小问题", - "5分:可以运行且完全没有bug和问题,和在 Windows 上一样", - "含有不良内容,不宜安装", - "含有病毒、木马等对计算机有害的软件" - ] - try: - if title.lower() == "null": - title = "未知应用" - except: - title = "未知应用" - maxHead = lists.index(max(lists)) - ProgramRunStatusShow.msgWindow = QtWidgets.QMainWindow() - msgWidget = QtWidgets.QWidget() - msgWidgetLayout = QtWidgets.QGridLayout() - starLayout = QtWidgets.QHBoxLayout() - uploadButton = QtWidgets.QPushButton(transla.transe("U", "点此上传运行情况")) - uploadButton.clicked.connect(lambda: ProgramRunStatusUpload.ShowWindow(sha, title)) - msgWidgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "综合评价:")), 0, 0) - msgWidgetLayout.addLayout(starLayout, 0, 1) - msgWidgetLayout.addWidget(QtWidgets.QLabel(informationList[maxHead]), 1, 0, 1, 2) - msgWidgetLayout.addWidget(QtWidgets.QLabel("" if dateVersion == "" else f"数据版本:{dateVersion}"), 2, 0, 1, 2) - msgWidgetLayout.addWidget(uploadButton, 3, 0, 1, 2) - end = 5 - if maxHead > 5: - for i in range(end): - starLayout.addWidget(QtWidgets.QLabel(f"")) - else: - for i in range(maxHead): - starLayout.addWidget(QtWidgets.QLabel(f"")) - head = maxHead - for i in range(head, end): - starLayout.addWidget(QtWidgets.QLabel(f"")) - msgWidget.setLayout(msgWidgetLayout) - ProgramRunStatusShow.msgWindow.setCentralWidget(msgWidget) - ProgramRunStatusShow.msgWindow.setWindowIcon(QtGui.QIcon(iconPath)) - ProgramRunStatusShow.msgWindow.setWindowTitle(f"应用“{title}”的运行情况") - ProgramRunStatusShow.msgWindow.show() - -class ProgramRunStatusUpload(): - msgWindow = None - starLayout = None - fen = None - starList = [] - sha1Value = "" - programName = None - def ChangeStar(): - if ProgramRunStatusUpload.fen.currentIndex() > 5: - for i in ProgramRunStatusUpload.starList: - i.setText(f"") - return - for i in range(ProgramRunStatusUpload.fen.currentIndex()): - ProgramRunStatusUpload.starList[i].setText(f"") - head = ProgramRunStatusUpload.fen.currentIndex() - end = len(ProgramRunStatusUpload.starList) - for i in range(head, end): - ProgramRunStatusUpload.starList[i].setText(f"") - - def ShowWindow(sha="", title=""): - ProgramRunStatusUpload.starList = [] - ProgramRunStatusUpload.sha1Value = sha - ProgramRunStatusUpload.msgWindow = QtWidgets.QMainWindow() - msgWidget = QtWidgets.QWidget() - msgWidgetLayout = QtWidgets.QGridLayout() - ProgramRunStatusUpload.programName = QtWidgets.QLineEdit() - ProgramRunStatusUpload.fen = QtWidgets.QComboBox() - ProgramRunStatusUpload.starLayout = QtWidgets.QHBoxLayout() - upload = QtWidgets.QPushButton(transla.transe("U", "上传")) - upload.clicked.connect(ProgramRunStatusUpload.Upload) - if title != "": - ProgramRunStatusUpload.programName.setText(title) - ProgramRunStatusUpload.programName.setDisabled(True) - # 生成星星列表 - for i in [1, 1, 1, 1, 0]: - ProgramRunStatusUpload.starList.append(QtWidgets.QLabel(f"")) - ProgramRunStatusUpload.starLayout.addWidget(ProgramRunStatusUpload.starList[-1]) - ProgramRunStatusUpload.starLayout.addItem(QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)) - ProgramRunStatusUpload.programName.setPlaceholderText(transla.transe("U", "如果这个程序和程序名确实是合法还是检测到敏感词,改为“NULL”即可")) - ProgramRunStatusUpload.fen.addItems(["0分:无法运行并且也没有报错,自己无法解决", - "1分:无法运行但有报错,自己无法解决", - "2分:可以运行但是效果很差,几乎无法使用", - "3分:可以运行且勉强可以使用", - "4分:可以运行,体验大差不差,还是有点小问题", - "5分:可以运行且完全没有bug和问题,和在 Windows 上一样", - "含有不良内容,不宜安装", - "含有病毒、木马等对计算机有害的软件"]) - ProgramRunStatusUpload.fen.setCurrentIndex(4) - ProgramRunStatusUpload.fen.currentIndexChanged.connect(ProgramRunStatusUpload.ChangeStar) - msgWidgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "程序名:")), 0, 0) - msgWidgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "评分:")), 1, 0) - msgWidgetLayout.addWidget(ProgramRunStatusUpload.programName, 0, 1) - msgWidgetLayout.addWidget(ProgramRunStatusUpload.fen, 1, 1) - msgWidgetLayout.addLayout(ProgramRunStatusUpload.starLayout, 2, 1) - msgWidgetLayout.addWidget(upload, 3, 1) - msgWidget.setLayout(msgWidgetLayout) - ProgramRunStatusUpload.msgWindow.setCentralWidget(msgWidget) - ProgramRunStatusUpload.msgWindow.setWindowTitle(transla.transe("U", "上传程序运行情况")) - ProgramRunStatusUpload.msgWindow.setWindowIcon(QtGui.QIcon(iconPath)) - ProgramRunStatusUpload.msgWindow.show() - - def Upload(): - if not os.path.exists(e2.currentText()): - QtWidgets.QMessageBox.critical(None, "错误", "exe 文件不存在!") - return - if ProgramRunStatusUpload.programName.text() == "": - QtWidgets.QMessageBox.critical(None, "错误", "程序名称不能为空!") - return - try: - if ProgramRunStatusUpload.sha1Value == "": - ProgramRunStatusUpload.sha1Value = ProgramRunStatusUpload.GetSHA1(e2.currentText()) - QtWidgets.QMessageBox.information(None, transla.transe("U", "提示"), json.loads(requests.post(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0OjMwMjUw").decode("utf-8"), { - "SHA1": ProgramRunStatusUpload.sha1Value, - "Name": ProgramRunStatusUpload.programName.text(), - "Fen": ProgramRunStatusUpload.fen.currentIndex(), - "Wine": o1.currentText() - }).text)["Error"]) - except: - traceback.print_exc() - QtWidgets.QMessageBox.critical(None, transla.transe("U", "错误"), transla.transe("U", "数据上传失败!")) - - def GetSHA1(filePath): - sha1 = hashlib.sha1() - file = open(filePath, "rb") - while True: - readByte = file.read(1024 * 1024) - sha1.update(readByte) - if not readByte: - break - file.close() - return sha1.hexdigest() class ProgramSetting(): wineBottonA = None @@ -1806,10 +1347,6 @@ uninstallProgram.clicked.connect(lambda: RunWineProgram(f"{programPath}/geek.exe programManager.addWidget(QtWidgets.QLabel(" "*5), 1, 3, 1, 1) programManager.addWidget(uninstallProgram, 1, 4, 1, 1) programManager.addWidget(QtWidgets.QLabel(" "*5), 1, 5, 1, 1) -programManager.addWidget(QtWidgets.QLabel(" "*5), 1, 7, 1, 1) -getProgramStatus = QtWidgets.QPushButton(transla.transe("U", "获取该程序运行情况")) -getProgramStatus.clicked.connect(ProgramRunStatusShow.ShowWindow) -programManager.addWidget(getProgramStatus, 1, 8, 1, 1) programManager.addItem(QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum), 1, 11, 1, 1) programManager.addWidget(QtWidgets.QLabel(transla.transe("U", "WINE配置:")), 2, 0, 1, 1) wineConfig = QtWidgets.QPushButton(transla.transe("U", "配置容器")) @@ -1898,7 +1435,6 @@ cleanBottonUOS = QtWidgets.QAction(transla.transe("U", "清理 Wine 容器(基 wineKeyboardLnk = QtWidgets.QAction(transla.transe("U", "Wine 快捷键映射")) easyPackager = QtWidgets.QAction(QtGui.QIcon.fromTheme("deb"), transla.transe("U", "使用简易打包器进行打包(小白且无特殊需求建议使用这个)")) getDllOnInternet = QtWidgets.QAction(QtGui.QIcon.fromTheme("1CD8_rundll32.0"), transla.transe("U", "从互联网获取DLL")) -w7 = QtWidgets.QAction(transla.transe("U", "从镜像获取DLL(只支持官方安装镜像,DOS内核如 Windows 95 暂不支持)")) updateGeek = QtWidgets.QAction(transla.transe("U", "从 Geek Uninstaller 官网升级程序")) deletePartIcon = QtWidgets.QAction(transla.transe("U", "快捷方式管理工具")) deleteDesktopIcon = QtWidgets.QAction(transla.transe("U", "删除所有 Wine 程序在启动器的快捷方式")) @@ -1912,7 +1448,6 @@ wineOption.addSeparator() wineOption.addAction(wineKeyboardLnk) wineOption.addSeparator() wineOption.addAction(getDllOnInternet) -wineOption.addAction(w7) wineOption.addSeparator() wineOption.addAction(updateGeek) wineOption.addSeparator() @@ -1936,7 +1471,6 @@ cleanBottonUOS.triggered.connect(CleanWineBottonByUOS) easyPackager.triggered.connect(lambda: threading.Thread(target=os.system, args=[f"'{programPath}/deepin-wine-easy-packager.py' '{e2.currentText()}'"]).start()) wineKeyboardLnk.triggered.connect(lambda: threading.Thread(target=os.system, args=[f"'{programPath}/key/key-add-gui.py'"]).start()) getDllOnInternet.triggered.connect(GetDllFromInternet) -w7.triggered.connect(GetDllFromWindowsISO.ShowWindow) updateGeek.triggered.connect(lambda: os.system(f"'{programPath}/launch.sh' deepin-terminal -C '\"{programPath}/UpdateGeek.sh\"' --keep-open")) wm2_1.triggered.connect(lambda: RunWineProgram("control")) wm2_2.triggered.connect(lambda: RunWineProgram("iexplore' 'https://gfdgd-xi.github.io"))