diff --git a/DisabledOpengl.reg b/DisabledOpengl.reg new file mode 100644 index 0000000..868bd2a Binary files /dev/null and b/DisabledOpengl.reg differ diff --git a/EnabledOpengl.reg b/EnabledOpengl.reg new file mode 100644 index 0000000..3a0d396 Binary files /dev/null and b/EnabledOpengl.reg differ diff --git a/InstallMsxml.py b/InstallMsxml.py new file mode 100755 index 0000000..209ba87 --- /dev/null +++ b/InstallMsxml.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python3 +import os +import sys + +if "--help" in sys.argv: + print("作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢") + print("版本:1.0.0") + print("本程序可以更方便的在 wine 容器中安装 MSXML") + sys.exit() +if len(sys.argv) <= 2 or sys.argv[1] == "" or sys.argv[2] == "": + print("您未指定需要安装 MSXML 的容器和使用的 wine,无法继续") + print("参数:") + print("XXX 参数一 参数二") + print("参数一为需要安装的容器,参数二为需要使用的wine,两个参数位置不能颠倒") + sys.exit() + +msxmlList = [ + ["MSXML 4.0 SP2", "https://www.gitlink.org.cn/api/attachments/390679?gfdgd_xi"], + ["MSXML 4.0 SP3", "https://www.gitlink.org.cn/api/attachments/390678?gfdgd_xi"], + ["MSXML 6.0", "https://www.gitlink.org.cn/api/attachments/390681?gfdgd_xi"] +] +print("请选择以下的 MSXML 进行安装(不保证能正常安装运行)") +for i in range(0, len(msxmlList)): + print(f"{i}、{msxmlList[i][0]}") +while True: + try: + choose = int(input("请输入要选择要安装的 MSXML:")) + except: + print("输入错误,请重新输入") + continue + if 0 <= choose and choose < len(msxmlList): + break +print(f"您选择了 {msxmlList[choose][0]}") +print("开始下载") +os.system("rm -rfv /tmp/wineinstallmsxml") +os.system("mkdir -p /tmp/wineinstallmsxml") +os.system(f"aria2c -x 16 -s 16 -d /tmp/wineinstallmsxml -o install.msi \"{msxmlList[choose][1]}\"") +print("开始安装") +os.system(f"WINEPREFIX={sys.argv[1]} {sys.argv[2]} msiexec /i /tmp/wineinstallmsxml/install.msi") +print("安装结束") +sys.exit() \ No newline at end of file diff --git a/InstallOther.py b/InstallOther.py new file mode 100644 index 0000000..59822a4 --- /dev/null +++ b/InstallOther.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 +import os +import sys + +if "--help" in sys.argv: + print("作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢") + print("版本:1.0.0") + print("本程序可以更方便的在 wine 容器中安装运行库") + sys.exit() +if len(sys.argv) <= 2 or sys.argv[1] == "" or sys.argv[2] == "": + print("您未指定需要安装的容器和使用的 wine,无法继续") + print("参数:") + print("XXX 参数一 参数二") + print("参数一为需要安装的容器,参数二为需要使用的wine,两个参数位置不能颠倒") + sys.exit() + +msxmlList = [ + ["Windows Script 5.7 for Windows XP", "https://download.microsoft.com/download/f/f/e/ffea3abf-b55f-4924-b5a5-bde0805ad67c/scripten.exe", "exe"], + ["Windows Management Instrumentation 1.50.1131", "https://www.gitlink.org.cn/api/attachments/390680", "exe"] +] +print("请选择以下的应用进行安装(不保证能正常安装运行)") +for i in range(0, len(msxmlList)): + print(f"{i}、{msxmlList[i][0]}") +while True: + try: + choose = int(input("请输入要选择要安装的应用:")) + except: + print("输入错误,请重新输入") + continue + if 0 <= choose and choose < len(msxmlList): + break +print(f"您选择了{msxmlList[choose][0]}") +print("开始下载") +os.system("rm -rf /tmp/wineinstall") +os.system("mkdir -p /tmp/wineinstall") +if msxmlList[choose][2] == "msi": + os.system(f"aria2c -x 16 -s 16 -d /tmp/wineinstall -o install.msi \"{msxmlList[choose][1]}\"") + print("开始安装") + os.system(f"WINEPREFIX={sys.argv[1]} {sys.argv[2]} msiexec /i /tmp/wineinstall/install.msi") + print("安装结束") + sys.exit() +if msxmlList[choose][2] == "exe": + os.system(f"aria2c -x 16 -s 16 -d /tmp/wineinstall -o install.exe \"{msxmlList[choose][1]}\"") + print("开始安装") + os.system(f"WINEPREFIX={sys.argv[1]} {sys.argv[2]} /tmp/wineinstall/install.exe") + print("安装结束") + sys.exit() + pass \ No newline at end of file diff --git a/deb/DEBIAN/control b/deb/DEBIAN/control index db9d3ad..89dab7d 100644 --- a/deb/DEBIAN/control +++ b/deb/DEBIAN/control @@ -1,10 +1,10 @@ Package: spark-deepin-wine-runner -Version: 1.5.3 +Version: 1.6.0 Maintainer: gfdgd xi <3025613752@qq.com>, 为什么您不喜欢熊出没和阿布呢 Homepage: https://gitee.com/gfdgd-xi/deep-wine-runner Architecture: all Priority: optional -Depends: python3, python3-tk, python3-pip, python3-pil, python3-pil.imagetk, python3-pyquery, deepin-terminal, aria2, curl +Depends: python3, python3-tk, python3-pip, python3-pil, python3-pil.imagetk, python3-pyquery, deepin-terminal, aria2, curl, unrar, unzip, python3-requests Conflicts: spark.deepin-venturi-setter, spark-deepin-wine5-application-packer Replaces: spark.deepin-venturi-setter, spark-deepin-wine5-application-packer Description: gfdgd xi 制作的 wine 运行器 diff --git a/deb/DEBIAN/postinst b/deb/DEBIAN/postinst index 187aaab..11fd17b 100755 --- a/deb/DEBIAN/postinst +++ b/deb/DEBIAN/postinst @@ -1,5 +1,6 @@ # !/bin/sh -python3 -m pip install --upgrade ttkthemes -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com +python3 -m pip install --upgrade ttkthemes -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com python3 -m pip install --upgrade ttkbootstrap -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com +python3 -m pip install --upgrade easygui -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com # 向服务器返回安装数加1(不显示内容且忽略错误) curl http://120.25.153.144/spark-deepin-wine-runner/Install.php?Version=1.5.3 -s > /dev/null | true diff --git a/deepin-wine-runner-update-bug b/deepin-wine-runner-update-bug new file mode 100755 index 0000000..a0756a8 --- /dev/null +++ b/deepin-wine-runner-update-bug @@ -0,0 +1,133 @@ +#!/usr/bin/env python3 +import os +import json +import base64 +import requests +import ttkthemes +import traceback +import webbrowser +import tkinter as tk +import tkinter.ttk as ttk +import tkinter.messagebox as messagebox +import urllib.parse as parse + +# 读取文本文档 +def readtxt(path: "路径")->"读取文本文档": + f = open(path, "r") # 设置文件对象 + str = f.read() # 获取内容 + f.close() # 关闭文本对象 + return str # 返回结果 + +def Update(name, stars, contact, things, version): + # post 内容 + data = { + "Name": name, + "Starts": stars, + "Contact": contact, + "Things": things, + "Version": version + } + try: + messagebox.showinfo(message=requests.post(parse.unquote(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci9idWcvdXBsb2FkLnBocA==").decode("utf-8")), data=data).text) + except: + traceback.print_exc() + messagebox.showerror(title="错误", message="服务器疑似出现错误,可以进行以下尝试:①多尝试几次;②使用其他反馈途径\n错误信息:{}".format(traceback.format_exc())) + +def UpdateButtonClick(): + #判断是否为空 + if nameThings.get() == "" or starValue.get() == "" or contactThings.get() == "" or updateThings.get(1.0, "end").replace(" ", "").replace("\n", "") == "": + messagebox.showerror(title="错误", message="反馈信息未填写完整!") + return + Update(name=nameThings.get(), stars=starValue.get(), contact=contactThings.get(), things=updateThings.get(1.0, "end"), version=version) + +def OpenGiteeIssues(): + webbrowser.open_new_tab("https://gitee.com/gfdgd-xi/deep-wine-runner/issues") + +def OpenGithubIssues(): + webbrowser.open_new_tab("https://github.com/gfdgd-xi/deep-wine-runner/issues") + +def OpenGitlinkIssues(): + webbrowser.open_new_tab("https://www.gitlink.org.cn/gfdgd_xi/deep-wine-runner/issues") + +# 获取用户主目录 +def get_home()->"获取用户主目录": + return os.path.expanduser('~') + +########################### +# 程序信息 +########################### +iconPath = "{}/icon.png".format(os.path.split(os.path.realpath(__file__))[0]) +programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string +information = json.loads(readtxt(programPath + "/information.json")) +version = information["Version"] + +########################### +# 窗口创建 +########################### +# 读取主题 +try: + theme = not ("dark" in readtxt(get_home() + "/.gtkrc-2.0") and "gtk-theme-name=" in readtxt(get_home() + "/.gtkrc-2.0")) +except: + print("主题读取错误,默认使用浅色主题") + theme = True +if theme: + window = tk.Tk() + themes = ttkthemes.ThemedStyle(window) + themes.set_theme("breeze") +else: + import ttkbootstrap + style = ttkbootstrap.Style(theme="darkly") + window = style.master # 创建窗口 +win = ttk.Frame() + +starValue = tk.StringVar() +starValue.set("5分") + +name = ttk.Label(win, text="你的昵称:") +nameThings = ttk.Entry(win, width=25) + +contact = ttk.Label(win, text="联系方式(电子邮箱):") +contactThings = ttk.Entry(win, width=25) + +star = ttk.Label(win, text="评分:") +starMenu = ttk.OptionMenu(win, starValue, "5分", "5分", "4分", "3分", "2分", "1分") + +updateThingsTips = ttk.Label(win, text="反馈内容(支持 Markdown 格式):") +updateThings = tk.Text(win, width=100) + +otherUpload = ttk.Frame(win) +# 所属内容 +tips = ttk.Label(otherUpload, text="如果无法正常反馈,可以用其他方式反馈:") +giteeButton = ttk.Button(otherUpload, text="Gitee Issues", command=OpenGiteeIssues) +githubButton = ttk.Button(otherUpload, text="Github Issues", command=OpenGithubIssues) +gitlinkButton = ttk.Button(otherUpload, text="Github Issues", command=OpenGitlinkIssues) + +updateButton = ttk.Button(win, text="提交", command=UpdateButtonClick) + +# 设置窗口 +window.title("Wine 运行器 {} 问题/建议反馈".format(version)) +window.resizable(0, 0) +window.iconphoto(False, tk.PhotoImage(file=iconPath)) + +tips.grid(row=0, column=0) +giteeButton.grid(row=0, column=1) +githubButton.grid(row=0, column=2) +gitlinkButton.grid(row=0, column=3) + +name.grid(row=0, column=0) +nameThings.grid(row=0, column=1) + +contact.grid(row=0, column=2) +contactThings.grid(row=0, column=3) + +star.grid(row=0, column=4) +starMenu.grid(row=0, column=5) + +updateThingsTips.grid(row=1, column=0, columnspan=2) +updateThings.grid(row=2, column=0, columnspan=6) + +otherUpload.grid(row=3, column=0, columnspan=4, sticky=tk.W) +updateButton.grid(row=3, column=5) + +win.pack(expand="yes", fill="both") +window.mainloop() \ No newline at end of file diff --git a/information.json b/information.json index 124e3d9..d48f0d7 100644 --- a/information.json +++ b/information.json @@ -1,3 +1,11 @@ { - "Version": "1.5.3" + "Version": "1.6.0", + "Thank": [ + "@a2035274 @虚幻的早晨 https://bbs.deepin.org/post/238301", + "@zhangs https://bbs.deepin.org/post/227948", + "@gtjmaster https://bbs.deepin.org/post/225509", + "@统信UCARE服务 https://mp.weixin.qq.com/s/iOdfNv6phc8F4inackFFTw", + "", + "可以从上面的各种解决方案更好的学习 Wine 生态适配,也可以看 deepin 论坛板块 https://bbs.deepin.org/module/detail/116 进行学习,最后也向各位有进行 Wine 生态适配的大佬进行由衷的更新!" + ] } \ No newline at end of file diff --git a/main.py b/main.py index c9e3272..7db0923 100755 --- a/main.py +++ b/main.py @@ -10,14 +10,13 @@ ################# # 引入所需的库 ################# -from asyncore import read -from email import message import os -from sqlite3 import TimeFromTicks import sys import time import json import shutil +import easygui +import requests import threading import traceback import ttkthemes @@ -100,9 +99,10 @@ def DisableButton(things): e1.configure(state=a[things]) e2.configure(state=a[things]) o1.configure(state=a[things]) - winetricksOpen.configure(state=a[things]) + #winetricksOpen.configure(state=a[things]) getProgramIcon.configure(state=a[things]) uninstallProgram.configure(state=a[things]) + trasButton.configure(state=a[things]) def CheckProgramIsInstall(program): return not bool(os.system(f"which '{program}'")) @@ -361,9 +361,10 @@ def RunWinetricks(): if not setting["Debug"]: option += "WINEDEBUG=-all " if setting["TerminalOpen"]: - res = subprocess.Popen([f"'{programPath}/launch.sh' deepin-terminal -C \"WINEPREFIX='" + option + wineBottonPath + "' winetricks\""], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + res = subprocess.Popen([f"'{programPath}/launch.sh' deepin-terminal -C \"WINEPREFIX='{wineBottonPath}' {option} WINE=" + subprocess.getoutput(f"which {wine[o1_text.get()]}").replace(" ", "").replace("\n", "") + " winetricks --gui\" --keep-open"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) else: - res = subprocess.Popen(["WINEPREFIX='" + option + wineBottonPath + "' winetricks"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + res = subprocess.Popen([f"WINEPREFIX='{wineBottonPath}' {option} WINE='" + subprocess.getoutput(f"which {wine[o1_text.get()]}").replace(" ", "").replace("\n", "") + "' winetricks --gui"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + #res = subprocess.Popen(["WINEPREFIX='" + option + wineBottonPath + "' winetricks"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) # 清空文本框内容 returnText.config(state=tk.NORMAL) returnText.delete(1.0, "end") @@ -407,6 +408,15 @@ def InstallVisualStudioCPlusPlus(): os.system(f"'{programPath}/launch.sh' deepin-terminal -C \"'{programPath}/InstallVisualCPlusPlus.py' '{wineBottonPath}' {wine[o1_text.get()]}\" --keep-open") DisableButton(False) +def InstallMSXML(): + DisableButton(True) + if e1.get() == "": + wineBottonPath = setting["DefultBotton"] + else: + wineBottonPath = e1.get() + os.system(f"'{programPath}/launch.sh' deepin-terminal -C \"'{programPath}/InstallMsxml.py' '{wineBottonPath}' {wine[o1_text.get()]}\" --keep-open") + DisableButton(False) + def BuildExeDeb(): if e1.get() == "": wineBottonPath = setting["DefultBotton"] @@ -447,6 +457,65 @@ def DeleteWineBotton(): traceback.print_exc() tkinter.messagebox.showerror(title="错误", message=traceback.format_exc()) +def ThankWindow(): + easygui.textbox(title="特别谢明", msg="感谢以下的大佬在 deepin 论坛、公众号等平台提供的 Wine 适配解决方案,现在将这些 Wine 适配方案加入此 Wine 运行器,对此有由衷的感谢!如果有侵犯到您的权利和意愿,请尽快与开发者联系删除在此程序内相关的内容:", text=thankText) + +def InstallWineFont(): + threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -C 'echo 这些字体来自星火应用商店 && sudo ss-apt-fast install ms-core-fonts winfonts -y' --keep-open"]).start() + +class UpdateWindow(): + data = {} + def ShowWindow(): + update = tk.Toplevel() + update.title("检查更新") + update.resizable(0, 0) + update.iconphoto(False, tk.PhotoImage(file=iconPath)) + versionLabel = ttk.Label(update, text="当前版本:{}\n最新版本:未知\n更新内容:".format(version)) + updateText = tk.Text(update) + controlFrame = ttk.Frame(update) + ok = ttk.Button(controlFrame, text="更新(更新过程中会关闭所有Python应用,包括这个应用)", command=UpdateWindow.Update) + cancel = ttk.Button(controlFrame, text="取消", command=update.destroy) + try: + UpdateWindow.data = json.loads(requests.get("http://120.25.153.144/spark-deepin-wine-runner/update.json").text) + versionLabel = ttk.Label(update, text="当前版本:{}\n最新版本:{}\n更新内容:".format(version, UpdateWindow.data["Version"])) + if UpdateWindow.data["Version"] == version: + updateText.insert("0.0", "此为最新版本,无需更新") + ok.configure(state=tk.DISABLED) + else: + updateText.insert("0.0", UpdateWindow.data["New"].replace("\\n", "\n")) + except: + traceback.print_exc() + tkinter.messagebox.showerror(title="错误", message="无法连接服务器!") + updateText.configure(state=tk.DISABLED) + versionLabel.pack(anchor=tk.W) + updateText.pack() + controlFrame.pack(anchor=tk.E) + cancel.grid(row=0, column=0) + ok.grid(row=0, column=1) + update.mainloop() + def Update(): + if not os.path.exists("/tmp/uengine-runner/update"): + os.makedirs("/tmp/spark-deepin-wine-runner/update") + try: + write_txt("/tmp/spark-deepin-wine-runner/update.sh", f"""#!/bin/bash +echo 删除多余的安装包 +rm -rfv /tmp/spark-deepin-wine-runner/update/* +echo 关闭“UEngine 运行器”以及其它“Python 应用” +killall python3 +echo 下载安装包 +wget -P /tmp/spark-deepin-wine-runner/update {UpdateWindow.data["Url"][0], iconPath} +echo 安装安装包 +dpkg -i /tmp/spark-deepin-wine-runner/update/*.deb +echo 修复依赖关系 +apt install -f -y +notify-send -i "{iconPath}" "更新完毕!" +zenity --info --text=\"更新完毕!\" --ellipsize +""") + except: + traceback.print_exc() + easygui.textbox(title="错误", msg="更新出现错误,无法继续更新!", text=traceback.format_exc()) + os.system(f"'{programPath}/launch.sh' deepin-terminal -e pkexec bash /tmp/spark-deepin-wine-runner/update.sh") + class GetDllFromWindowsISO: wineBottonPath = get_home() + "/.wine" isoPath = None#ttk.Entry() @@ -766,6 +835,9 @@ updateThingsString = '''※1、新增专门的程序设置,支持设置 Wine title = "wine 运行器 {}".format(version) updateTime = "2022年07月07日" updateThings = "{} 更新内容:\n{}\n更新时间:{}".format(version, updateThingsString, updateTime, time.strftime("%Y")) +thankText = "" +for i in information["Thank"]: + thankText += f"{i}\n" ########################### @@ -798,13 +870,14 @@ button1 = ttk.Button(window, text="浏览", command=liulanbutton) # 创建按 button2 = ttk.Button(window, text="浏览", command=liulanexebutton) # 创建按钮控件 button3 = ttk.Button(controlFrame, text="启动", command=runexebutton) # 创建按钮控件 killProgram = ttk.Button(controlFrame, text="停止", command=KillProgram) -openWineBotton = ttk.Button(controlFrame, text="打开Wine容器目录", command=OpenWineBotton) -installWineFont = ttk.Button(controlFrame, text="安装字体", command=OpenWineFontPath) +#openWineBotton = ttk.Button(controlFrame, text="打开Wine容器目录", command=OpenWineBotton) +#installWineFont = ttk.Button(controlFrame, text="安装字体", command=OpenWineFontPath) uninstallProgram = ttk.Button(controlFrame, text="卸载程序", command=UninstallProgram) wineConfig = ttk.Button(controlFrame, text="配置wine容器", command=ConfigWineBotton) sparkWineSetting = ttk.Button(controlFrame, text="星火wine设置", command=lambda: threading.Thread(target=os.system, args=["/opt/durapps/spark-dwine-helper/spark-dwine-helper-settings/settings.sh"]).start()) getProgramIcon = ttk.Button(controlFrame, text="获取选择的程序图标", command=lambda: threading.Thread(target=RunWineProgram, args=[f"{programPath}/Run.bat' '{programPath}/BeCyIconGrabber.exe' '{e2.get()}"]).start()) -winetricksOpen = ttk.Button(controlFrame, text="使用winetricks打开指定容器(只能使用wine和wine64)", command=lambda: threading.Thread(target=RunWinetricks).start()) +trasButton = ttk.Button(controlFrame, text="窗口透明度工具", command=lambda: threading.Thread(target=RunWineProgram, args=[programPath + "/窗体透明度设置工具.exe"]).start()) +#winetricksOpen = ttk.Button(controlFrame, text="使用winetricks打开指定容器(只能使用wine和wine64)", command=lambda: threading.Thread(target=RunWinetricks).start()) button5 = ttk.Button(sendFrame, text="创建用于运行的 desktop 文件到桌面", command=make_desktop_on_desktop) # 创建按钮控件 saveDesktopFileOnLauncher = ttk.Button(sendFrame, text="创建用于运行的 desktop 文件到启动器", command=make_desktop_on_launcher) # 创建按钮控件 label1 = ttk.Label(window, text="选择你想要使用的 wine 容器:") # 创建标签控件 @@ -827,12 +900,18 @@ programmenu.add_separator() # 设置分界线 programmenu.add_command(label="退出程序", command=window.quit) # 设置“退出程序”项 wineOption = tk.Menu(menu, tearoff=0, background="white") # 设置“Wine”菜单栏 menu.add_cascade(label="Wine", menu=wineOption) +wineOption.add_command(label="打开 Wine 容器目录", command=OpenWineBotton) +wineOption.add_command(label="安装常见字体", command=InstallWineFont) +wineOption.add_command(label="安装自定义字体", command=OpenWineFontPath) +wineOption.add_command(label="删除选择的 Wine 容器", command=DeleteWineBotton) +wineOption.add_separator() wineOption.add_command(label="打包 wine 应用", command=BuildExeDeb) wineOption.add_separator() wineOption.add_command(label="从镜像获取DLL(只支持Windows XP、Windows Server 2003官方安装镜像)", command=GetDllFromWindowsISO.ShowWindow) wineOption.add_separator() wineOption.add_command(label="在指定wine、指定容器安装 .net framework", command=lambda: threading.Thread(target=InstallNetFramework).start()) wineOption.add_command(label="在指定wine、指定容器安装 Visual Studio C++", command=lambda: threading.Thread(target=InstallVisualStudioCPlusPlus).start()) +wineOption.add_command(label="在指定wine、指定容器安装 MSXML", command=lambda: threading.Thread(target=InstallMSXML).start()) wineOption.add_command(label="在指定wine、指定容器安装 gecko", command=lambda: threading.Thread(target=InstallMonoGecko, args=["gecko"]).start()) wineOption.add_command(label="在指定wine、指定容器安装 mono", command=lambda: threading.Thread(target=InstallMonoGecko, args=["mono"]).start()) wineOption.add_separator() @@ -840,19 +919,39 @@ wineOption.add_command(label="打开指定wine、指定容器的控制面板", c wineOption.add_command(label="打开指定wine、指定容器的浏览器", command=lambda: threading.Thread(target=RunWineProgram, args=["iexplore' 'https://www.deepin.org"]).start()) wineOption.add_command(label="打开指定wine、指定容器的注册表", command=lambda: threading.Thread(target=RunWineProgram, args=["regedit"]).start()) wineOption.add_command(label="打开指定wine、指定容器的任务管理器", command=lambda: threading.Thread(target=RunWineProgram, args=["taskmgr"]).start()) +wineOption.add_command(label="打开指定wine、指定容器的资源管理器", command=lambda: threading.Thread(target=RunWineProgram, args=["explorer"]).start()) wineOption.add_command(label="打开指定wine、指定容器的关于 wine", command=lambda: threading.Thread(target=RunWineProgram, args=["winver"]).start()) wineOption.add_separator() wineOption.add_command(label="设置 run_v3.sh 的文管为 Deepin 默认文管", command=SetDeepinFileDialogDeepin) wineOption.add_command(label="设置 run_v3.sh 的文管为 Wine 默认文管", command=SetDeepinFileDialogDefult) wineOption.add_command(label="重新安装 deepin-wine-helper", command=SetDeepinFileDialogRecovery) wineOption.add_separator() -wineOption.add_command(label="删除选择的 wine 容器", command=DeleteWineBotton) +wineOption.add_command(label="使用winetricks打开指定容器(只能使用wine和wine64)", command=lambda: threading.Thread(target=RunWinetricks).start()) +wineOption.add_separator() +opengl = tk.Menu() +opengl.add_command(label="开启 opengl", command=lambda: threading.Thread(target=RunWineProgram, args=[f"regedit.exe' /s '{programPath}/EnabledOpengl.reg"]).start()) +opengl.add_command(label="禁用 opengl", command=lambda: threading.Thread(target=RunWineProgram, args=[f"regedit.exe' /s '{programPath}/DisabledOpengl.reg"]).start()) +wineOption.add_cascade(label="启用/禁用 opengl", menu=opengl) +winbind = tk.Menu() +winbind.add_command(label="安装 winbind", command=lambda: os.system(f"'{programPath}/launch.sh' deepin-terminal -C 'pkexec apt install winbind -y' --keep-open")) +winbind.add_command(label="卸载 winbind", command=lambda: os.system(f"'{programPath}/launch.sh' deepin-terminal -C 'pkexec apt purge winbind -y' --keep-open")) +wineOption.add_cascade(label="安装/卸载 winbind", menu=winbind) +safeWebsize = tk.Menu(menu, tearoff=0, background="white") +menu.add_cascade(label="云沙箱", menu=safeWebsize) +safeWebsize.add_command(label="360 沙箱云", command=lambda: webbrowser.open_new_tab("https://ata.360.net/")) +safeWebsize.add_command(label="微步云沙箱", command=lambda: webbrowser.open_new_tab("https://s.threatbook.cn/")) +safeWebsize.add_command(label="VIRUSTOTAL", command=lambda: webbrowser.open_new_tab("https://www.virustotal.com/")) + help = tk.Menu(menu, tearoff=0, background="white") # 设置“帮助”菜单栏 + menu.add_cascade(label="帮助", menu=help) help.add_command(label="程序官网", command=OpenProgramURL) # 设置“程序官网”项 help.add_separator() help.add_command(label="小提示", command=helps) # 设置“小提示”项 help.add_command(label="更新内容", command=UpdateThings) # 设置“更新内容”项 +help.add_command(label="谢明名单", command=ThankWindow) +help.add_separator() +help.add_command(label="更新这个程序", command=UpdateWindow.ShowWindow) help.add_command(label="关于这个程序", command=about_this_program) # 设置“关于这个程序”项 help.add_separator() moreProgram = tk.Menu(menu, tearoff=0, background="white") @@ -890,13 +989,14 @@ button2.grid(row=1, column=2) controlFrame.grid(row=3, column=0, columnspan=3) button3.grid(row=0, column=0) killProgram.grid(row=0, column=1) -openWineBotton.grid(row=0, column=2) -installWineFont.grid(row=0, column=3) -uninstallProgram.grid(row=0, column=4) -wineConfig.grid(row=0, column=5) -sparkWineSetting.grid(row=0, column=6) -getProgramIcon.grid(row=0, column=7) -winetricksOpen.grid(row=0, column=8) +#openWineBotton.grid(row=0, column=2) +#installWineFont.grid(row=0, column=3) +uninstallProgram.grid(row=0, column=2) +wineConfig.grid(row=0, column=3) +sparkWineSetting.grid(row=0, column=4) +getProgramIcon.grid(row=0, column=5) +#winetricksOpen.grid(row=0, column=8) +trasButton.grid(row=0, column=6) sendFrame.grid(row=5, column=0, columnspan=3) button5.grid(row=0, column=0) saveDesktopFileOnLauncher.grid(row=0, column=1) diff --git a/窗体透明度设置工具.exe b/窗体透明度设置工具.exe new file mode 100644 index 0000000..b5c4756 Binary files /dev/null and b/窗体透明度设置工具.exe differ