├── update ├── version └── PvzLauncher_.exe ├── icon.ico ├── assets ├── add.png ├── qq.png ├── about.png ├── cancel.png ├── close.png ├── delete.png ├── done.png ├── edit.png ├── error.png ├── folder.png ├── game.png ├── gitee.png ├── github.png ├── home.png ├── icon.ico ├── icon.png ├── launch.png ├── save.png ├── save_.png ├── select.png ├── update.png ├── PvZ_Logo.png ├── bilibili.png ├── download.png ├── refresh.png ├── replace.png ├── settings.png ├── victroy.png ├── PvZ_Logo_zh.png ├── PvzToolkit.png ├── PvzToolkit_.png ├── alphatest.png ├── download_.png ├── settings_.png ├── titlescreen.png ├── icon_outline.png ├── miss_texture.png ├── Readme │ ├── Main_Page.png │ └── SetGame.png ├── titlescreen_home.png ├── titlescreen_ori.png └── titlescreen_home_.png ├── App.config ├── packages.config ├── Properties ├── Settings.settings ├── AssemblyInfo.cs ├── Settings.Designer.cs ├── Resources.resx └── Resources.Designer.cs ├── Program.cs ├── PVZLauncher.sln ├── PvzLauncher.sln ├── README.md ├── .gitattributes ├── DownloadService └── index.ini ├── SetName_Window.Designer.cs ├── Download_Window.Designer.cs ├── README.en.md ├── Download_Window.resx ├── SelectGame_Window.resx ├── SetGame_Window.resx ├── .gitignore ├── SelectGame_Window.Designer.cs ├── PVZLauncher.csproj ├── SetName_Window.resx ├── Main_Window.resx ├── SetGame_Window.Designer.cs ├── LICENSE.txt └── SetName_Window.cs /update/version: -------------------------------------------------------------------------------- 1 | LTS 1.3 -------------------------------------------------------------------------------- /icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/icon.ico -------------------------------------------------------------------------------- /assets/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/add.png -------------------------------------------------------------------------------- /assets/qq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/qq.png -------------------------------------------------------------------------------- /assets/about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/about.png -------------------------------------------------------------------------------- /assets/cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/cancel.png -------------------------------------------------------------------------------- /assets/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/close.png -------------------------------------------------------------------------------- /assets/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/delete.png -------------------------------------------------------------------------------- /assets/done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/done.png -------------------------------------------------------------------------------- /assets/edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/edit.png -------------------------------------------------------------------------------- /assets/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/error.png -------------------------------------------------------------------------------- /assets/folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/folder.png -------------------------------------------------------------------------------- /assets/game.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/game.png -------------------------------------------------------------------------------- /assets/gitee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/gitee.png -------------------------------------------------------------------------------- /assets/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/github.png -------------------------------------------------------------------------------- /assets/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/home.png -------------------------------------------------------------------------------- /assets/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/icon.ico -------------------------------------------------------------------------------- /assets/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/icon.png -------------------------------------------------------------------------------- /assets/launch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/launch.png -------------------------------------------------------------------------------- /assets/save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/save.png -------------------------------------------------------------------------------- /assets/save_.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/save_.png -------------------------------------------------------------------------------- /assets/select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/select.png -------------------------------------------------------------------------------- /assets/update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/update.png -------------------------------------------------------------------------------- /assets/PvZ_Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/PvZ_Logo.png -------------------------------------------------------------------------------- /assets/bilibili.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/bilibili.png -------------------------------------------------------------------------------- /assets/download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/download.png -------------------------------------------------------------------------------- /assets/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/refresh.png -------------------------------------------------------------------------------- /assets/replace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/replace.png -------------------------------------------------------------------------------- /assets/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/settings.png -------------------------------------------------------------------------------- /assets/victroy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/victroy.png -------------------------------------------------------------------------------- /assets/PvZ_Logo_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/PvZ_Logo_zh.png -------------------------------------------------------------------------------- /assets/PvzToolkit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/PvzToolkit.png -------------------------------------------------------------------------------- /assets/PvzToolkit_.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/PvzToolkit_.png -------------------------------------------------------------------------------- /assets/alphatest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/alphatest.png -------------------------------------------------------------------------------- /assets/download_.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/download_.png -------------------------------------------------------------------------------- /assets/settings_.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/settings_.png -------------------------------------------------------------------------------- /assets/titlescreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/titlescreen.png -------------------------------------------------------------------------------- /assets/icon_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/icon_outline.png -------------------------------------------------------------------------------- /assets/miss_texture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/miss_texture.png -------------------------------------------------------------------------------- /update/PvzLauncher_.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/update/PvzLauncher_.exe -------------------------------------------------------------------------------- /assets/Readme/Main_Page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/Readme/Main_Page.png -------------------------------------------------------------------------------- /assets/Readme/SetGame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/Readme/SetGame.png -------------------------------------------------------------------------------- /assets/titlescreen_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/titlescreen_home.png -------------------------------------------------------------------------------- /assets/titlescreen_ori.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/titlescreen_ori.png -------------------------------------------------------------------------------- /assets/titlescreen_home_.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/isHuaMouRen/PvzLauncher/HEAD/assets/titlescreen_home_.png -------------------------------------------------------------------------------- /App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using System.Windows.Forms; 6 | 7 | namespace PvzLauncher 8 | { 9 | static class Program 10 | { 11 | /// 12 | /// 应用程序的主入口点。 13 | /// 14 | [STAThread] 15 | static void Main() 16 | { 17 | Application.EnableVisualStyles(); 18 | Application.SetCompatibleTextRenderingDefault(false); 19 | Application.Run(new Main_Window()); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // 有关程序集的一般信息由以下 6 | // 控制。更改这些特性值可修改 7 | // 与程序集关联的信息。 8 | [assembly: AssemblyTitle("PvzLauncher")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("PvzLauncher")] 13 | [assembly: AssemblyCopyright("Copyright © 2025")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // 将 ComVisible 设置为 false 会使此程序集中的类型 18 | //对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 19 | //请将此类型的 ComVisible 特性设置为 true。 20 | [assembly: ComVisible(false)] 21 | 22 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID 23 | [assembly: Guid("4ef7a88c-22b0-4656-953f-6e9cb1cb7af6")] 24 | 25 | // 程序集的版本信息由下列四个值组成: 26 | // 27 | // 主版本 28 | // 次版本 29 | // 生成号 30 | // 修订号 31 | // 32 | [assembly: AssemblyVersion("1.1.3.7")] 33 | [assembly: AssemblyFileVersion("1.1.3.7")] 34 | -------------------------------------------------------------------------------- /Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // 此代码由工具生成。 4 | // 运行时版本:4.0.30319.42000 5 | // 6 | // 对此文件的更改可能会导致不正确的行为,并且如果 7 | // 重新生成代码,这些更改将会丢失。 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace PvzLauncher.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.13.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /PVZLauncher.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.13.35828.75 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PvzLauncher", "PvzLauncher.csproj", "{4EF7A88C-22B0-4656-953F-6E9CB1CB7AF6}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UpdateService", "..\UpdateService\UpdateService.csproj", "{161B5335-F8E3-4143-ABF4-D211268D9A79}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Release|x64 = Release|x64 13 | EndGlobalSection 14 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 15 | {4EF7A88C-22B0-4656-953F-6E9CB1CB7AF6}.Release|x64.ActiveCfg = Release|x64 16 | {4EF7A88C-22B0-4656-953F-6E9CB1CB7AF6}.Release|x64.Build.0 = Release|x64 17 | {161B5335-F8E3-4143-ABF4-D211268D9A79}.Release|x64.ActiveCfg = Release|Any CPU 18 | {161B5335-F8E3-4143-ABF4-D211268D9A79}.Release|x64.Build.0 = Release|Any CPU 19 | EndGlobalSection 20 | GlobalSection(SolutionProperties) = preSolution 21 | HideSolutionNode = FALSE 22 | EndGlobalSection 23 | GlobalSection(ExtensibilityGlobals) = postSolution 24 | SolutionGuid = {53E6F259-FB16-4548-82F7-9A0B3B9C7FF0} 25 | EndGlobalSection 26 | EndGlobal 27 | -------------------------------------------------------------------------------- /PvzLauncher.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.13.35828.75 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PvzLauncher", "PvzLauncher.csproj", "{4EF7A88C-22B0-4656-953F-6E9CB1CB7AF6}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UpdateService", "..\UpdateService\UpdateService.csproj", "{161B5335-F8E3-4143-ABF4-D211268D9A79}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Release|x64 = Release|x64 13 | EndGlobalSection 14 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 15 | {4EF7A88C-22B0-4656-953F-6E9CB1CB7AF6}.Release|x64.ActiveCfg = Release|x64 16 | {4EF7A88C-22B0-4656-953F-6E9CB1CB7AF6}.Release|x64.Build.0 = Release|x64 17 | {161B5335-F8E3-4143-ABF4-D211268D9A79}.Release|x64.ActiveCfg = Release|Any CPU 18 | {161B5335-F8E3-4143-ABF4-D211268D9A79}.Release|x64.Build.0 = Release|Any CPU 19 | EndGlobalSection 20 | GlobalSection(SolutionProperties) = preSolution 21 | HideSolutionNode = FALSE 22 | EndGlobalSection 23 | GlobalSection(ExtensibilityGlobals) = postSolution 24 | SolutionGuid = {53E6F259-FB16-4548-82F7-9A0B3B9C7FF0} 25 | EndGlobalSection 26 | EndGlobal 27 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # [归档声明]植物大战僵尸启动器 2 | 此项目在制作时有很多想法没有实现。于是在发布最终版发布5个月后。我们使用WPF制作了一个重置版 3 | 4 | [点我跳转到新仓库](https://github.com/isHuaMouRen/PvzLauncher-Remake) 5 | 6 | (继续向下翻可查看自述文件) 7 | 8 | **项目名称**:植物大战僵尸启动器 9 | **版本状态**:长期支持版 (LTS) 10 | **归档日期**:2025年6月1日 11 | 12 | ## 📢 声明内容 13 | 14 | 本项目 **《植物大战僵尸启动器》** 的开发工作已全部完成,并发布最终稳定版本(LTS 1.3)。即日起,项目进入**归档状态(Archived)**,代表: 15 | 16 | 1. **功能完善**:所有设计功能均已实现,包括游戏快捷启动、版本切换、窗口化设置、存档管理等核心特性; 17 | 2. **停止更新**:不再新增功能或修复非严重性问题; 18 | 3. **永久可用**:最终版程序将持续提供下载,兼容当前主流系统环境。 19 | 4. **游戏库保留**:游戏库游戏数量达到使用需求后,将不再更新 20 | 21 | 22 | ## 🙏 致谢 23 | 感谢所有测试用户、社区贡献者及植物大战僵尸爱好者对本项目的支持!本工具旨在优化游戏体验,请合法使用正版游戏资源。 24 | 25 | ## ⚠️ 版权说明 26 | 本启动器为**非官方、免费工具**,仅供学习交流。 27 | 《植物大战僵尸》是 PopCap Games 的注册商标,版权归属其所有者。 28 | 29 | ## 🔗 获取最终版 30 | 项目主页:`https://github.com/bilibilihuazi/PvzLauncher` 31 | 32 | > **归档不是结束,而是项目的圆满结点** 33 | > 愿草坪上的向日葵永远向阳,僵尸永不越线 🌻🧟 34 | 35 | 36 |


37 | (↓自述文件↓) 38 | 39 | # Plants Vs Zombies Launcher 40 | 41 | ![主页面](assets/Readme/Main_Page.png) 42 | 43 | ## 概述 44 | 45 | **Plants Vs Zombies Launcher(植物大战僵尸启动器)** 是一款可以`启动、管理、修改、下载`游戏的多功能启动器 46 | 47 | ## 优点 48 | 49 | - **快捷启动游戏**:不必再去一个个找文件夹启动游戏了 50 | - **管理游戏**:可快捷更换、恢复pak包,有效提升了pak包的安装效率 51 | - **下载游戏**:可直接在启动器内下载`英文原版、中文原版、中文改版`等多个版本,省去了寻找游戏资源与安装游戏的时间 52 | - **修复游戏**:一键检测&修复游戏资,可解决无法寻找到`gdi42.dll`与`bass.dll`的问题 53 | - **修改游戏**:可以配置游戏窗口的**强制全屏**以及**窗口出现位置**的参数 54 | - **存档管理**:快捷删除存档、替换通关存档;还可以将每个版本的存档独立。 55 | - **修改器管理**:启动器发布时内置一个多功能修改器:**PvzToolkit**。如果想要添加其他修改器,可在设置内直接添加 56 | - **导入与虚拟导入**:可将游戏导入进启动器游戏库、统一管理游戏;虚拟导入则是为游戏体积大,不方便移动的情况制作的。(*仅写入游戏信息,启动时直接在源位置启动,不移动源文件*) 57 | 58 | ## 为什么要制作此启动器? 59 | 60 | 由于作者在玩植物大战僵尸时,切换改版以及管理游戏非常不方便。寻找改版也很困难。所以便制作了这款启动器,用于管理多个版本 61 | 62 | ## 依赖 63 | 64 | 此程序基于`.NET Framework 4.8`制作。使用`WinForm`框架,`AntdUI`库以及`ReaLTaiizorUI`库 65 | 66 | 如您的电脑没有安装`.NET Framework 4.8`,软件启动时会提示您去下载 67 | 68 | `AntdUI`库以及`ReaLTaiizorUI`库的依赖文件已在启动器发布时包含 69 | 70 | ## 开发者 71 | *排名不分前后* 72 | 73 | 代码(2): 74 | - **华某人** - 启动器所有的代码都由他独立完成 75 | - **DeepSeek** - 提供部分的代码支持 76 | 77 | 美术(3): 78 | - **YesIcon** - 程序所有的图标来演 79 | - **华某人** - 部分手绘图标 80 | - **PopCap Games** - 游戏资源图片 81 | 82 | 提供BUG反馈以及建议(3): 83 | - **华某人** - 自己在测试的时候就发现了不少BUG 84 | - **ewrtuikh** - 提出部分建议以及BUG反馈 85 | - **Fantasy-幻梦** - 提出部分建议以及BUG反馈 86 | - **小王** - 提出部分建议以及BUG反馈 87 | 88 | ## 加入我们 89 | 90 | 帮助我们更好的制作启动器并获得最新消息! 91 | - QQ交流群:`1040764053` 92 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /DownloadService/index.ini: -------------------------------------------------------------------------------- 1 | [index_ori_en] 2 | num=7 3 | 1=原版v1.0.0.1051[推荐] 4 | 2=内测版BloomAndDoom 5 | 3=Steam年度正版 6 | 4=年度加强版 7 | 5=原版v1.2.0.1065 8 | 6=年度试玩版 9 | 7=年度版v1.2.0.1073 10 | 11 | [ori_en] 12 | 年度加强版=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/iJF142xhq4sb 13 | 内测版BloomAndDoom=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/ipGaj2xhqn8f 14 | Steam年度正版=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/irD8v2xhq0ba 15 | 原版v1.0.0.1051[推荐]=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/iG6o32xhpwza 16 | 原版v1.2.0.1065=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/iH2ye2xhqtng 17 | 年度试玩版=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/ikiug2xhr26d 18 | 年度版v1.2.0.1073=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/iHctf2xhraid 19 | 20 | [index_ori_zh] 21 | num=5 22 | 1=汉化一版v1.0.0.1051[推荐] 23 | 2=Steam汉化版 24 | 3=汉化二版v1.0.0.1051 25 | 4=汉化版v1.2.0.1065 26 | 5=年度植吧完美汉化版v1.2.0.1065 27 | 28 | [ori_zh] 29 | Steam汉化版=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/iNIBB2xhrs3g 30 | 汉化一版v1.0.0.1051[推荐]=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/iDQuz2xhs4fa 31 | 汉化二版v1.0.0.1051=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/idLY02xhsaub 32 | 汉化版v1.2.0.1065=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/iZFH22xhseej 33 | 年度植吧完美汉化版v1.2.0.1065=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/iC7kR2xhsuwd 34 | 35 | [index_re_zh] 36 | num=4 37 | 1=beta版6.30-R1[推荐] 38 | 2=95版 39 | 3=鉴版 40 | 4=杂交版v3.7 41 | 42 | [re_zh] 43 | 95版=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/iAfDE2xht1ha 44 | beta版6.30-R1[推荐]=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/ish6M2xht58f 45 | 鉴版=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/ivtHp2xhtccb 46 | 杂交版v3.7=https://lz.qaiu.top/parser?url=https://www.ilanzou.com/s/Uk1Z7frK 47 | 48 | [index_trainer] 49 | num=17 50 | 1=PvzToolkit1.22.0[推荐] 51 | 2=IZ自制关卡快捷布阵器V1.1.0 52 | 3=随机数修改器 53 | 4=Steam正版七项修改器 54 | 5=植物大战僵尸修改器V1.7.1 55 | 6=植物大战僵尸修改器V1.8.7 56 | 7=植物大战僵尸修改器V1.9 57 | 8=植物大战僵尸修改器V4.6.3 58 | 9=变速齿轮 59 | 10=窗口缩放器 60 | 11=花瓶修改器 61 | 12=年度加强版修改器 62 | 13=咸鱼修改器 63 | 14=小王子出怪修改 64 | 15=血量显示 65 | 16=血量显示(映射版) 66 | 17=9项属性修改器 67 | 68 | [trainer] 69 | PvzToolkit1.22.0[推荐]=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/iPD6h2xmenkf 70 | 9项属性修改器=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/iOmWi2xl3izi 71 | IZ自制关卡快捷布阵器V1.1.0=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/iI53t2xl3qab 72 | 随机数修改器=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/i7vWg2xl3ugb 73 | Steam正版七项修改器=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/ifIHb2xl4bkh 74 | 植物大战僵尸修改器V1.7.1=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/i2xbk2xl4s7g 75 | 植物大战僵尸修改器V1.8.7=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/iHeyH2xl5aah 76 | 植物大战僵尸修改器V1.9=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/iM22v2xl5h4d 77 | 植物大战僵尸修改器V4.6.3=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/ilCvT2xl5l2f 78 | 变速齿轮=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/iLSlO2xl5uvi 79 | 窗口缩放器=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/ius1W2xl5y9a 80 | 花瓶修改器=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/ip5Uo2xl6bqf 81 | 年度加强版修改器=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/imoxf2xl6ita 82 | 咸鱼修改器=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/iHd0E2xl6nja 83 | 小王子出怪修改=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/iqqQR2xl6psb 84 | 血量显示=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/iGpcL2xl73ob 85 | 血量显示(映射版)=https://lz.qaiu.top/parser?url=https://hhzyx.lanzouo.com/id3l02xl869a -------------------------------------------------------------------------------- /SetName_Window.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace PvzLauncher 2 | { 3 | partial class SetName_Window 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SetName_Window)); 32 | this.textBox_Name = new System.Windows.Forms.TextBox(); 33 | this.button_Done = new System.Windows.Forms.Button(); 34 | this.button_Cancel = new System.Windows.Forms.Button(); 35 | this.SuspendLayout(); 36 | // 37 | // textBox_Name 38 | // 39 | this.textBox_Name.Location = new System.Drawing.Point(12, 12); 40 | this.textBox_Name.Name = "textBox_Name"; 41 | this.textBox_Name.Size = new System.Drawing.Size(440, 23); 42 | this.textBox_Name.TabIndex = 0; 43 | this.textBox_Name.TextChanged += new System.EventHandler(this.textBox_Name_TextChanged); 44 | // 45 | // button_Done 46 | // 47 | this.button_Done.Enabled = false; 48 | this.button_Done.Location = new System.Drawing.Point(348, 41); 49 | this.button_Done.Name = "button_Done"; 50 | this.button_Done.Size = new System.Drawing.Size(104, 26); 51 | this.button_Done.TabIndex = 1; 52 | this.button_Done.Text = "确定"; 53 | this.button_Done.UseVisualStyleBackColor = true; 54 | this.button_Done.Click += new System.EventHandler(this.button_Done_Click); 55 | // 56 | // button_Cancel 57 | // 58 | this.button_Cancel.Location = new System.Drawing.Point(238, 41); 59 | this.button_Cancel.Name = "button_Cancel"; 60 | this.button_Cancel.Size = new System.Drawing.Size(104, 26); 61 | this.button_Cancel.TabIndex = 2; 62 | this.button_Cancel.Text = "取消"; 63 | this.button_Cancel.UseVisualStyleBackColor = true; 64 | this.button_Cancel.Click += new System.EventHandler(this.button_Cancel_Click); 65 | // 66 | // SetName_Window 67 | // 68 | this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); 69 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 70 | this.ClientSize = new System.Drawing.Size(464, 79); 71 | this.Controls.Add(this.button_Cancel); 72 | this.Controls.Add(this.button_Done); 73 | this.Controls.Add(this.textBox_Name); 74 | this.Font = new System.Drawing.Font("微软雅黑 Light", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); 75 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 76 | this.Margin = new System.Windows.Forms.Padding(4); 77 | this.MaximizeBox = false; 78 | this.MaximumSize = new System.Drawing.Size(480, 118); 79 | this.MinimizeBox = false; 80 | this.MinimumSize = new System.Drawing.Size(480, 118); 81 | this.Name = "SetName_Window"; 82 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 83 | this.Text = "请输入新的名字"; 84 | this.Load += new System.EventHandler(this.SetName_Window_Load); 85 | this.ResumeLayout(false); 86 | this.PerformLayout(); 87 | 88 | } 89 | 90 | #endregion 91 | 92 | private System.Windows.Forms.TextBox textBox_Name; 93 | private System.Windows.Forms.Button button_Done; 94 | private System.Windows.Forms.Button button_Cancel; 95 | } 96 | } -------------------------------------------------------------------------------- /Download_Window.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace PvzLauncher 2 | { 3 | partial class Download_Window 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.label1 = new AntdUI.Label(); 32 | this.progress1 = new AntdUI.Progress(); 33 | this.label2 = new AntdUI.Label(); 34 | this.pictureBox1 = new System.Windows.Forms.PictureBox(); 35 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); 36 | this.SuspendLayout(); 37 | // 38 | // label1 39 | // 40 | this.label1.Font = new System.Drawing.Font("微软雅黑", 20F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 41 | this.label1.HandCursor = System.Windows.Forms.Cursors.Default; 42 | this.label1.Location = new System.Drawing.Point(88, 11); 43 | this.label1.Name = "label1"; 44 | this.label1.Size = new System.Drawing.Size(120, 41); 45 | this.label1.TabIndex = 1; 46 | this.label1.Text = "下载中..."; 47 | // 48 | // progress1 49 | // 50 | this.progress1.ContainerControl = this; 51 | this.progress1.HandCursor = System.Windows.Forms.Cursors.Default; 52 | this.progress1.Location = new System.Drawing.Point(88, 58); 53 | this.progress1.Name = "progress1"; 54 | this.progress1.Size = new System.Drawing.Size(486, 23); 55 | this.progress1.TabIndex = 2; 56 | this.progress1.Text = "progress1"; 57 | // 58 | // label2 59 | // 60 | this.label2.HandCursor = System.Windows.Forms.Cursors.Default; 61 | this.label2.Location = new System.Drawing.Point(214, 29); 62 | this.label2.Name = "label2"; 63 | this.label2.Size = new System.Drawing.Size(360, 23); 64 | this.label2.TabIndex = 3; 65 | this.label2.Text = "下载中"; 66 | // 67 | // pictureBox1 68 | // 69 | this.pictureBox1.Image = global::PvzLauncher.Properties.Resources.download; 70 | this.pictureBox1.Location = new System.Drawing.Point(12, 11); 71 | this.pictureBox1.Name = "pictureBox1"; 72 | this.pictureBox1.Size = new System.Drawing.Size(70, 70); 73 | this.pictureBox1.TabIndex = 4; 74 | this.pictureBox1.TabStop = false; 75 | // 76 | // Download_Window 77 | // 78 | this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); 79 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 80 | this.ClientSize = new System.Drawing.Size(586, 93); 81 | this.Controls.Add(this.pictureBox1); 82 | this.Controls.Add(this.label2); 83 | this.Controls.Add(this.progress1); 84 | this.Controls.Add(this.label1); 85 | this.EnableHitTest = false; 86 | this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); 87 | this.Margin = new System.Windows.Forms.Padding(4); 88 | this.MaximizeBox = false; 89 | this.MaximumSize = new System.Drawing.Size(586, 93); 90 | this.MinimizeBox = false; 91 | this.MinimumSize = new System.Drawing.Size(586, 93); 92 | this.Name = "Download_Window"; 93 | this.Resizable = false; 94 | this.ShowInTaskbar = false; 95 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 96 | this.Text = "下载"; 97 | this.Load += new System.EventHandler(this.Download_Window_Load); 98 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); 99 | this.ResumeLayout(false); 100 | 101 | } 102 | 103 | #endregion 104 | private AntdUI.Label label1; 105 | private AntdUI.Progress progress1; 106 | private AntdUI.Label label2; 107 | private System.Windows.Forms.PictureBox pictureBox1; 108 | } 109 | } -------------------------------------------------------------------------------- /README.en.md: -------------------------------------------------------------------------------- 1 | # Warn 2 | **The README file you are viewing may not be the latest version. If you want to get the latest information, please go to the simplified Chinese version of the readme file: [README.md](README.md)** 3 | 4 | # Plants Vs. Zombies Launcher 5 | [简体中文](README.md) | [English](README.en.md) 6 | 7 | ![Launcher Main Page](assets/Readme.md/mainpage.png) 8 | 9 | ## Download 10 | You can download the latest version directly from the Releases section of the Github repository or Gitee mirror: 11 | Github Repository: [https://github.com/bilibilihuazi/PvzLauncher](https://github.com/bilibilihuazi/PvzLauncher) 12 | Gitee Mirror: [https://gitee.com/huamouren110/pvz-launcher](https://gitee.com/huamouren110/pvz-launcher) 13 |
14 | 15 | Alternative download links (may not be the latest version): 16 | LanZou Cloud: [https://hhzyx.lanzouo.com/b00b4q0fxg Password:2cds](https://hhzyx.lanzouo.com/b00b4q0fxg) 17 | LanZou Cloud Premium: [https://www.ilanzou.com/s/6r4ZLvSU](https://www.ilanzou.com/s/6r4ZLvSU) 18 | 123 Cloud Disk (Primary): [https://www.123865.com/s/9hDQjv-LJBn3](https://www.123865.com/s/9hDQjv-LJBn3) 19 | 123 Cloud Disk (Backup): [https://www.123684.com/s/9hDQjv-LJBn3](https://www.123684.com/s/9hDQjv-LJBn3) 20 | huang1111 Cloud: [https://pan.huang1111.cn/s/mxK1os1](https://pan.huang1111.cn/s/mxK1os1) 21 | 22 | ## Overview 23 | This launcher supports **launching and managing** the game. 24 | 25 | ## Features 26 | ### Version Management 27 | ![Version Selection Interface](assets/Readme.md/selectgame.png) 28 | ![Version Settings Interface](assets/Readme.md/setgame.png) 29 | 30 | The launcher allows quick **importing, managing, and launching** of games. It provides a GUI interface, making it easy for players unfamiliar with game file structures to operate. 31 | 32 | A statistics interface is also included, allowing users to **view playtime, first launch date**, and more. 33 | 34 | ### Built-in Trainer 35 | ![PvzToolkit Trainer](assets/Readme.md/trainer.png) 36 | 37 | The launcher includes a built-in trainer, eliminating the need to search for external tools. The settings menu offers an option to **launch the trainer automatically with the game**. 38 | 39 | ### Save Management 40 | ![Save Management Interface](assets/Readme.md/victorysave.png) 41 | ![Game Interface](assets/Readme.md/game.png) 42 | 43 | The trainer also provides save management functionality, allowing users to **replace saves with completed ones** effortlessly. 44 | 45 | ## Why This Launcher Was Created 46 | With numerous PVZ mods available, managing downloaded versions can be **challenging** due to **disorganized file structures**. Mod versions often have inconsistent file setups, requiring significant effort to launch. This launcher aims to simplify **launching and managing** games. 47 | 48 | Additionally, there are **no existing PVZ launchers** online, which motivated the creation of this tool. The built-in `PvzToolkit` trainer works with most game versions. 49 | 50 | ## Version Numbering Rules 51 | Starting from `Release1.0.0.0`, versions follow these rules: 52 | 53 | Release version: `[Major].[Minor].[Pre-Release Count].[Change Count]` 54 | Pre-Release version: `[Target Major].[Target Minor].[Pre-Release ID].[Change Count]` 55 | 56 | | Term | Description | 57 | |---------------------|-----------------------------------------------------------------------------| 58 | | Major Version | Increments when Minor Version reaches 10 | 59 | | Minor Version | Increments per release, resets to 0 at 10, triggering Major Version increment| 60 | | Change Count | Total number of changes in the version | 61 | | Pre-Release Count | Number of Pre-Release versions for the target Release | 62 | | Pre-Release ID | Sequence number of the Pre-Release for the target Release | 63 | 64 | Examples: 65 | - A Release with Major `1`, Minor `1`, `1` Pre-Release, and `10` changes: `Release 1.1.10.3`. 66 | - A Pre-Release targeting Major `1`, Minor `2`, as the 3rd Pre-Release with `5` changes: `Pre-Release 1.2.5.2`. 67 | 68 | ## Dependencies 69 | Built using `.NET Framework 4.8 WinForm`, with UI libraries `AntdUI` (primary) and `ReaLTaiizor` (secondary). 70 | 71 | The package includes DLLs for both UI libraries. Download the .NET Framework Runtime [here](https://dotnet.microsoft.com/zh-cn/download/dotnet-framework). 72 | 73 | ## References 74 | [.NET Framework 4.8 Runtime](https://dotnet.microsoft.com/zh-cn/download/dotnet-framework/net48) 75 | [AntdUI](https://gitee.com/antdui/AntdUI) 76 | [ReaLTaiizor](https://github.com/Taiizor/ReaLTaiizor) 77 | 78 | ## Credits 79 | **Code (2):** 80 | 1. **华某人** (Entire launcher code) 81 | 2. **DeepSeek** (Partial custom functions) 82 | 83 | **UI (2):** 84 | 1. **华某人** (Most UI elements) 85 | 2. **PCL2** (Partial design inspiration) 86 | 87 | **Art (3):** 88 | 1. **YesIcon** (Most icons) [Website↗](https://yesicon.app/) 89 | 2. **华某人** (Partial image editing) 90 | 3. **Plants Vs Zombies** (Minor images) 91 | 92 | **External Tools (2):** 93 | 1. **PvzToolkit** (Built-in trainer) 94 | 2. **PopCap Games** (Built-in game) 95 | 96 | **Contributors (2):** 97 | 1. **ewrtuikh** (Identified critical bugs) 98 | 2. **旅行者** (Provided feedback for Pre-Release 1.0.x.1) 99 | 3. **Fantasy-幻梦** (Suggested improvements and reported bugs for Pre-Release 1.0.x.2+) -------------------------------------------------------------------------------- /Download_Window.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /SelectGame_Window.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | 124 | 200, 17 125 | 126 | 127 | 55 128 | 129 | -------------------------------------------------------------------------------- /SetGame_Window.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | 124 | 159, 17 125 | 126 | 127 | 244, 17 128 | 129 | 130 | 51 131 | 132 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Ww][Ii][Nn]32/ 27 | [Aa][Rr][Mm]/ 28 | [Aa][Rr][Mm]64/ 29 | bld/ 30 | [Bb]in/ 31 | [Oo]bj/ 32 | [Oo]ut/ 33 | [Ll]og/ 34 | [Ll]ogs/ 35 | 36 | # Visual Studio 2015/2017 cache/options directory 37 | .vs/ 38 | # Uncomment if you have tasks that create the project's static files in wwwroot 39 | #wwwroot/ 40 | 41 | # Visual Studio 2017 auto generated files 42 | Generated\ Files/ 43 | 44 | # MSTest test Results 45 | [Tt]est[Rr]esult*/ 46 | [Bb]uild[Ll]og.* 47 | 48 | # NUnit 49 | *.VisualState.xml 50 | TestResult.xml 51 | nunit-*.xml 52 | 53 | # Build Results of an ATL Project 54 | [Dd]ebugPS/ 55 | [Rr]eleasePS/ 56 | dlldata.c 57 | 58 | # Benchmark Results 59 | BenchmarkDotNet.Artifacts/ 60 | 61 | # .NET Core 62 | project.lock.json 63 | project.fragment.lock.json 64 | artifacts/ 65 | 66 | # ASP.NET Scaffolding 67 | ScaffoldingReadMe.txt 68 | 69 | # StyleCop 70 | StyleCopReport.xml 71 | 72 | # Files built by Visual Studio 73 | *_i.c 74 | *_p.c 75 | *_h.h 76 | *.ilk 77 | *.meta 78 | *.obj 79 | *.iobj 80 | *.pch 81 | *.pdb 82 | *.ipdb 83 | *.pgc 84 | *.pgd 85 | *.rsp 86 | *.sbr 87 | *.tlb 88 | *.tli 89 | *.tlh 90 | *.tmp 91 | *.tmp_proj 92 | *_wpftmp.csproj 93 | *.log 94 | *.vspscc 95 | *.vssscc 96 | .builds 97 | *.pidb 98 | *.svclog 99 | *.scc 100 | 101 | # Chutzpah Test files 102 | _Chutzpah* 103 | 104 | # Visual C++ cache files 105 | ipch/ 106 | *.aps 107 | *.ncb 108 | *.opendb 109 | *.opensdf 110 | *.sdf 111 | *.cachefile 112 | *.VC.db 113 | *.VC.VC.opendb 114 | 115 | # Visual Studio profiler 116 | *.psess 117 | *.vsp 118 | *.vspx 119 | *.sap 120 | 121 | # Visual Studio Trace Files 122 | *.e2e 123 | 124 | # TFS 2012 Local Workspace 125 | $tf/ 126 | 127 | # Guidance Automation Toolkit 128 | *.gpState 129 | 130 | # ReSharper is a .NET coding add-in 131 | _ReSharper*/ 132 | *.[Rr]e[Ss]harper 133 | *.DotSettings.user 134 | 135 | # TeamCity is a build add-in 136 | _TeamCity* 137 | 138 | # DotCover is a Code Coverage Tool 139 | *.dotCover 140 | 141 | # AxoCover is a Code Coverage Tool 142 | .axoCover/* 143 | !.axoCover/settings.json 144 | 145 | # Coverlet is a free, cross platform Code Coverage Tool 146 | coverage*.json 147 | coverage*.xml 148 | coverage*.info 149 | 150 | # Visual Studio code coverage results 151 | *.coverage 152 | *.coveragexml 153 | 154 | # NCrunch 155 | _NCrunch_* 156 | .*crunch*.local.xml 157 | nCrunchTemp_* 158 | 159 | # MightyMoose 160 | *.mm.* 161 | AutoTest.Net/ 162 | 163 | # Web workbench (sass) 164 | .sass-cache/ 165 | 166 | # Installshield output folder 167 | [Ee]xpress/ 168 | 169 | # DocProject is a documentation generator add-in 170 | DocProject/buildhelp/ 171 | DocProject/Help/*.HxT 172 | DocProject/Help/*.HxC 173 | DocProject/Help/*.hhc 174 | DocProject/Help/*.hhk 175 | DocProject/Help/*.hhp 176 | DocProject/Help/Html2 177 | DocProject/Help/html 178 | 179 | # Click-Once directory 180 | publish/ 181 | 182 | # Publish Web Output 183 | *.[Pp]ublish.xml 184 | *.azurePubxml 185 | # Note: Comment the next line if you want to checkin your web deploy settings, 186 | # but database connection strings (with potential passwords) will be unencrypted 187 | *.pubxml 188 | *.publishproj 189 | 190 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 191 | # checkin your Azure Web App publish settings, but sensitive information contained 192 | # in these scripts will be unencrypted 193 | PublishScripts/ 194 | 195 | # NuGet Packages 196 | *.nupkg 197 | # NuGet Symbol Packages 198 | *.snupkg 199 | # The packages folder can be ignored because of Package Restore 200 | **/[Pp]ackages/* 201 | # except build/, which is used as an MSBuild target. 202 | !**/[Pp]ackages/build/ 203 | # Uncomment if necessary however generally it will be regenerated when needed 204 | #!**/[Pp]ackages/repositories.config 205 | # NuGet v3's project.json files produces more ignorable files 206 | *.nuget.props 207 | *.nuget.targets 208 | 209 | # Microsoft Azure Build Output 210 | csx/ 211 | *.build.csdef 212 | 213 | # Microsoft Azure Emulator 214 | ecf/ 215 | rcf/ 216 | 217 | # Windows Store app package directories and files 218 | AppPackages/ 219 | BundleArtifacts/ 220 | Package.StoreAssociation.xml 221 | _pkginfo.txt 222 | *.appx 223 | *.appxbundle 224 | *.appxupload 225 | 226 | # Visual Studio cache files 227 | # files ending in .cache can be ignored 228 | *.[Cc]ache 229 | # but keep track of directories ending in .cache 230 | !?*.[Cc]ache/ 231 | 232 | # Others 233 | ClientBin/ 234 | ~$* 235 | *~ 236 | *.dbmdl 237 | *.dbproj.schemaview 238 | *.jfm 239 | *.pfx 240 | *.publishsettings 241 | orleans.codegen.cs 242 | 243 | # Including strong name files can present a security risk 244 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 245 | #*.snk 246 | 247 | # Since there are multiple workflows, uncomment next line to ignore bower_components 248 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 249 | #bower_components/ 250 | 251 | # RIA/Silverlight projects 252 | Generated_Code/ 253 | 254 | # Backup & report files from converting an old project file 255 | # to a newer Visual Studio version. Backup files are not needed, 256 | # because we have git ;-) 257 | _UpgradeReport_Files/ 258 | Backup*/ 259 | UpgradeLog*.XML 260 | UpgradeLog*.htm 261 | ServiceFabricBackup/ 262 | *.rptproj.bak 263 | 264 | # SQL Server files 265 | *.mdf 266 | *.ldf 267 | *.ndf 268 | 269 | # Business Intelligence projects 270 | *.rdl.data 271 | *.bim.layout 272 | *.bim_*.settings 273 | *.rptproj.rsuser 274 | *- [Bb]ackup.rdl 275 | *- [Bb]ackup ([0-9]).rdl 276 | *- [Bb]ackup ([0-9][0-9]).rdl 277 | 278 | # Microsoft Fakes 279 | FakesAssemblies/ 280 | 281 | # GhostDoc plugin setting file 282 | *.GhostDoc.xml 283 | 284 | # Node.js Tools for Visual Studio 285 | .ntvs_analysis.dat 286 | node_modules/ 287 | 288 | # Visual Studio 6 build log 289 | *.plg 290 | 291 | # Visual Studio 6 workspace options file 292 | *.opt 293 | 294 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 295 | *.vbw 296 | 297 | # Visual Studio LightSwitch build output 298 | **/*.HTMLClient/GeneratedArtifacts 299 | **/*.DesktopClient/GeneratedArtifacts 300 | **/*.DesktopClient/ModelManifest.xml 301 | **/*.Server/GeneratedArtifacts 302 | **/*.Server/ModelManifest.xml 303 | _Pvt_Extensions 304 | 305 | # Paket dependency manager 306 | .paket/paket.exe 307 | paket-files/ 308 | 309 | # FAKE - F# Make 310 | .fake/ 311 | 312 | # CodeRush personal settings 313 | .cr/personal 314 | 315 | # Python Tools for Visual Studio (PTVS) 316 | __pycache__/ 317 | *.pyc 318 | 319 | # Cake - Uncomment if you are using it 320 | # tools/** 321 | # !tools/packages.config 322 | 323 | # Tabs Studio 324 | *.tss 325 | 326 | # Telerik's JustMock configuration file 327 | *.jmconfig 328 | 329 | # BizTalk build output 330 | *.btp.cs 331 | *.btm.cs 332 | *.odx.cs 333 | *.xsd.cs 334 | 335 | # OpenCover UI analysis results 336 | OpenCover/ 337 | 338 | # Azure Stream Analytics local run output 339 | ASALocalRun/ 340 | 341 | # MSBuild Binary and Structured Log 342 | *.binlog 343 | 344 | # NVidia Nsight GPU debugger configuration file 345 | *.nvuser 346 | 347 | # MFractors (Xamarin productivity tool) working folder 348 | .mfractor/ 349 | 350 | # Local History for Visual Studio 351 | .localhistory/ 352 | 353 | # BeatPulse healthcheck temp database 354 | healthchecksdb 355 | 356 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 357 | MigrationBackup/ 358 | 359 | # Ionide (cross platform F# VS Code tools) working folder 360 | .ionide/ 361 | 362 | # Fody - auto-generated XML schema 363 | FodyWeavers.xsd -------------------------------------------------------------------------------- /SelectGame_Window.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace PvzLauncher 2 | { 3 | partial class SelectGame_Window 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.pageHeader = new AntdUI.PageHeader(); 32 | this.button_VirtualLoad = new AntdUI.Button(); 33 | this.button_Load = new AntdUI.Button(); 34 | this.button_Refresh = new AntdUI.Button(); 35 | this.ListBox = new ReaLTaiizor.Controls.MaterialListBox(); 36 | this.button_Done = new AntdUI.Button(); 37 | this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog(); 38 | this.button_Cancel = new AntdUI.Button(); 39 | this.image3D_GameIcon = new AntdUI.Image3D(); 40 | this.label_Gameinfo1 = new AntdUI.Label(); 41 | this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); 42 | this.pageHeader.SuspendLayout(); 43 | this.SuspendLayout(); 44 | // 45 | // pageHeader 46 | // 47 | this.pageHeader.Controls.Add(this.button_VirtualLoad); 48 | this.pageHeader.Controls.Add(this.button_Load); 49 | this.pageHeader.Controls.Add(this.button_Refresh); 50 | this.pageHeader.HandCursor = System.Windows.Forms.Cursors.Default; 51 | this.pageHeader.Location = new System.Drawing.Point(0, 0); 52 | this.pageHeader.Margin = new System.Windows.Forms.Padding(4); 53 | this.pageHeader.MaximizeBox = false; 54 | this.pageHeader.MinimizeBox = false; 55 | this.pageHeader.Name = "pageHeader"; 56 | this.pageHeader.ShowButton = true; 57 | this.pageHeader.Size = new System.Drawing.Size(611, 30); 58 | this.pageHeader.TabIndex = 0; 59 | this.pageHeader.Text = "选择版本"; 60 | // 61 | // button_VirtualLoad 62 | // 63 | this.button_VirtualLoad.BackExtend = "135, #6253E1, #04BEFE"; 64 | this.button_VirtualLoad.HandCursor = System.Windows.Forms.Cursors.Default; 65 | this.button_VirtualLoad.Icon = global::PvzLauncher.Properties.Resources.folder; 66 | this.button_VirtualLoad.IconRatio = 0.8F; 67 | this.button_VirtualLoad.Location = new System.Drawing.Point(247, 0); 68 | this.button_VirtualLoad.Name = "button_VirtualLoad"; 69 | this.button_VirtualLoad.Size = new System.Drawing.Size(128, 30); 70 | this.button_VirtualLoad.TabIndex = 7; 71 | this.button_VirtualLoad.Text = "虚拟导入"; 72 | this.button_VirtualLoad.Type = AntdUI.TTypeMini.Primary; 73 | this.button_VirtualLoad.Click += new System.EventHandler(this.button_VirtualLoad_Click); 74 | // 75 | // button_Load 76 | // 77 | this.button_Load.HandCursor = System.Windows.Forms.Cursors.Default; 78 | this.button_Load.Icon = global::PvzLauncher.Properties.Resources.folder; 79 | this.button_Load.IconRatio = 0.8F; 80 | this.button_Load.Location = new System.Drawing.Point(381, 0); 81 | this.button_Load.Name = "button_Load"; 82 | this.button_Load.Size = new System.Drawing.Size(128, 30); 83 | this.button_Load.TabIndex = 6; 84 | this.button_Load.Text = "导入"; 85 | this.button_Load.Type = AntdUI.TTypeMini.Warn; 86 | this.button_Load.Click += new System.EventHandler(this.button_Load_Click); 87 | // 88 | // button_Refresh 89 | // 90 | this.button_Refresh.HandCursor = System.Windows.Forms.Cursors.Default; 91 | this.button_Refresh.Icon = global::PvzLauncher.Properties.Resources.refresh; 92 | this.button_Refresh.IconRatio = 0.8F; 93 | this.button_Refresh.Location = new System.Drawing.Point(515, 0); 94 | this.button_Refresh.Name = "button_Refresh"; 95 | this.button_Refresh.Size = new System.Drawing.Size(30, 30); 96 | this.button_Refresh.TabIndex = 5; 97 | this.button_Refresh.Type = AntdUI.TTypeMini.Primary; 98 | this.button_Refresh.Click += new System.EventHandler(this.button_Refresh_Click); 99 | // 100 | // ListBox 101 | // 102 | this.ListBox.BackColor = System.Drawing.Color.White; 103 | this.ListBox.BorderColor = System.Drawing.Color.LightGray; 104 | this.ListBox.Depth = 0; 105 | this.ListBox.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 106 | this.ListBox.Location = new System.Drawing.Point(12, 37); 107 | this.ListBox.MouseState = ReaLTaiizor.Helper.MaterialDrawHelper.MaterialMouseState.HOVER; 108 | this.ListBox.Name = "ListBox"; 109 | this.ListBox.SelectedIndex = -1; 110 | this.ListBox.SelectedItem = null; 111 | this.ListBox.Size = new System.Drawing.Size(587, 321); 112 | this.ListBox.TabIndex = 1; 113 | this.ListBox.SelectedIndexChanged += new ReaLTaiizor.Controls.MaterialListBox.SelectedIndexChangedEventHandler(this.ListBox_SelectedIndexChanged); 114 | // 115 | // button_Done 116 | // 117 | this.button_Done.Enabled = false; 118 | this.button_Done.HandCursor = System.Windows.Forms.Cursors.Default; 119 | this.button_Done.Icon = global::PvzLauncher.Properties.Resources.done; 120 | this.button_Done.Location = new System.Drawing.Point(488, 364); 121 | this.button_Done.Name = "button_Done"; 122 | this.button_Done.Size = new System.Drawing.Size(111, 42); 123 | this.button_Done.TabIndex = 3; 124 | this.button_Done.Text = "确定"; 125 | this.button_Done.Type = AntdUI.TTypeMini.Success; 126 | this.button_Done.Click += new System.EventHandler(this.button_Done_Click); 127 | // 128 | // folderBrowserDialog1 129 | // 130 | this.folderBrowserDialog1.Description = "请选择含有可执行文件的游戏目录"; 131 | // 132 | // button_Cancel 133 | // 134 | this.button_Cancel.HandCursor = System.Windows.Forms.Cursors.Default; 135 | this.button_Cancel.Icon = global::PvzLauncher.Properties.Resources.cancel; 136 | this.button_Cancel.Location = new System.Drawing.Point(371, 364); 137 | this.button_Cancel.Name = "button_Cancel"; 138 | this.button_Cancel.Size = new System.Drawing.Size(111, 42); 139 | this.button_Cancel.TabIndex = 4; 140 | this.button_Cancel.Text = "取消"; 141 | this.button_Cancel.Type = AntdUI.TTypeMini.Error; 142 | this.button_Cancel.Click += new System.EventHandler(this.button_Cancel_Click); 143 | // 144 | // image3D_GameIcon 145 | // 146 | this.image3D_GameIcon.HandCursor = System.Windows.Forms.Cursors.Default; 147 | this.image3D_GameIcon.Image = global::PvzLauncher.Properties.Resources.icon; 148 | this.image3D_GameIcon.Location = new System.Drawing.Point(12, 364); 149 | this.image3D_GameIcon.Name = "image3D_GameIcon"; 150 | this.image3D_GameIcon.Size = new System.Drawing.Size(42, 42); 151 | this.image3D_GameIcon.TabIndex = 2; 152 | // 153 | // label_Gameinfo1 154 | // 155 | this.label_Gameinfo1.HandCursor = System.Windows.Forms.Cursors.Default; 156 | this.label_Gameinfo1.Location = new System.Drawing.Point(60, 364); 157 | this.label_Gameinfo1.Name = "label_Gameinfo1"; 158 | this.label_Gameinfo1.Size = new System.Drawing.Size(305, 23); 159 | this.label_Gameinfo1.TabIndex = 5; 160 | this.label_Gameinfo1.Text = "请选择游戏"; 161 | // 162 | // openFileDialog1 163 | // 164 | this.openFileDialog1.Filter = "可执行文件|*.exe"; 165 | this.openFileDialog1.Title = "请选择游戏的可执行文件"; 166 | // 167 | // SelectGame_Window 168 | // 169 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; 170 | this.ClientSize = new System.Drawing.Size(611, 414); 171 | this.Controls.Add(this.label_Gameinfo1); 172 | this.Controls.Add(this.button_Cancel); 173 | this.Controls.Add(this.button_Done); 174 | this.Controls.Add(this.image3D_GameIcon); 175 | this.Controls.Add(this.ListBox); 176 | this.Controls.Add(this.pageHeader); 177 | this.EnableHitTest = false; 178 | this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); 179 | this.Margin = new System.Windows.Forms.Padding(4); 180 | this.MaximizeBox = false; 181 | this.MaximumSize = new System.Drawing.Size(611, 414); 182 | this.MinimizeBox = false; 183 | this.MinimumSize = new System.Drawing.Size(611, 414); 184 | this.Name = "SelectGame_Window"; 185 | this.Resizable = false; 186 | this.ShowInTaskbar = false; 187 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 188 | this.Text = "SelectGame_Window"; 189 | this.Load += new System.EventHandler(this.SelectGame_Window_Load); 190 | this.pageHeader.ResumeLayout(false); 191 | this.ResumeLayout(false); 192 | 193 | } 194 | 195 | #endregion 196 | 197 | private AntdUI.PageHeader pageHeader; 198 | private ReaLTaiizor.Controls.MaterialListBox ListBox; 199 | private AntdUI.Image3D image3D_GameIcon; 200 | private AntdUI.Button button_Done; 201 | private AntdUI.Button button_Cancel; 202 | private AntdUI.Button button_Refresh; 203 | private AntdUI.Button button_Load; 204 | private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1; 205 | private AntdUI.Label label_Gameinfo1; 206 | private AntdUI.Button button_VirtualLoad; 207 | private System.Windows.Forms.OpenFileDialog openFileDialog1; 208 | } 209 | } -------------------------------------------------------------------------------- /PVZLauncher.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {4EF7A88C-22B0-4656-953F-6E9CB1CB7AF6} 8 | WinExe 9 | PvzLauncher 10 | PvzLauncher 11 | v4.8 12 | 512 13 | true 14 | true 15 | publish\ 16 | true 17 | Disk 18 | false 19 | Foreground 20 | 7 21 | Days 22 | false 23 | false 24 | true 25 | 0 26 | 1.0.0.%2a 27 | false 28 | false 29 | true 30 | 31 | 32 | 33 | 34 | AnyCPU 35 | true 36 | full 37 | false 38 | bin\Debug\ 39 | DEBUG;TRACE 40 | prompt 41 | 4 42 | 43 | 44 | AnyCPU 45 | pdbonly 46 | true 47 | bin\Release\ 48 | TRACE 49 | prompt 50 | 4 51 | 52 | 53 | true 54 | bin\x64\Debug\ 55 | DEBUG;TRACE 56 | full 57 | x64 58 | 7.3 59 | prompt 60 | true 61 | 62 | 63 | bin\x64\Release\ 64 | TRACE 65 | true 66 | pdbonly 67 | x64 68 | 7.3 69 | prompt 70 | true 71 | 72 | 73 | true 74 | bin\x86\Debug\ 75 | DEBUG;TRACE 76 | full 77 | x86 78 | 7.3 79 | prompt 80 | true 81 | 82 | 83 | bin\x86\Release\ 84 | TRACE 85 | true 86 | pdbonly 87 | x86 88 | 7.3 89 | prompt 90 | true 91 | 92 | 93 | true 94 | bin\ARM64\Debug\ 95 | DEBUG;TRACE 96 | full 97 | ARM64 98 | 7.3 99 | prompt 100 | true 101 | 102 | 103 | bin\ARM64\Release\ 104 | TRACE 105 | true 106 | pdbonly 107 | ARM64 108 | 7.3 109 | prompt 110 | true 111 | 112 | 113 | icon.ico 114 | 115 | 116 | 117 | packages\AntdUI.2.0.1\lib\net48\AntdUI.dll 118 | 119 | 120 | 121 | packages\ReaLTaiizor.3.8.1.2\lib\net48\ReaLTaiizor.dll 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | Form 141 | 142 | 143 | Download_Window.cs 144 | 145 | 146 | Form 147 | 148 | 149 | Main_Window.cs 150 | 151 | 152 | 153 | 154 | True 155 | True 156 | Resources.resx 157 | 158 | 159 | Form 160 | 161 | 162 | SelectGame_Window.cs 163 | 164 | 165 | Form 166 | 167 | 168 | SetGame_Window.cs 169 | 170 | 171 | Form 172 | 173 | 174 | SetName_Window.cs 175 | 176 | 177 | Download_Window.cs 178 | 179 | 180 | Main_Window.cs 181 | 182 | 183 | ResXFileCodeGenerator 184 | Resources.Designer.cs 185 | 186 | 187 | SelectGame_Window.cs 188 | 189 | 190 | SetGame_Window.cs 191 | 192 | 193 | SetName_Window.cs 194 | 195 | 196 | 197 | SettingsSingleFileGenerator 198 | Settings.Designer.cs 199 | 200 | 201 | True 202 | Settings.settings 203 | True 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | False 253 | Microsoft .NET Framework 4.8 %28x86 和 x64%29 254 | true 255 | 256 | 257 | False 258 | .NET Framework 3.5 SP1 259 | false 260 | 261 | 262 | 263 | -------------------------------------------------------------------------------- /SetName_Window.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | 123 | AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA 124 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 125 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 126 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 127 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 128 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJu 129 | QgASPyYGBAwIDAAAAAYcHBwE2tfaAvDt8ALx7fAC8e3wAvHt8ALx7fAA8e3wAAAAAAAAAAAAAAAAAAAA 130 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAst 131 | FwQNLhoKESMYYDhCPc9MTEzzZWJkx1taW7F4dnijbWttm1BOUKVbWVqlRkVGmSQkJJVFQ0RWOzo7MCsq 132 | KxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 133 | AAALIRZOGRYexR0bHcuHfoX71c3T/+fj5v/t6u3/7urt/evn6v3i3uH719PW+dvW2vPOyc31lZKU+4aD 134 | hfd3dXfvT05P0xgYGIkGBQYuCgkKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 135 | AAAAAAEAAgQEJB8dJ+UwKzn9jYOM/9/V3v/r6Ov/7ens/+7r7v/v7O//8O7v/+/t7//p4uj/3s/b/76s 136 | u/+xpa//w7rB/9XN1P/i2uH/xb3D/3JqcfVBPECVCxUQGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 137 | AAAAAAAAAAAAAAEBAg4TERe5eGuU/UU+Sv3Sv8//5Nvi/+3q7f/v7O7/8u7x//Lv8f/y8fL/8fDx/+vl 138 | 6f/Asb3/lI2T/8jDx//Ev8P/tq+1/5WMlP/Kucf/xbDB/7afsf9mWmTXEBYTPhhNLgAAAAAAAAAAAAAA 139 | AAAAAAAAAAAAAAAAAAAAAAAABgUHfGRZePmkksr/V05Z/d3I2f/m3uT/7urt//Hu8P/y8PL/9PHz//Tz 140 | 9P/08/T/8Onu/6eepv/v6+7/8+/y/+7q7f/r5+r/3Nbb/5OLkv+7qrj/e214/7Wfsf9kW2PtBgsJNgAA 141 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkICrPsqDX/6uZ0f9QSFX/3MTY/+nd5//u6e3/8e3w//Lw 142 | 8v/z8fL/9fT1//Xy9P/w6/D/7ebr//Pv8v/v6+7/7ens/+rn6f/l4uT/ysHI/3ZudP+dkZv/mpKZ/5yN 143 | mf9TS1LHAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4bI+PDsuj/t6Xe/0tDWP/GrsH/49Hg/+rg 144 | 6P/w6u//8+7y//Pw8v/z7vH/4dvh/+Xh5f/07/P/9PDz/+7q7f/u6u3/7ens/+vm6v/m3OT/nZKb/93S 145 | 2//i4OL/npid/5iIlf8XFBbBAQEBEgAAAAAAAAAAAAAAAAAAAAABAQEGFhQb8cOz5v/Fs+v/bF+G/4x8 146 | jP/exdn/6Nvl/+3j6//y6vD/7ubt/+XV4v/Zytf/hH+D/11aXf/bzdn/59/m/+vl6v/q4+n/6eDo/9HI 147 | z/9rY2//zcTM/+nm6P+emZ3/sZ+t/11TW/0BAQFMAAAAAAAAAAAAAAAAAAAAAAEBAUQgHSb7s6bO/9XF 148 | 9f+mlMv/U0pg/8OtwP/hzt7/59nk/+rg6f/i1eD/28fY/9bD0v84NTj/PDg7/9bD0v/e0dv/5N3j/+bg 149 | 5f+3sLb/mY6t/6KOy/+ZjqP/4NXe/7irtf/ArLz/lYeS/w0MDZMAAAAAAAAAAAAAAAAAAAAAAAAAZk5H 150 | XP+XjK3/18jz/8m47f+HeKf/V05c/9C6zP/izt7/5dfi/93O2//cydn/tqaz/4B7gP9lX2T/28fY/93R 151 | 2//i3OH/5N7i/8XCxP+YkqD/loez/4+BoP/Xx9T/1M/T/8vEyf+snqn/FxUXwwAAAAAAAAAAAAAAAAEB 152 | AQAAAACbgXWX/46Cpf/Txe//z8Hv/72s4f92aZP/XVNf/9G6zf/dyNn/3MrZ/dzM2f28q7n/g3mB/8Wz 153 | wf/bydj/4Nbe/+Hc4P/k4OL/5+bn/+Ti4//Iv8b/wa6+/7+su/+jnaH/wrvA/5iMlv8ODA3FAAAAAAAA 154 | AAABAQEAAAAATi8rNe27rNn/n5G7/6qewf/SxPD/yrvr/7ak2f9uYof/cWVz/9S90P/YwtT/2cbW/9vJ 155 | 2PvYxdX/2sfX/93Q2v/e1dz/39ve/+Ph4v/j4eL/29fa/9DDzf/Is8T/ZFtj/z03O/+yoK//UEhO7QEB 156 | AU4AAAAAAAAAAAEBAU4nJC3zuK3L/+3n+v/OvPD/g3mY/9fJ8//Qwe7/yLnp/7Wk2P9xZIr/bmNw/9G8 157 | zv/XwdP/18LU/9jF1f3bytn/3dLb/9zT2v/g3N//4uDh/93a3P/SytD/y7nH/8Owv/9MSUz/dW1z/5uL 158 | mO0MCwx0AQEBBAAAAAABAQE+HBog9bWozP/08fr/9vL9/+bb+v+4p9j/opa6/9fJ9P/Rwu//xbXn/7am 159 | 2v9/cZv/X1Vl/66drP/Vv9H/1cDS/9fD1P/ZyNb/2s3X/9zX2//b19r/1c3T/86/y//Ntcj/xbDB/2Fa 160 | YP+MgIr9OjU5rQEBAQ4AAAAAAQEBEAYGB8eSh6j/493x//r4/v/8+/7/9fL7/8q66v+mlsX/uq3V/9XG 161 | 8//Mve3/xLXn/7yt3/+VhrX/SEBW/3FmcP++rLz/07/R/dO+0P/Sv87/0sXP/87FzP/OwMv/0LzN/dG6 162 | zf3Ru879zLnJ+XBobvMODg6rAQEBAgAAAAAAAABCPThE/8K03v/7+v3//Pz+/+/r9v+/sNz/p5TN/7Si 163 | 2v+qm8r/tqjS/86/7f/Juuv/xLXn/7+v4v+omM3/dWeQ/01EWv9sYW3/rJuq/8m1x//Pusv/zLjJ/824 164 | yv/Su8790bvO9864y/WuoK3nSEpS9wwLDtEBAQEAAAAAAAYGCJWZjq3/0sfp/+7q9v/Uy+j/q5rQ/6aT 165 | zP+bi73/jYCp/8i26/+2p9f/sKHN/8S15f/BsuT/v6/j/7Wk2v+ql9D/oI7G/4Jzov9kWHr/YVZu/35x 166 | hf+DdYX/fnGA/2JYY/9aUV77Zltz+3Vrjv1XT2b/AwMEbgAAAAAAAAAAICAp08S23//AsuD/tKTX/7Si 167 | 2P+jlMP/U0xk/3lwiv+5q9X/0MHw/8y87P+3qNj/saLS/7en3P+zotn/r53U/6mWz/+lk8r/oo/H/5yK 168 | wv+aiMD/k4K3/459sf+QfrL/h3eo/5SCuP+kksr/lIev/xIRFbcBAQEKAAAAAAAAAAAsKjbxsqnX/4eL 169 | vP9/dJf/SUNW8xYVG88gHSXfqp7E/9XF8//RwvH/zL3t/8a36f/AsOP/ppXK/56Mwv+lk8v/pZLL/52L 170 | w/+ejMP/moe//5qHv/+bicD/m4nB/52Kw/+disP/nIvB/5GErf8dGyLlAAAALgAAAAAAAAAAAAAAAAcb 171 | LMEbKDvJChQfrQQEBWoBAQEwAQEBBgAAAFwjICnzraDI/9HC8f/Nvu7/yrvs/8S05v+yodj/pJHJ/5SE 172 | t/+FdqT/fm+b/4FyoP+Hd6f/hXam/31vm/92aJL/aFyB/1dObP8iHin5DAsPwQEBAVCzoK8CAAAAAAAA 173 | AAAAAAAACE1/BgZNfwgHTn8AAAAAAAAAAAAAAAAAAQEBAAEBATIZFx3Te3GP/8i56f/IuOz/tqXc/6uY 174 | 0f+tmtP/r53W/6mXzv+LfKr/cGOK/2VZff9tYYb/cGOK/1ZMav9rX4L/VExl/QEBAWIBAQEGAAAAAAAA 175 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBARIAAACHERAU2zUv 176 | QO1IQFj7XlNy/2hdf/9rYIL/aF1+/29kiP9vY4n/hnek/4l6p/+KfKb/t6zM/8zB4/8qJjP5AQEBOgAA 177 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 178 | AAABAQEQAQEBJAEBAUABAQFSAQEBZAEBAXABAQF0AAAAjSwoNfm+reT/s6HZ/8zB4v/18/v/tqrP/wMC 179 | A8sBAQEKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 180 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEIBQQG45KGr/+8quP/xbrd/+ji 181 | 8/9yZ4n/AQEBeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 182 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6RD1R/8Gv 183 | 5//Ctt3/u7DS/yMgKu8BAQEOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 184 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEB 185 | ARYHBgjniHui/7em2/9fV3D/AgIDfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 186 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 187 | AAAAAAAAAQEBAAEBAUoMCw75KCQx/QYFB7EBAQEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 188 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 189 | AAAAAAAAAAAAAAAAAAAAAAAAAQEBAgEBAUIBAQFIAQEBAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 190 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 191 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 192 | AAAAAAAAAAAAAAAAAAAAAAAA/////////////////+AH//8AAH/+AAAf/AAAD/wAAAf4AAAD+AAAAfgA 193 | AAH4AAAA+AAAAPAAAADwAAAB4AAAA8AAAAOAAAADgAAAAwAAAAcAAAAHAAAADx4AAB//AAB//4AAf/// 194 | gH///8D////g////4f////H///////////8= 195 | 196 | 197 | -------------------------------------------------------------------------------- /Main_Window.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 59 122 | 123 | 124 | 125 | 126 | AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA 127 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 128 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 129 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 130 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 131 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJu 132 | QgASPyYGBAwIDAAAAAYcHBwE2tfaAvDt8ALx7fAC8e3wAvHt8ALx7fAA8e3wAAAAAAAAAAAAAAAAAAAA 133 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAst 134 | FwQNLhoKESMYYDhCPc9MTEzzZWJkx1taW7F4dnijbWttm1BOUKVbWVqlRkVGmSQkJJVFQ0RWOzo7MCsq 135 | KxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 136 | AAALIRZOGRYexR0bHcuHfoX71c3T/+fj5v/t6u3/7urt/evn6v3i3uH719PW+dvW2vPOyc31lZKU+4aD 137 | hfd3dXfvT05P0xgYGIkGBQYuCgkKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 138 | AAAAAAEAAgQEJB8dJ+UwKzn9jYOM/9/V3v/r6Ov/7ens/+7r7v/v7O//8O7v/+/t7//p4uj/3s/b/76s 139 | u/+xpa//w7rB/9XN1P/i2uH/xb3D/3JqcfVBPECVCxUQGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 140 | AAAAAAAAAAAAAAEBAg4TERe5eGuU/UU+Sv3Sv8//5Nvi/+3q7f/v7O7/8u7x//Lv8f/y8fL/8fDx/+vl 141 | 6f/Asb3/lI2T/8jDx//Ev8P/tq+1/5WMlP/Kucf/xbDB/7afsf9mWmTXEBYTPhhNLgAAAAAAAAAAAAAA 142 | AAAAAAAAAAAAAAAAAAAAAAAABgUHfGRZePmkksr/V05Z/d3I2f/m3uT/7urt//Hu8P/y8PL/9PHz//Tz 143 | 9P/08/T/8Onu/6eepv/v6+7/8+/y/+7q7f/r5+r/3Nbb/5OLkv+7qrj/e214/7Wfsf9kW2PtBgsJNgAA 144 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkICrPsqDX/6uZ0f9QSFX/3MTY/+nd5//u6e3/8e3w//Lw 145 | 8v/z8fL/9fT1//Xy9P/w6/D/7ebr//Pv8v/v6+7/7ens/+rn6f/l4uT/ysHI/3ZudP+dkZv/mpKZ/5yN 146 | mf9TS1LHAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4bI+PDsuj/t6Xe/0tDWP/GrsH/49Hg/+rg 147 | 6P/w6u//8+7y//Pw8v/z7vH/4dvh/+Xh5f/07/P/9PDz/+7q7f/u6u3/7ens/+vm6v/m3OT/nZKb/93S 148 | 2//i4OL/npid/5iIlf8XFBbBAQEBEgAAAAAAAAAAAAAAAAAAAAABAQEGFhQb8cOz5v/Fs+v/bF+G/4x8 149 | jP/exdn/6Nvl/+3j6//y6vD/7ubt/+XV4v/Zytf/hH+D/11aXf/bzdn/59/m/+vl6v/q4+n/6eDo/9HI 150 | z/9rY2//zcTM/+nm6P+emZ3/sZ+t/11TW/0BAQFMAAAAAAAAAAAAAAAAAAAAAAEBAUQgHSb7s6bO/9XF 151 | 9f+mlMv/U0pg/8OtwP/hzt7/59nk/+rg6f/i1eD/28fY/9bD0v84NTj/PDg7/9bD0v/e0dv/5N3j/+bg 152 | 5f+3sLb/mY6t/6KOy/+ZjqP/4NXe/7irtf/ArLz/lYeS/w0MDZMAAAAAAAAAAAAAAAAAAAAAAAAAZk5H 153 | XP+XjK3/18jz/8m47f+HeKf/V05c/9C6zP/izt7/5dfi/93O2//cydn/tqaz/4B7gP9lX2T/28fY/93R 154 | 2//i3OH/5N7i/8XCxP+YkqD/loez/4+BoP/Xx9T/1M/T/8vEyf+snqn/FxUXwwAAAAAAAAAAAAAAAAEB 155 | AQAAAACbgXWX/46Cpf/Txe//z8Hv/72s4f92aZP/XVNf/9G6zf/dyNn/3MrZ/dzM2f28q7n/g3mB/8Wz 156 | wf/bydj/4Nbe/+Hc4P/k4OL/5+bn/+Ti4//Iv8b/wa6+/7+su/+jnaH/wrvA/5iMlv8ODA3FAAAAAAAA 157 | AAABAQEAAAAATi8rNe27rNn/n5G7/6qewf/SxPD/yrvr/7ak2f9uYof/cWVz/9S90P/YwtT/2cbW/9vJ 158 | 2PvYxdX/2sfX/93Q2v/e1dz/39ve/+Ph4v/j4eL/29fa/9DDzf/Is8T/ZFtj/z03O/+yoK//UEhO7QEB 159 | AU4AAAAAAAAAAAEBAU4nJC3zuK3L/+3n+v/OvPD/g3mY/9fJ8//Qwe7/yLnp/7Wk2P9xZIr/bmNw/9G8 160 | zv/XwdP/18LU/9jF1f3bytn/3dLb/9zT2v/g3N//4uDh/93a3P/SytD/y7nH/8Owv/9MSUz/dW1z/5uL 161 | mO0MCwx0AQEBBAAAAAABAQE+HBog9bWozP/08fr/9vL9/+bb+v+4p9j/opa6/9fJ9P/Rwu//xbXn/7am 162 | 2v9/cZv/X1Vl/66drP/Vv9H/1cDS/9fD1P/ZyNb/2s3X/9zX2//b19r/1c3T/86/y//Ntcj/xbDB/2Fa 163 | YP+MgIr9OjU5rQEBAQ4AAAAAAQEBEAYGB8eSh6j/493x//r4/v/8+/7/9fL7/8q66v+mlsX/uq3V/9XG 164 | 8//Mve3/xLXn/7yt3/+VhrX/SEBW/3FmcP++rLz/07/R/dO+0P/Sv87/0sXP/87FzP/OwMv/0LzN/dG6 165 | zf3Ru879zLnJ+XBobvMODg6rAQEBAgAAAAAAAABCPThE/8K03v/7+v3//Pz+/+/r9v+/sNz/p5TN/7Si 166 | 2v+qm8r/tqjS/86/7f/Juuv/xLXn/7+v4v+omM3/dWeQ/01EWv9sYW3/rJuq/8m1x//Pusv/zLjJ/824 167 | yv/Su8790bvO9864y/WuoK3nSEpS9wwLDtEBAQEAAAAAAAYGCJWZjq3/0sfp/+7q9v/Uy+j/q5rQ/6aT 168 | zP+bi73/jYCp/8i26/+2p9f/sKHN/8S15f/BsuT/v6/j/7Wk2v+ql9D/oI7G/4Jzov9kWHr/YVZu/35x 169 | hf+DdYX/fnGA/2JYY/9aUV77Zltz+3Vrjv1XT2b/AwMEbgAAAAAAAAAAICAp08S23//AsuD/tKTX/7Si 170 | 2P+jlMP/U0xk/3lwiv+5q9X/0MHw/8y87P+3qNj/saLS/7en3P+zotn/r53U/6mWz/+lk8r/oo/H/5yK 171 | wv+aiMD/k4K3/459sf+QfrL/h3eo/5SCuP+kksr/lIev/xIRFbcBAQEKAAAAAAAAAAAsKjbxsqnX/4eL 172 | vP9/dJf/SUNW8xYVG88gHSXfqp7E/9XF8//RwvH/zL3t/8a36f/AsOP/ppXK/56Mwv+lk8v/pZLL/52L 173 | w/+ejMP/moe//5qHv/+bicD/m4nB/52Kw/+disP/nIvB/5GErf8dGyLlAAAALgAAAAAAAAAAAAAAAAcb 174 | LMEbKDvJChQfrQQEBWoBAQEwAQEBBgAAAFwjICnzraDI/9HC8f/Nvu7/yrvs/8S05v+yodj/pJHJ/5SE 175 | t/+FdqT/fm+b/4FyoP+Hd6f/hXam/31vm/92aJL/aFyB/1dObP8iHin5DAsPwQEBAVCzoK8CAAAAAAAA 176 | AAAAAAAACE1/BgZNfwgHTn8AAAAAAAAAAAAAAAAAAQEBAAEBATIZFx3Te3GP/8i56f/IuOz/tqXc/6uY 177 | 0f+tmtP/r53W/6mXzv+LfKr/cGOK/2VZff9tYYb/cGOK/1ZMav9rX4L/VExl/QEBAWIBAQEGAAAAAAAA 178 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBARIAAACHERAU2zUv 179 | QO1IQFj7XlNy/2hdf/9rYIL/aF1+/29kiP9vY4n/hnek/4l6p/+KfKb/t6zM/8zB4/8qJjP5AQEBOgAA 180 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 181 | AAABAQEQAQEBJAEBAUABAQFSAQEBZAEBAXABAQF0AAAAjSwoNfm+reT/s6HZ/8zB4v/18/v/tqrP/wMC 182 | A8sBAQEKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 183 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEIBQQG45KGr/+8quP/xbrd/+ji 184 | 8/9yZ4n/AQEBeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 185 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6RD1R/8Gv 186 | 5//Ctt3/u7DS/yMgKu8BAQEOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 187 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEB 188 | ARYHBgjniHui/7em2/9fV3D/AgIDfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 189 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 190 | AAAAAAAAAQEBAAEBAUoMCw75KCQx/QYFB7EBAQEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 191 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 192 | AAAAAAAAAAAAAAAAAAAAAAAAAQEBAgEBAUIBAQFIAQEBAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 193 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 194 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 195 | AAAAAAAAAAAAAAAAAAAAAAAA/////////////////+AH//8AAH/+AAAf/AAAD/wAAAf4AAAD+AAAAfgA 196 | AAH4AAAA+AAAAPAAAADwAAAB4AAAA8AAAAOAAAADgAAAAwAAAAcAAAAHAAAADx4AAB//AAB//4AAf/// 197 | gH///8D////g////4f////H///////////8= 198 | 199 | 200 | 201 | 17, 17 202 | 203 | 204 | 136, 17 205 | 206 | 207 | 277, 17 208 | 209 | 210 | 419, 17 211 | 212 | 213 | 634, 17 214 | 215 | 216 | 795, 17 217 | 218 | -------------------------------------------------------------------------------- /Properties/Resources.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\assets\save_.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 123 | 124 | 125 | ..\assets\home.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 126 | 127 | 128 | ..\assets\settings_.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 129 | 130 | 131 | ..\assets\victroy.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 132 | 133 | 134 | ..\assets\launch.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 135 | 136 | 137 | ..\assets\bilibili.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 138 | 139 | 140 | ..\assets\refresh.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 141 | 142 | 143 | ..\assets\game.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 144 | 145 | 146 | ..\assets\settings.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 147 | 148 | 149 | ..\assets\folder.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 150 | 151 | 152 | ..\assets\titlescreen_home_.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 153 | 154 | 155 | ..\assets\PvZ_Logo_zh.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 156 | 157 | 158 | ..\assets\cancel.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 159 | 160 | 161 | ..\assets\error.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 162 | 163 | 164 | ..\assets\PvzToolkit_.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 165 | 166 | 167 | ..\assets\icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 168 | 169 | 170 | ..\assets\gitee.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 171 | 172 | 173 | ..\assets\edit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 174 | 175 | 176 | ..\assets\about.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 177 | 178 | 179 | ..\assets\done.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 180 | 181 | 182 | ..\assets\qq.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 183 | 184 | 185 | ..\assets\titlescreen_home.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 186 | 187 | 188 | ..\assets\add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 189 | 190 | 191 | ..\assets\PvZ_Logo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 192 | 193 | 194 | ..\assets\github.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 195 | 196 | 197 | ..\assets\icon_outline.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 198 | 199 | 200 | ..\assets\update.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 201 | 202 | 203 | ..\assets\replace.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 204 | 205 | 206 | ..\assets\delete.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 207 | 208 | 209 | ..\assets\download.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 210 | 211 | 212 | ..\assets\select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 213 | 214 | 215 | ..\assets\titlescreen.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 216 | 217 | 218 | ..\assets\alphatest.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 219 | 220 | 221 | ..\assets\close.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 222 | 223 | 224 | ..\assets\save.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 225 | 226 | 227 | ..\assets\PvzToolkit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 228 | 229 | 230 | ..\assets\miss_texture.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 231 | 232 | -------------------------------------------------------------------------------- /SetGame_Window.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace PvzLauncher 2 | { 3 | partial class SetGame_Window 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.components = new System.ComponentModel.Container(); 32 | this.pageHeader1 = new AntdUI.PageHeader(); 33 | this.label_GameName = new AntdUI.Label(); 34 | this.label_GamePath = new AntdUI.Label(); 35 | this.label_ExecuteName = new AntdUI.Label(); 36 | this.input_ExecuteName = new AntdUI.Input(); 37 | this.button_ExecuteName_Browser = new AntdUI.Button(); 38 | this.openFileDialog = new System.Windows.Forms.OpenFileDialog(); 39 | this.timer = new System.Windows.Forms.Timer(this.components); 40 | this.panel_Info = new AntdUI.Panel(); 41 | this.label_FirstLaunch = new AntdUI.Label(); 42 | this.label_PlayTime = new AntdUI.Label(); 43 | this.label_Info = new AntdUI.Label(); 44 | this.button_Pak = new AntdUI.Button(); 45 | this.button_OpenGameFoler = new AntdUI.Button(); 46 | this.button_DeleteGame = new AntdUI.Button(); 47 | this.button_SetName = new AntdUI.Button(); 48 | this.image3D_GameIcon = new AntdUI.Image3D(); 49 | this.button_RePak = new AntdUI.Button(); 50 | this.openFileDialog_pak = new System.Windows.Forms.OpenFileDialog(); 51 | this.panel_Info.SuspendLayout(); 52 | this.SuspendLayout(); 53 | // 54 | // pageHeader1 55 | // 56 | this.pageHeader1.HandCursor = System.Windows.Forms.Cursors.Default; 57 | this.pageHeader1.Location = new System.Drawing.Point(0, 0); 58 | this.pageHeader1.MaximizeBox = false; 59 | this.pageHeader1.MinimizeBox = false; 60 | this.pageHeader1.Name = "pageHeader1"; 61 | this.pageHeader1.ShowButton = true; 62 | this.pageHeader1.Size = new System.Drawing.Size(816, 30); 63 | this.pageHeader1.TabIndex = 0; 64 | this.pageHeader1.Text = "版本设置"; 65 | // 66 | // label_GameName 67 | // 68 | this.label_GameName.Location = new System.Drawing.Point(70, 36); 69 | this.label_GameName.Name = "label_GameName"; 70 | this.label_GameName.Size = new System.Drawing.Size(726, 23); 71 | this.label_GameName.TabIndex = 2; 72 | this.label_GameName.Text = "游戏名称:"; 73 | // 74 | // label_GamePath 75 | // 76 | this.label_GamePath.Location = new System.Drawing.Point(70, 65); 77 | this.label_GamePath.Name = "label_GamePath"; 78 | this.label_GamePath.Size = new System.Drawing.Size(726, 23); 79 | this.label_GamePath.TabIndex = 3; 80 | this.label_GamePath.Text = "游戏路径:"; 81 | // 82 | // label_ExecuteName 83 | // 84 | this.label_ExecuteName.Location = new System.Drawing.Point(12, 137); 85 | this.label_ExecuteName.Name = "label_ExecuteName"; 86 | this.label_ExecuteName.Size = new System.Drawing.Size(121, 30); 87 | this.label_ExecuteName.TabIndex = 6; 88 | this.label_ExecuteName.Text = "游戏可执行文件名称:"; 89 | // 90 | // input_ExecuteName 91 | // 92 | this.input_ExecuteName.HandCursor = System.Windows.Forms.Cursors.Default; 93 | this.input_ExecuteName.Location = new System.Drawing.Point(139, 137); 94 | this.input_ExecuteName.Name = "input_ExecuteName"; 95 | this.input_ExecuteName.Size = new System.Drawing.Size(552, 30); 96 | this.input_ExecuteName.TabIndex = 7; 97 | this.input_ExecuteName.Text = "Unknown"; 98 | this.input_ExecuteName.TextChanged += new System.EventHandler(this.input_ExecuteName_TextChanged); 99 | // 100 | // button_ExecuteName_Browser 101 | // 102 | this.button_ExecuteName_Browser.HandCursor = System.Windows.Forms.Cursors.Default; 103 | this.button_ExecuteName_Browser.Location = new System.Drawing.Point(697, 137); 104 | this.button_ExecuteName_Browser.Name = "button_ExecuteName_Browser"; 105 | this.button_ExecuteName_Browser.Size = new System.Drawing.Size(99, 30); 106 | this.button_ExecuteName_Browser.TabIndex = 8; 107 | this.button_ExecuteName_Browser.Text = "浏览..."; 108 | this.button_ExecuteName_Browser.Click += new System.EventHandler(this.button_ExecuteName_Browser_Click); 109 | // 110 | // openFileDialog 111 | // 112 | this.openFileDialog.FileName = "openFileDialog"; 113 | this.openFileDialog.Filter = "可执行文件|*.exe"; 114 | // 115 | // timer 116 | // 117 | this.timer.Enabled = true; 118 | this.timer.Interval = 10; 119 | this.timer.Tick += new System.EventHandler(this.timer_Tick); 120 | // 121 | // panel_Info 122 | // 123 | this.panel_Info.Controls.Add(this.label_FirstLaunch); 124 | this.panel_Info.Controls.Add(this.label_PlayTime); 125 | this.panel_Info.Controls.Add(this.label_Info); 126 | this.panel_Info.HandCursor = System.Windows.Forms.Cursors.Default; 127 | this.panel_Info.Location = new System.Drawing.Point(12, 173); 128 | this.panel_Info.Name = "panel_Info"; 129 | this.panel_Info.Size = new System.Drawing.Size(792, 132); 130 | this.panel_Info.TabIndex = 10; 131 | // 132 | // label_FirstLaunch 133 | // 134 | this.label_FirstLaunch.BackColor = System.Drawing.Color.Transparent; 135 | this.label_FirstLaunch.HandCursor = System.Windows.Forms.Cursors.Default; 136 | this.label_FirstLaunch.Location = new System.Drawing.Point(5, 65); 137 | this.label_FirstLaunch.Name = "label_FirstLaunch"; 138 | this.label_FirstLaunch.Size = new System.Drawing.Size(776, 23); 139 | this.label_FirstLaunch.TabIndex = 2; 140 | this.label_FirstLaunch.Text = "初次启动: UNKNOWN"; 141 | // 142 | // label_PlayTime 143 | // 144 | this.label_PlayTime.BackColor = System.Drawing.Color.Transparent; 145 | this.label_PlayTime.HandCursor = System.Windows.Forms.Cursors.Default; 146 | this.label_PlayTime.Location = new System.Drawing.Point(5, 41); 147 | this.label_PlayTime.Name = "label_PlayTime"; 148 | this.label_PlayTime.Size = new System.Drawing.Size(776, 23); 149 | this.label_PlayTime.TabIndex = 1; 150 | this.label_PlayTime.Text = "游玩时间: UNKNOWN 分钟"; 151 | // 152 | // label_Info 153 | // 154 | this.label_Info.BackColor = System.Drawing.Color.Transparent; 155 | this.label_Info.Font = new System.Drawing.Font("微软雅黑", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); 156 | this.label_Info.HandCursor = System.Windows.Forms.Cursors.Default; 157 | this.label_Info.Location = new System.Drawing.Point(5, 5); 158 | this.label_Info.Name = "label_Info"; 159 | this.label_Info.Size = new System.Drawing.Size(120, 30); 160 | this.label_Info.TabIndex = 0; 161 | this.label_Info.Text = "统计信息"; 162 | // 163 | // button_Pak 164 | // 165 | this.button_Pak.HandCursor = System.Windows.Forms.Cursors.Default; 166 | this.button_Pak.Icon = global::PvzLauncher.Properties.Resources.replace; 167 | this.button_Pak.IconRatio = 0.8F; 168 | this.button_Pak.Location = new System.Drawing.Point(486, 94); 169 | this.button_Pak.Name = "button_Pak"; 170 | this.button_Pak.Size = new System.Drawing.Size(152, 37); 171 | this.button_Pak.TabIndex = 11; 172 | this.button_Pak.Text = "替换pak文件"; 173 | this.button_Pak.Type = AntdUI.TTypeMini.Warn; 174 | this.button_Pak.Click += new System.EventHandler(this.button_Pak_Click); 175 | // 176 | // button_OpenGameFoler 177 | // 178 | this.button_OpenGameFoler.HandCursor = System.Windows.Forms.Cursors.Default; 179 | this.button_OpenGameFoler.Icon = global::PvzLauncher.Properties.Resources.folder; 180 | this.button_OpenGameFoler.IconRatio = 0.8F; 181 | this.button_OpenGameFoler.Location = new System.Drawing.Point(170, 94); 182 | this.button_OpenGameFoler.Name = "button_OpenGameFoler"; 183 | this.button_OpenGameFoler.Size = new System.Drawing.Size(152, 37); 184 | this.button_OpenGameFoler.TabIndex = 9; 185 | this.button_OpenGameFoler.Text = "打开游戏文件夹"; 186 | this.button_OpenGameFoler.Type = AntdUI.TTypeMini.Primary; 187 | this.button_OpenGameFoler.Click += new System.EventHandler(this.button_OpenGameFoler_Click); 188 | // 189 | // button_DeleteGame 190 | // 191 | this.button_DeleteGame.HandCursor = System.Windows.Forms.Cursors.Default; 192 | this.button_DeleteGame.Icon = global::PvzLauncher.Properties.Resources.delete; 193 | this.button_DeleteGame.IconRatio = 0.8F; 194 | this.button_DeleteGame.Location = new System.Drawing.Point(328, 94); 195 | this.button_DeleteGame.Name = "button_DeleteGame"; 196 | this.button_DeleteGame.Size = new System.Drawing.Size(152, 37); 197 | this.button_DeleteGame.TabIndex = 5; 198 | this.button_DeleteGame.Text = "删除游戏"; 199 | this.button_DeleteGame.Type = AntdUI.TTypeMini.Error; 200 | this.button_DeleteGame.Click += new System.EventHandler(this.button_DeleteGame_Click); 201 | // 202 | // button_SetName 203 | // 204 | this.button_SetName.HandCursor = System.Windows.Forms.Cursors.Default; 205 | this.button_SetName.Icon = global::PvzLauncher.Properties.Resources.edit; 206 | this.button_SetName.IconRatio = 0.8F; 207 | this.button_SetName.Location = new System.Drawing.Point(12, 94); 208 | this.button_SetName.Name = "button_SetName"; 209 | this.button_SetName.Size = new System.Drawing.Size(152, 37); 210 | this.button_SetName.TabIndex = 4; 211 | this.button_SetName.Text = "更改游戏名称"; 212 | this.button_SetName.Type = AntdUI.TTypeMini.Primary; 213 | this.button_SetName.Click += new System.EventHandler(this.button_SetName_Click); 214 | // 215 | // image3D_GameIcon 216 | // 217 | this.image3D_GameIcon.HandCursor = System.Windows.Forms.Cursors.Default; 218 | this.image3D_GameIcon.Image = global::PvzLauncher.Properties.Resources.icon; 219 | this.image3D_GameIcon.Location = new System.Drawing.Point(12, 36); 220 | this.image3D_GameIcon.Name = "image3D_GameIcon"; 221 | this.image3D_GameIcon.Size = new System.Drawing.Size(52, 52); 222 | this.image3D_GameIcon.TabIndex = 1; 223 | this.image3D_GameIcon.Text = "image3D1"; 224 | // 225 | // button_RePak 226 | // 227 | this.button_RePak.HandCursor = System.Windows.Forms.Cursors.Default; 228 | this.button_RePak.Icon = global::PvzLauncher.Properties.Resources.refresh; 229 | this.button_RePak.IconRatio = 1F; 230 | this.button_RePak.Location = new System.Drawing.Point(644, 94); 231 | this.button_RePak.Name = "button_RePak"; 232 | this.button_RePak.Size = new System.Drawing.Size(152, 37); 233 | this.button_RePak.TabIndex = 12; 234 | this.button_RePak.Text = "恢复pak文件"; 235 | this.button_RePak.Type = AntdUI.TTypeMini.Warn; 236 | this.button_RePak.Click += new System.EventHandler(this.button_RePak_Click); 237 | // 238 | // openFileDialog_pak 239 | // 240 | this.openFileDialog_pak.Filter = "植物大战僵尸pak文件|*.pak"; 241 | this.openFileDialog_pak.Title = "请选择有效的pak文件"; 242 | // 243 | // SetGame_Window 244 | // 245 | this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); 246 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 247 | this.ClientSize = new System.Drawing.Size(816, 317); 248 | this.Controls.Add(this.button_RePak); 249 | this.Controls.Add(this.button_Pak); 250 | this.Controls.Add(this.panel_Info); 251 | this.Controls.Add(this.button_OpenGameFoler); 252 | this.Controls.Add(this.button_ExecuteName_Browser); 253 | this.Controls.Add(this.input_ExecuteName); 254 | this.Controls.Add(this.label_ExecuteName); 255 | this.Controls.Add(this.button_DeleteGame); 256 | this.Controls.Add(this.button_SetName); 257 | this.Controls.Add(this.label_GamePath); 258 | this.Controls.Add(this.label_GameName); 259 | this.Controls.Add(this.image3D_GameIcon); 260 | this.Controls.Add(this.pageHeader1); 261 | this.EnableHitTest = false; 262 | this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); 263 | this.Margin = new System.Windows.Forms.Padding(4); 264 | this.MaximizeBox = false; 265 | this.MinimizeBox = false; 266 | this.MinimumSize = new System.Drawing.Size(753, 317); 267 | this.Name = "SetGame_Window"; 268 | this.Resizable = false; 269 | this.ShowInTaskbar = false; 270 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 271 | this.Text = "SetGame_Window"; 272 | this.Load += new System.EventHandler(this.SetGame_Window_Load); 273 | this.panel_Info.ResumeLayout(false); 274 | this.ResumeLayout(false); 275 | 276 | } 277 | 278 | #endregion 279 | 280 | private AntdUI.PageHeader pageHeader1; 281 | private AntdUI.Image3D image3D_GameIcon; 282 | private AntdUI.Label label_GameName; 283 | private AntdUI.Label label_GamePath; 284 | private AntdUI.Button button_SetName; 285 | private AntdUI.Button button_DeleteGame; 286 | private AntdUI.Label label_ExecuteName; 287 | private AntdUI.Input input_ExecuteName; 288 | private AntdUI.Button button_ExecuteName_Browser; 289 | private AntdUI.Button button_OpenGameFoler; 290 | private System.Windows.Forms.OpenFileDialog openFileDialog; 291 | private System.Windows.Forms.Timer timer; 292 | private AntdUI.Panel panel_Info; 293 | private AntdUI.Label label_Info; 294 | private AntdUI.Label label_PlayTime; 295 | private AntdUI.Label label_FirstLaunch; 296 | private AntdUI.Button button_Pak; 297 | private AntdUI.Button button_RePak; 298 | private System.Windows.Forms.OpenFileDialog openFileDialog_pak; 299 | } 300 | } -------------------------------------------------------------------------------- /Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // 此代码由工具生成。 4 | // 运行时版本:4.0.30319.42000 5 | // 6 | // 对此文件的更改可能会导致不正确的行为,并且如果 7 | // 重新生成代码,这些更改将会丢失。 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace PvzLauncher.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// 一个强类型的资源类,用于查找本地化的字符串等。 17 | /// 18 | // 此类是由 StronglyTypedResourceBuilder 19 | // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 20 | // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen 21 | // (以 /str 作为命令选项),或重新生成 VS 项目。 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// 返回此类使用的缓存的 ResourceManager 实例。 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PvzLauncher.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// 重写当前线程的 CurrentUICulture 属性,对 51 | /// 使用此强类型资源类的所有资源查找执行重写。 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 65 | /// 66 | internal static System.Drawing.Bitmap about { 67 | get { 68 | object obj = ResourceManager.GetObject("about", resourceCulture); 69 | return ((System.Drawing.Bitmap)(obj)); 70 | } 71 | } 72 | 73 | /// 74 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 75 | /// 76 | internal static System.Drawing.Bitmap add { 77 | get { 78 | object obj = ResourceManager.GetObject("add", resourceCulture); 79 | return ((System.Drawing.Bitmap)(obj)); 80 | } 81 | } 82 | 83 | /// 84 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 85 | /// 86 | internal static System.Drawing.Bitmap alphatest { 87 | get { 88 | object obj = ResourceManager.GetObject("alphatest", resourceCulture); 89 | return ((System.Drawing.Bitmap)(obj)); 90 | } 91 | } 92 | 93 | /// 94 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 95 | /// 96 | internal static System.Drawing.Bitmap bilibili { 97 | get { 98 | object obj = ResourceManager.GetObject("bilibili", resourceCulture); 99 | return ((System.Drawing.Bitmap)(obj)); 100 | } 101 | } 102 | 103 | /// 104 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 105 | /// 106 | internal static System.Drawing.Bitmap cancel { 107 | get { 108 | object obj = ResourceManager.GetObject("cancel", resourceCulture); 109 | return ((System.Drawing.Bitmap)(obj)); 110 | } 111 | } 112 | 113 | /// 114 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 115 | /// 116 | internal static System.Drawing.Bitmap close { 117 | get { 118 | object obj = ResourceManager.GetObject("close", resourceCulture); 119 | return ((System.Drawing.Bitmap)(obj)); 120 | } 121 | } 122 | 123 | /// 124 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 125 | /// 126 | internal static System.Drawing.Bitmap delete { 127 | get { 128 | object obj = ResourceManager.GetObject("delete", resourceCulture); 129 | return ((System.Drawing.Bitmap)(obj)); 130 | } 131 | } 132 | 133 | /// 134 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 135 | /// 136 | internal static System.Drawing.Bitmap done { 137 | get { 138 | object obj = ResourceManager.GetObject("done", resourceCulture); 139 | return ((System.Drawing.Bitmap)(obj)); 140 | } 141 | } 142 | 143 | /// 144 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 145 | /// 146 | internal static System.Drawing.Bitmap download { 147 | get { 148 | object obj = ResourceManager.GetObject("download", resourceCulture); 149 | return ((System.Drawing.Bitmap)(obj)); 150 | } 151 | } 152 | 153 | /// 154 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 155 | /// 156 | internal static System.Drawing.Bitmap edit { 157 | get { 158 | object obj = ResourceManager.GetObject("edit", resourceCulture); 159 | return ((System.Drawing.Bitmap)(obj)); 160 | } 161 | } 162 | 163 | /// 164 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 165 | /// 166 | internal static System.Drawing.Bitmap error { 167 | get { 168 | object obj = ResourceManager.GetObject("error", resourceCulture); 169 | return ((System.Drawing.Bitmap)(obj)); 170 | } 171 | } 172 | 173 | /// 174 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 175 | /// 176 | internal static System.Drawing.Bitmap folder { 177 | get { 178 | object obj = ResourceManager.GetObject("folder", resourceCulture); 179 | return ((System.Drawing.Bitmap)(obj)); 180 | } 181 | } 182 | 183 | /// 184 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 185 | /// 186 | internal static System.Drawing.Bitmap game { 187 | get { 188 | object obj = ResourceManager.GetObject("game", resourceCulture); 189 | return ((System.Drawing.Bitmap)(obj)); 190 | } 191 | } 192 | 193 | /// 194 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 195 | /// 196 | internal static System.Drawing.Bitmap gitee { 197 | get { 198 | object obj = ResourceManager.GetObject("gitee", resourceCulture); 199 | return ((System.Drawing.Bitmap)(obj)); 200 | } 201 | } 202 | 203 | /// 204 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 205 | /// 206 | internal static System.Drawing.Bitmap github { 207 | get { 208 | object obj = ResourceManager.GetObject("github", resourceCulture); 209 | return ((System.Drawing.Bitmap)(obj)); 210 | } 211 | } 212 | 213 | /// 214 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 215 | /// 216 | internal static System.Drawing.Bitmap home { 217 | get { 218 | object obj = ResourceManager.GetObject("home", resourceCulture); 219 | return ((System.Drawing.Bitmap)(obj)); 220 | } 221 | } 222 | 223 | /// 224 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 225 | /// 226 | internal static System.Drawing.Bitmap icon { 227 | get { 228 | object obj = ResourceManager.GetObject("icon", resourceCulture); 229 | return ((System.Drawing.Bitmap)(obj)); 230 | } 231 | } 232 | 233 | /// 234 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 235 | /// 236 | internal static System.Drawing.Bitmap icon_outline { 237 | get { 238 | object obj = ResourceManager.GetObject("icon_outline", resourceCulture); 239 | return ((System.Drawing.Bitmap)(obj)); 240 | } 241 | } 242 | 243 | /// 244 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 245 | /// 246 | internal static System.Drawing.Bitmap launch { 247 | get { 248 | object obj = ResourceManager.GetObject("launch", resourceCulture); 249 | return ((System.Drawing.Bitmap)(obj)); 250 | } 251 | } 252 | 253 | /// 254 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 255 | /// 256 | internal static System.Drawing.Bitmap miss_texture { 257 | get { 258 | object obj = ResourceManager.GetObject("miss_texture", resourceCulture); 259 | return ((System.Drawing.Bitmap)(obj)); 260 | } 261 | } 262 | 263 | /// 264 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 265 | /// 266 | internal static System.Drawing.Bitmap PvZ_Logo { 267 | get { 268 | object obj = ResourceManager.GetObject("PvZ_Logo", resourceCulture); 269 | return ((System.Drawing.Bitmap)(obj)); 270 | } 271 | } 272 | 273 | /// 274 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 275 | /// 276 | internal static System.Drawing.Bitmap PvZ_Logo_zh { 277 | get { 278 | object obj = ResourceManager.GetObject("PvZ_Logo_zh", resourceCulture); 279 | return ((System.Drawing.Bitmap)(obj)); 280 | } 281 | } 282 | 283 | /// 284 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 285 | /// 286 | internal static System.Drawing.Bitmap PvzToolkit { 287 | get { 288 | object obj = ResourceManager.GetObject("PvzToolkit", resourceCulture); 289 | return ((System.Drawing.Bitmap)(obj)); 290 | } 291 | } 292 | 293 | /// 294 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 295 | /// 296 | internal static System.Drawing.Bitmap PvzToolkit_ { 297 | get { 298 | object obj = ResourceManager.GetObject("PvzToolkit_", resourceCulture); 299 | return ((System.Drawing.Bitmap)(obj)); 300 | } 301 | } 302 | 303 | /// 304 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 305 | /// 306 | internal static System.Drawing.Bitmap qq { 307 | get { 308 | object obj = ResourceManager.GetObject("qq", resourceCulture); 309 | return ((System.Drawing.Bitmap)(obj)); 310 | } 311 | } 312 | 313 | /// 314 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 315 | /// 316 | internal static System.Drawing.Bitmap refresh { 317 | get { 318 | object obj = ResourceManager.GetObject("refresh", resourceCulture); 319 | return ((System.Drawing.Bitmap)(obj)); 320 | } 321 | } 322 | 323 | /// 324 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 325 | /// 326 | internal static System.Drawing.Bitmap replace { 327 | get { 328 | object obj = ResourceManager.GetObject("replace", resourceCulture); 329 | return ((System.Drawing.Bitmap)(obj)); 330 | } 331 | } 332 | 333 | /// 334 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 335 | /// 336 | internal static System.Drawing.Bitmap save { 337 | get { 338 | object obj = ResourceManager.GetObject("save", resourceCulture); 339 | return ((System.Drawing.Bitmap)(obj)); 340 | } 341 | } 342 | 343 | /// 344 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 345 | /// 346 | internal static System.Drawing.Bitmap save_ { 347 | get { 348 | object obj = ResourceManager.GetObject("save_", resourceCulture); 349 | return ((System.Drawing.Bitmap)(obj)); 350 | } 351 | } 352 | 353 | /// 354 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 355 | /// 356 | internal static System.Drawing.Bitmap select { 357 | get { 358 | object obj = ResourceManager.GetObject("select", resourceCulture); 359 | return ((System.Drawing.Bitmap)(obj)); 360 | } 361 | } 362 | 363 | /// 364 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 365 | /// 366 | internal static System.Drawing.Bitmap settings { 367 | get { 368 | object obj = ResourceManager.GetObject("settings", resourceCulture); 369 | return ((System.Drawing.Bitmap)(obj)); 370 | } 371 | } 372 | 373 | /// 374 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 375 | /// 376 | internal static System.Drawing.Bitmap settings_ { 377 | get { 378 | object obj = ResourceManager.GetObject("settings_", resourceCulture); 379 | return ((System.Drawing.Bitmap)(obj)); 380 | } 381 | } 382 | 383 | /// 384 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 385 | /// 386 | internal static System.Drawing.Bitmap titlescreen { 387 | get { 388 | object obj = ResourceManager.GetObject("titlescreen", resourceCulture); 389 | return ((System.Drawing.Bitmap)(obj)); 390 | } 391 | } 392 | 393 | /// 394 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 395 | /// 396 | internal static System.Drawing.Bitmap titlescreen_home { 397 | get { 398 | object obj = ResourceManager.GetObject("titlescreen_home", resourceCulture); 399 | return ((System.Drawing.Bitmap)(obj)); 400 | } 401 | } 402 | 403 | /// 404 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 405 | /// 406 | internal static System.Drawing.Bitmap titlescreen_home_ { 407 | get { 408 | object obj = ResourceManager.GetObject("titlescreen_home_", resourceCulture); 409 | return ((System.Drawing.Bitmap)(obj)); 410 | } 411 | } 412 | 413 | /// 414 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 415 | /// 416 | internal static System.Drawing.Bitmap update { 417 | get { 418 | object obj = ResourceManager.GetObject("update", resourceCulture); 419 | return ((System.Drawing.Bitmap)(obj)); 420 | } 421 | } 422 | 423 | /// 424 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 425 | /// 426 | internal static System.Drawing.Bitmap victroy { 427 | get { 428 | object obj = ResourceManager.GetObject("victroy", resourceCulture); 429 | return ((System.Drawing.Bitmap)(obj)); 430 | } 431 | } 432 | } 433 | } 434 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Mozilla Public License Version 2.0 2 | ================================== 3 | 4 | 1. Definitions 5 | -------------- 6 | 7 | 1.1. "Contributor" 8 | means each individual or legal entity that creates, contributes to 9 | the creation of, or owns Covered Software. 10 | 11 | 1.2. "Contributor Version" 12 | means the combination of the Contributions of others (if any) used 13 | by a Contributor and that particular Contributor's Contribution. 14 | 15 | 1.3. "Contribution" 16 | means Covered Software of a particular Contributor. 17 | 18 | 1.4. "Covered Software" 19 | means Source Code Form to which the initial Contributor has attached 20 | the notice in Exhibit A, the Executable Form of such Source Code 21 | Form, and Modifications of such Source Code Form, in each case 22 | including portions thereof. 23 | 24 | 1.5. "Incompatible With Secondary Licenses" 25 | means 26 | 27 | (a) that the initial Contributor has attached the notice described 28 | in Exhibit B to the Covered Software; or 29 | 30 | (b) that the Covered Software was made available under the terms of 31 | version 1.1 or earlier of the License, but not also under the 32 | terms of a Secondary License. 33 | 34 | 1.6. "Executable Form" 35 | means any form of the work other than Source Code Form. 36 | 37 | 1.7. "Larger Work" 38 | means a work that combines Covered Software with other material, in 39 | a separate file or files, that is not Covered Software. 40 | 41 | 1.8. "License" 42 | means this document. 43 | 44 | 1.9. "Licensable" 45 | means having the right to grant, to the maximum extent possible, 46 | whether at the time of the initial grant or subsequently, any and 47 | all of the rights conveyed by this License. 48 | 49 | 1.10. "Modifications" 50 | means any of the following: 51 | 52 | (a) any file in Source Code Form that results from an addition to, 53 | deletion from, or modification of the contents of Covered 54 | Software; or 55 | 56 | (b) any new file in Source Code Form that contains any Covered 57 | Software. 58 | 59 | 1.11. "Patent Claims" of a Contributor 60 | means any patent claim(s), including without limitation, method, 61 | process, and apparatus claims, in any patent Licensable by such 62 | Contributor that would be infringed, but for the grant of the 63 | License, by the making, using, selling, offering for sale, having 64 | made, import, or transfer of either its Contributions or its 65 | Contributor Version. 66 | 67 | 1.12. "Secondary License" 68 | means either the GNU General Public License, Version 2.0, the GNU 69 | Lesser General Public License, Version 2.1, the GNU Affero General 70 | Public License, Version 3.0, or any later versions of those 71 | licenses. 72 | 73 | 1.13. "Source Code Form" 74 | means the form of the work preferred for making modifications. 75 | 76 | 1.14. "You" (or "Your") 77 | means an individual or a legal entity exercising rights under this 78 | License. For legal entities, "You" includes any entity that 79 | controls, is controlled by, or is under common control with You. For 80 | purposes of this definition, "control" means (a) the power, direct 81 | or indirect, to cause the direction or management of such entity, 82 | whether by contract or otherwise, or (b) ownership of more than 83 | fifty percent (50%) of the outstanding shares or beneficial 84 | ownership of such entity. 85 | 86 | 2. License Grants and Conditions 87 | -------------------------------- 88 | 89 | 2.1. Grants 90 | 91 | Each Contributor hereby grants You a world-wide, royalty-free, 92 | non-exclusive license: 93 | 94 | (a) under intellectual property rights (other than patent or trademark) 95 | Licensable by such Contributor to use, reproduce, make available, 96 | modify, display, perform, distribute, and otherwise exploit its 97 | Contributions, either on an unmodified basis, with Modifications, or 98 | as part of a Larger Work; and 99 | 100 | (b) under Patent Claims of such Contributor to make, use, sell, offer 101 | for sale, have made, import, and otherwise transfer either its 102 | Contributions or its Contributor Version. 103 | 104 | 2.2. Effective Date 105 | 106 | The licenses granted in Section 2.1 with respect to any Contribution 107 | become effective for each Contribution on the date the Contributor first 108 | distributes such Contribution. 109 | 110 | 2.3. Limitations on Grant Scope 111 | 112 | The licenses granted in this Section 2 are the only rights granted under 113 | this License. No additional rights or licenses will be implied from the 114 | distribution or licensing of Covered Software under this License. 115 | Notwithstanding Section 2.1(b) above, no patent license is granted by a 116 | Contributor: 117 | 118 | (a) for any code that a Contributor has removed from Covered Software; 119 | or 120 | 121 | (b) for infringements caused by: (i) Your and any other third party's 122 | modifications of Covered Software, or (ii) the combination of its 123 | Contributions with other software (except as part of its Contributor 124 | Version); or 125 | 126 | (c) under Patent Claims infringed by Covered Software in the absence of 127 | its Contributions. 128 | 129 | This License does not grant any rights in the trademarks, service marks, 130 | or logos of any Contributor (except as may be necessary to comply with 131 | the notice requirements in Section 3.4). 132 | 133 | 2.4. Subsequent Licenses 134 | 135 | No Contributor makes additional grants as a result of Your choice to 136 | distribute the Covered Software under a subsequent version of this 137 | License (see Section 10.2) or under the terms of a Secondary License (if 138 | permitted under the terms of Section 3.3). 139 | 140 | 2.5. Representation 141 | 142 | Each Contributor represents that the Contributor believes its 143 | Contributions are its original creation(s) or it has sufficient rights 144 | to grant the rights to its Contributions conveyed by this License. 145 | 146 | 2.6. Fair Use 147 | 148 | This License is not intended to limit any rights You have under 149 | applicable copyright doctrines of fair use, fair dealing, or other 150 | equivalents. 151 | 152 | 2.7. Conditions 153 | 154 | Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted 155 | in Section 2.1. 156 | 157 | 3. Responsibilities 158 | ------------------- 159 | 160 | 3.1. Distribution of Source Form 161 | 162 | All distribution of Covered Software in Source Code Form, including any 163 | Modifications that You create or to which You contribute, must be under 164 | the terms of this License. You must inform recipients that the Source 165 | Code Form of the Covered Software is governed by the terms of this 166 | License, and how they can obtain a copy of this License. You may not 167 | attempt to alter or restrict the recipients' rights in the Source Code 168 | Form. 169 | 170 | 3.2. Distribution of Executable Form 171 | 172 | If You distribute Covered Software in Executable Form then: 173 | 174 | (a) such Covered Software must also be made available in Source Code 175 | Form, as described in Section 3.1, and You must inform recipients of 176 | the Executable Form how they can obtain a copy of such Source Code 177 | Form by reasonable means in a timely manner, at a charge no more 178 | than the cost of distribution to the recipient; and 179 | 180 | (b) You may distribute such Executable Form under the terms of this 181 | License, or sublicense it under different terms, provided that the 182 | license for the Executable Form does not attempt to limit or alter 183 | the recipients' rights in the Source Code Form under this License. 184 | 185 | 3.3. Distribution of a Larger Work 186 | 187 | You may create and distribute a Larger Work under terms of Your choice, 188 | provided that You also comply with the requirements of this License for 189 | the Covered Software. If the Larger Work is a combination of Covered 190 | Software with a work governed by one or more Secondary Licenses, and the 191 | Covered Software is not Incompatible With Secondary Licenses, this 192 | License permits You to additionally distribute such Covered Software 193 | under the terms of such Secondary License(s), so that the recipient of 194 | the Larger Work may, at their option, further distribute the Covered 195 | Software under the terms of either this License or such Secondary 196 | License(s). 197 | 198 | 3.4. Notices 199 | 200 | You may not remove or alter the substance of any license notices 201 | (including copyright notices, patent notices, disclaimers of warranty, 202 | or limitations of liability) contained within the Source Code Form of 203 | the Covered Software, except that You may alter any license notices to 204 | the extent required to remedy known factual inaccuracies. 205 | 206 | 3.5. Application of Additional Terms 207 | 208 | You may choose to offer, and to charge a fee for, warranty, support, 209 | indemnity or liability obligations to one or more recipients of Covered 210 | Software. However, You may do so only on Your own behalf, and not on 211 | behalf of any Contributor. You must make it absolutely clear that any 212 | such warranty, support, indemnity, or liability obligation is offered by 213 | You alone, and You hereby agree to indemnify every Contributor for any 214 | liability incurred by such Contributor as a result of warranty, support, 215 | indemnity or liability terms You offer. You may include additional 216 | disclaimers of warranty and limitations of liability specific to any 217 | jurisdiction. 218 | 219 | 4. Inability to Comply Due to Statute or Regulation 220 | --------------------------------------------------- 221 | 222 | If it is impossible for You to comply with any of the terms of this 223 | License with respect to some or all of the Covered Software due to 224 | statute, judicial order, or regulation then You must: (a) comply with 225 | the terms of this License to the maximum extent possible; and (b) 226 | describe the limitations and the code they affect. Such description must 227 | be placed in a text file included with all distributions of the Covered 228 | Software under this License. Except to the extent prohibited by statute 229 | or regulation, such description must be sufficiently detailed for a 230 | recipient of ordinary skill to be able to understand it. 231 | 232 | 5. Termination 233 | -------------- 234 | 235 | 5.1. The rights granted under this License will terminate automatically 236 | if You fail to comply with any of its terms. However, if You become 237 | compliant, then the rights granted under this License from a particular 238 | Contributor are reinstated (a) provisionally, unless and until such 239 | Contributor explicitly and finally terminates Your grants, and (b) on an 240 | ongoing basis, if such Contributor fails to notify You of the 241 | non-compliance by some reasonable means prior to 60 days after You have 242 | come back into compliance. Moreover, Your grants from a particular 243 | Contributor are reinstated on an ongoing basis if such Contributor 244 | notifies You of the non-compliance by some reasonable means, this is the 245 | first time You have received notice of non-compliance with this License 246 | from such Contributor, and You become compliant prior to 30 days after 247 | Your receipt of the notice. 248 | 249 | 5.2. If You initiate litigation against any entity by asserting a patent 250 | infringement claim (excluding declaratory judgment actions, 251 | counter-claims, and cross-claims) alleging that a Contributor Version 252 | directly or indirectly infringes any patent, then the rights granted to 253 | You by any and all Contributors for the Covered Software under Section 254 | 2.1 of this License shall terminate. 255 | 256 | 5.3. In the event of termination under Sections 5.1 or 5.2 above, all 257 | end user license agreements (excluding distributors and resellers) which 258 | have been validly granted by You or Your distributors under this License 259 | prior to termination shall survive termination. 260 | 261 | ************************************************************************ 262 | * * 263 | * 6. Disclaimer of Warranty * 264 | * ------------------------- * 265 | * * 266 | * Covered Software is provided under this License on an "as is" * 267 | * basis, without warranty of any kind, either expressed, implied, or * 268 | * statutory, including, without limitation, warranties that the * 269 | * Covered Software is free of defects, merchantable, fit for a * 270 | * particular purpose or non-infringing. The entire risk as to the * 271 | * quality and performance of the Covered Software is with You. * 272 | * Should any Covered Software prove defective in any respect, You * 273 | * (not any Contributor) assume the cost of any necessary servicing, * 274 | * repair, or correction. This disclaimer of warranty constitutes an * 275 | * essential part of this License. No use of any Covered Software is * 276 | * authorized under this License except under this disclaimer. * 277 | * * 278 | ************************************************************************ 279 | 280 | ************************************************************************ 281 | * * 282 | * 7. Limitation of Liability * 283 | * -------------------------- * 284 | * * 285 | * Under no circumstances and under no legal theory, whether tort * 286 | * (including negligence), contract, or otherwise, shall any * 287 | * Contributor, or anyone who distributes Covered Software as * 288 | * permitted above, be liable to You for any direct, indirect, * 289 | * special, incidental, or consequential damages of any character * 290 | * including, without limitation, damages for lost profits, loss of * 291 | * goodwill, work stoppage, computer failure or malfunction, or any * 292 | * and all other commercial damages or losses, even if such party * 293 | * shall have been informed of the possibility of such damages. This * 294 | * limitation of liability shall not apply to liability for death or * 295 | * personal injury resulting from such party's negligence to the * 296 | * extent applicable law prohibits such limitation. Some * 297 | * jurisdictions do not allow the exclusion or limitation of * 298 | * incidental or consequential damages, so this exclusion and * 299 | * limitation may not apply to You. * 300 | * * 301 | ************************************************************************ 302 | 303 | 8. Litigation 304 | ------------- 305 | 306 | Any litigation relating to this License may be brought only in the 307 | courts of a jurisdiction where the defendant maintains its principal 308 | place of business and such litigation shall be governed by laws of that 309 | jurisdiction, without reference to its conflict-of-law provisions. 310 | Nothing in this Section shall prevent a party's ability to bring 311 | cross-claims or counter-claims. 312 | 313 | 9. Miscellaneous 314 | ---------------- 315 | 316 | This License represents the complete agreement concerning the subject 317 | matter hereof. If any provision of this License is held to be 318 | unenforceable, such provision shall be reformed only to the extent 319 | necessary to make it enforceable. Any law or regulation which provides 320 | that the language of a contract shall be construed against the drafter 321 | shall not be used to construe this License against a Contributor. 322 | 323 | 10. Versions of the License 324 | --------------------------- 325 | 326 | 10.1. New Versions 327 | 328 | Mozilla Foundation is the license steward. Except as provided in Section 329 | 10.3, no one other than the license steward has the right to modify or 330 | publish new versions of this License. Each version will be given a 331 | distinguishing version number. 332 | 333 | 10.2. Effect of New Versions 334 | 335 | You may distribute the Covered Software under the terms of the version 336 | of the License under which You originally received the Covered Software, 337 | or under the terms of any subsequent version published by the license 338 | steward. 339 | 340 | 10.3. Modified Versions 341 | 342 | If you create software not governed by this License, and you want to 343 | create a new license for such software, you may create and use a 344 | modified version of this License if you rename the license and remove 345 | any references to the name of the license steward (except to note that 346 | such modified license differs from this License). 347 | 348 | 10.4. Distributing Source Code Form that is Incompatible With Secondary 349 | Licenses 350 | 351 | If You choose to distribute Source Code Form that is Incompatible With 352 | Secondary Licenses under the terms of this version of the License, the 353 | notice described in Exhibit B of this License must be attached. 354 | 355 | Exhibit A - Source Code Form License Notice 356 | ------------------------------------------- 357 | 358 | This Source Code Form is subject to the terms of the Mozilla Public 359 | License, v. 2.0. If a copy of the MPL was not distributed with this 360 | file, You can obtain one at http://mozilla.org/MPL/2.0/. 361 | 362 | If it is not possible or desirable to put the notice in a particular 363 | file, then You may include the notice in a location (such as a LICENSE 364 | file in a relevant directory) where a recipient would be likely to look 365 | for such a notice. 366 | 367 | You may add additional accurate notices of copyright ownership. 368 | 369 | Exhibit B - "Incompatible With Secondary Licenses" Notice 370 | --------------------------------------------------------- 371 | 372 | This Source Code Form is "Incompatible With Secondary Licenses", as 373 | defined by the Mozilla Public License, v. 2.0. 374 | -------------------------------------------------------------------------------- /SetName_Window.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Diagnostics; 6 | using System.Drawing; 7 | using System.IO; 8 | using System.Linq; 9 | using System.Net.Http; 10 | using System.Net; 11 | using System.Runtime.InteropServices; 12 | using System.Security; 13 | using System.Text; 14 | using System.Threading.Tasks; 15 | using System.Windows.Forms; 16 | using Microsoft.Win32; 17 | using AntdUI; 18 | 19 | namespace PvzLauncher 20 | { 21 | public partial class SetName_Window: Form 22 | { 23 | //函数======================================================================================== 24 | #region Functions 25 | 26 | //引用================================================== 27 | //发送系统消息 28 | [System.Runtime.InteropServices.DllImport("user32.dll")] 29 | private static extern bool DestroyIcon(IntPtr hIcon); 30 | 31 | //写PATH系统环境变量 32 | [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 33 | private static extern IntPtr SendMessageTimeout( 34 | IntPtr hWnd, 35 | uint Msg, 36 | UIntPtr wParam, 37 | string lParam, 38 | uint fuFlags, 39 | uint uTimeout, 40 | out UIntPtr lpdwResult); 41 | 42 | private const uint WM_SETTINGCHANGE = 0x001A; 43 | private const uint SMTO_ABORTIFHUNG = 0x0002; 44 | 45 | //创建快捷方式 46 | [ComImport] 47 | [Guid("00021401-0000-0000-C000-000000000046")] 48 | private class ShellLink { } 49 | 50 | [ComImport] 51 | [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 52 | [Guid("000214F9-0000-0000-C000-000000000046")] 53 | private interface IShellLinkW 54 | { 55 | void GetPath([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cchMaxPath, out IntPtr pfd, int fFlags); 56 | void GetIDList(out IntPtr ppidl); 57 | void SetIDList(IntPtr pidl); 58 | void GetDescription([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName, int cchMaxName); 59 | void SetDescription([MarshalAs(UnmanagedType.LPWStr)] string pszName); 60 | void GetWorkingDirectory([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir, int cchMaxPath); 61 | void SetWorkingDirectory([MarshalAs(UnmanagedType.LPWStr)] string pszDir); 62 | void GetArguments([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs, int cchMaxArgs); 63 | void SetArguments([MarshalAs(UnmanagedType.LPWStr)] string pszArgs); 64 | void GetHotkey(out short pwHotkey); 65 | void SetHotkey(short wHotkey); 66 | void GetShowCmd(out int piShowCmd); 67 | void SetShowCmd(int iShowCmd); 68 | void GetIconLocation([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath, int cchIconPath, out int piIcon); 69 | void SetIconLocation([MarshalAs(UnmanagedType.LPWStr)] string pszIconPath, int iIcon); 70 | void SetRelativePath([MarshalAs(UnmanagedType.LPWStr)] string pszPathRel, int dwReserved); 71 | void Resolve(IntPtr hwnd, int fFlags); 72 | void SetPath([MarshalAs(UnmanagedType.LPWStr)] string pszFile); 73 | } 74 | 75 | [ComImport] 76 | [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 77 | [Guid("0000010b-0000-0000-C000-000000000046")] 78 | private interface IPersistFile 79 | { 80 | void GetClassID(out Guid pClassID); 81 | [PreserveSig] 82 | int IsDirty(); 83 | void Load([MarshalAs(UnmanagedType.LPWStr)] string pszFileName, int dwMode); 84 | void Save([MarshalAs(UnmanagedType.LPWStr)] string pszFileName, [MarshalAs(UnmanagedType.Bool)] bool fRemember); 85 | void SaveCompleted([MarshalAs(UnmanagedType.LPWStr)] string pszFileName); 86 | void GetCurFile([MarshalAs(UnmanagedType.LPWStr)] out string ppszFileName); 87 | } 88 | //引用================================================== 89 | 90 | //HTTP读取文件 91 | public static string HttpReadFile(string url) 92 | { 93 | try 94 | { 95 | // 设置安全协议类型(支持TLS 1.2/1.1/1.0) 96 | ServicePointManager.SecurityProtocol = 97 | SecurityProtocolType.Tls12 | 98 | SecurityProtocolType.Tls11 | 99 | SecurityProtocolType.Tls; 100 | 101 | // 创建带自定义验证的HttpClient 102 | using (var handler = new HttpClientHandler()) 103 | using (var client = new HttpClient(handler)) 104 | { 105 | // 忽略SSL证书验证 106 | handler.ServerCertificateCustomValidationCallback = 107 | (sender, cert, chain, sslPolicyErrors) => true; 108 | 109 | // 设置超时时间(10秒) 110 | client.Timeout = TimeSpan.FromSeconds(10); 111 | 112 | // 添加浏览器User-Agent 113 | client.DefaultRequestHeaders.UserAgent.ParseAdd( 114 | "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " + 115 | "(KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); 116 | 117 | // 发送GET请求 118 | var response = client.GetAsync(url).Result; 119 | response.EnsureSuccessStatusCode(); 120 | 121 | // 读取字节内容 122 | var bytes = response.Content.ReadAsByteArrayAsync().Result; 123 | 124 | // 检测编码 125 | var encoding = HttpReadFile_DetectEncoding(response, bytes); 126 | 127 | // 转换为字符串 128 | return encoding.GetString(bytes); 129 | } 130 | } 131 | catch 132 | { 133 | return string.Empty; 134 | } 135 | } 136 | 137 | //HTTPS读文件(检测编码) 138 | private static Encoding HttpReadFile_DetectEncoding(HttpResponseMessage response, byte[] bytes) 139 | { 140 | try 141 | { 142 | // 从Content-Type头获取编码 143 | var contentType = response.Content.Headers.ContentType; 144 | if (contentType?.CharSet != null) 145 | { 146 | return Encoding.GetEncoding(contentType.CharSet); 147 | } 148 | } 149 | catch 150 | { 151 | // 忽略编码解析错误 152 | } 153 | 154 | // 尝试通过BOM检测编码 155 | if (bytes.Length >= 3 && bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) 156 | return Encoding.UTF8; 157 | if (bytes.Length >= 2 && bytes[0] == 0xFE && bytes[1] == 0xFF) 158 | return Encoding.BigEndianUnicode; 159 | if (bytes.Length >= 2 && bytes[0] == 0xFF && bytes[1] == 0xFE) 160 | return Encoding.Unicode; 161 | 162 | // 默认使用UTF-8 163 | return Encoding.UTF8; 164 | } 165 | 166 | //写日志 167 | public static void Log(string level, string message) 168 | { 169 | // 获取当前时间并格式化 170 | string timestamp = DateTime.Now.ToString("HH:mm:ss"); 171 | 172 | // 构造完整日志条目 173 | string logContent = $"[{timestamp}][{level}]: {message}"; 174 | 175 | // 拼接完整文件路径 176 | string logPath = Path.Combine(Application.StartupPath, "Log.log"); 177 | 178 | // 使用追加模式写入文件 179 | using (StreamWriter sw = new StreamWriter(logPath, true)) 180 | { 181 | sw.WriteLine(logContent); 182 | } 183 | 184 | } 185 | 186 | //文件写一行 187 | public static void FileAddLine(string content, string filePath) 188 | { 189 | using (StreamWriter sw = File.AppendText(filePath)) 190 | { 191 | sw.WriteLine(content); 192 | } 193 | } 194 | 195 | //连通性测试 196 | public static object CheckUrlConnection(string url) 197 | { 198 | // 验证URL格式有效性 199 | try 200 | { 201 | var uri = new Uri(url); 202 | } 203 | catch (UriFormatException) 204 | { 205 | return "unconnect"; 206 | } 207 | 208 | HttpWebRequest request = null; 209 | Stopwatch sw = new Stopwatch(); 210 | 211 | try 212 | { 213 | request = (HttpWebRequest)WebRequest.Create(url); 214 | request.Timeout = 5000; // 设置5秒超时 215 | request.Method = "HEAD"; // 使用HEAD方法减少数据量 216 | 217 | sw.Start(); 218 | using (var response = (HttpWebResponse)request.GetResponse()) 219 | { 220 | sw.Stop(); 221 | return sw.ElapsedMilliseconds; 222 | } 223 | } 224 | catch (WebException ex) 225 | { 226 | sw.Stop(); 227 | /* 服务器响应但返回错误状态(如404)的情况 228 | 仍视为连接成功,返回延迟时间 */ 229 | if (ex.Response != null) 230 | { 231 | return sw.ElapsedMilliseconds; 232 | } 233 | return "unconnect"; // 真正无法连接的情况 234 | } 235 | catch (Exception) 236 | { 237 | return "unconnect"; 238 | } 239 | finally 240 | { 241 | request?.Abort(); // 确保释放网络资源 242 | } 243 | } 244 | 245 | //执行控制台命令 246 | public string ExecuteCommand(string command) 247 | { 248 | try 249 | { 250 | var processInfo = new ProcessStartInfo("cmd.exe", "/c " + command) 251 | { 252 | CreateNoWindow = false, // 不创建新窗口 253 | UseShellExecute = false, // 不使用系统外壳程序执行 254 | RedirectStandardError = true, // 重定向标准错误 255 | RedirectStandardOutput = true // 重定向标准输出 256 | }; 257 | 258 | using (var process = new Process()) 259 | { 260 | process.StartInfo = processInfo; 261 | process.Start(); 262 | 263 | // 异步读取输出流和错误流 264 | string output = process.StandardOutput.ReadToEnd(); 265 | string error = process.StandardError.ReadToEnd(); 266 | 267 | process.WaitForExit(); // 等待程序执行完成 268 | 269 | // 组合输出结果 270 | string result = string.IsNullOrEmpty(output) ? "" : output; 271 | string errorResult = string.IsNullOrEmpty(error) ? "" : "\n[Error]\n" + error; 272 | 273 | return $"{result}{errorResult} (ExitCode: {process.ExitCode})"; 274 | } 275 | } 276 | catch (Exception ex) 277 | { 278 | return $"执行命令时发生异常:{ex.Message}"; 279 | } 280 | } 281 | 282 | //搜索文件内容 283 | public bool FileSearchText(string filePath, string searchText) 284 | { 285 | try 286 | { 287 | // 检查搜索文本是否有效 288 | if (string.IsNullOrEmpty(searchText)) 289 | return false; 290 | 291 | // 读取文件全部内容 292 | string fileContent = File.ReadAllText(filePath); 293 | 294 | // 检查内容是否包含目标文本 295 | return fileContent.Contains(searchText); 296 | } 297 | catch (Exception ex) when (ex is FileNotFoundException || 298 | ex is IOException || 299 | ex is UnauthorizedAccessException) 300 | { 301 | // 处理常见文件异常:文件不存在、无法访问或IO错误 302 | return false; 303 | } 304 | } 305 | 306 | //弹出系统通知 307 | public static void ShowNotification(string title, string content) 308 | { 309 | NotifyIcon notifyIcon = new NotifyIcon(); 310 | 311 | // 创建透明图标 312 | using (Bitmap bmp = new Bitmap(1, 1)) 313 | { 314 | bmp.SetPixel(0, 0, Color.Transparent); 315 | IntPtr hIcon = bmp.GetHicon(); 316 | try 317 | { 318 | notifyIcon.Icon = Icon.FromHandle(hIcon); 319 | } 320 | finally 321 | { 322 | DestroyIcon(hIcon); 323 | } 324 | } 325 | 326 | notifyIcon.Visible = true; 327 | 328 | // 设置通知关闭后的清理操作 329 | notifyIcon.BalloonTipClosed += (sender, e) => 330 | { 331 | notifyIcon.Visible = false; 332 | notifyIcon.Dispose(); 333 | }; 334 | 335 | // 显示通知(3000ms=3秒显示时间) 336 | notifyIcon.ShowBalloonTip(3000, title, content, ToolTipIcon.None); 337 | } 338 | 339 | // 写入配置(常规) 340 | public static void Legacy_WriteConfig(string filePath, string key, string value) 341 | { 342 | Dictionary config = new Dictionary(); 343 | 344 | // 如果文件存在,先读取现有配置 345 | if (File.Exists(filePath)) 346 | { 347 | foreach (string line in File.ReadAllLines(filePath)) 348 | { 349 | string[] parts = line.Split(new[] { '=' }, 2); 350 | if (parts.Length == 2 && !string.IsNullOrWhiteSpace(parts[0])) 351 | { 352 | config[parts[0].Trim()] = parts[1].Trim(); 353 | } 354 | } 355 | } 356 | 357 | // 添加/更新键值 358 | config[key] = value; 359 | 360 | // 写入所有配置项 361 | File.WriteAllLines(filePath, 362 | config.Select(kvp => $"{kvp.Key}={kvp.Value}"), 363 | Encoding.UTF8); 364 | } 365 | 366 | // 读取配置(常规) 367 | public static string Legacy_ReadConfig(string filePath, string key) 368 | { 369 | if (!File.Exists(filePath)) return null; 370 | 371 | foreach (string line in File.ReadAllLines(filePath)) 372 | { 373 | string[] parts = line.Split(new[] { '=' }, 2); 374 | if (parts.Length == 2 && 375 | parts[0].Trim().Equals(key, StringComparison.OrdinalIgnoreCase)) 376 | { 377 | return parts[1].Trim(); 378 | } 379 | } 380 | return null; 381 | } 382 | 383 | //写注册表项 384 | //rootKey常用常量 385 | //Registry.CurrentUser (HKEY_CURRENT_USER) 386 | //Registry.LocalMachine (HKEY_LOCAL_MACHINE) 387 | //Registry.ClassesRoot (HKEY_CLASSES_ROOT) 388 | 389 | /*valueKind:支持的类型包括: 390 | String:字符串值 391 | DWord:32位整数 392 | QWord:64位整数 393 | Binary:二进制数据 394 | MultiString:字符串数组*/ 395 | public static bool WriteRegistryValue(RegistryKey rootKey, string subKeyPath, string valueName, object value, RegistryValueKind valueKind) 396 | { 397 | try 398 | { 399 | if (rootKey == null) 400 | throw new ArgumentNullException(nameof(rootKey)); 401 | 402 | if (string.IsNullOrEmpty(subKeyPath)) 403 | throw new ArgumentException("子项路径不能为空", nameof(subKeyPath)); 404 | 405 | using (RegistryKey subKey = rootKey.CreateSubKey(subKeyPath)) 406 | { 407 | if (subKey == null) return false; 408 | 409 | subKey.SetValue(valueName, value, valueKind); 410 | return true; 411 | } 412 | } 413 | catch (UnauthorizedAccessException) 414 | { 415 | // 权限不足,可能需要以管理员身份运行 416 | throw; 417 | } 418 | catch (Exception ex) 419 | { 420 | // 记录异常或处理其他错误 421 | Console.WriteLine($"写入注册表失败: {ex.Message}"); 422 | return false; 423 | } 424 | } 425 | 426 | //读注册表项 427 | public static object ReadRegistryValue(RegistryKey rootKey, string subKeyPath, string valueName, object defaultValue = null) 428 | { 429 | try 430 | { 431 | if (rootKey == null) 432 | throw new ArgumentNullException(nameof(rootKey)); 433 | 434 | if (string.IsNullOrEmpty(subKeyPath)) 435 | throw new ArgumentException("子项路径不能为空", nameof(subKeyPath)); 436 | 437 | using (RegistryKey subKey = rootKey.OpenSubKey(subKeyPath, false)) 438 | { 439 | // 子项不存在时返回默认值 440 | if (subKey == null) return defaultValue; 441 | 442 | // 获取值(值不存在时返回默认值) 443 | return subKey.GetValue(valueName, defaultValue); 444 | } 445 | } 446 | catch (UnauthorizedAccessException) 447 | { 448 | // 权限不足,可能需要管理员权限 449 | throw; 450 | } 451 | catch (Exception ex) 452 | { 453 | // 记录异常或处理其他错误 454 | Console.WriteLine($"读取注册表失败: {ex.Message}"); 455 | return defaultValue; 456 | } 457 | } 458 | 459 | // 写入配置(支持节) 460 | public static void WriteConfig(string filePath, string section, string key, string value) 461 | { 462 | var sections = ParseConfigFile(filePath); 463 | 464 | // 创建或更新节 465 | if (!sections.ContainsKey(section)) 466 | { 467 | sections[section] = new Dictionary(StringComparer.OrdinalIgnoreCase); 468 | } 469 | 470 | // 更新键值 471 | sections[section][key.Trim()] = value; 472 | 473 | // 生成配置文件内容 474 | var lines = new List(); 475 | 476 | // 处理默认节(空节名) 477 | if (sections.TryGetValue("", out var defaultSection) && defaultSection.Count > 0) 478 | { 479 | lines.AddRange(defaultSection.Select(kvp => $"{kvp.Key}={kvp.Value}")); 480 | } 481 | 482 | // 处理带节名的配置(按字母顺序排序) 483 | foreach (var sec in sections.Keys 484 | .Where(s => !string.IsNullOrEmpty(s)) 485 | .OrderBy(s => s, StringComparer.OrdinalIgnoreCase)) 486 | { 487 | // 添加节分隔空行 488 | if (lines.Count > 0) lines.Add(""); 489 | 490 | lines.Add($"[{sec}]"); 491 | lines.AddRange(sections[sec].Select(kvp => $"{kvp.Key}={kvp.Value}")); 492 | } 493 | 494 | File.WriteAllLines(filePath, lines, Encoding.UTF8); 495 | } 496 | 497 | // 读取配置(支持节) 498 | public static string ReadConfig(string filePath, string section, string key) 499 | { 500 | if (!File.Exists(filePath)) return null; 501 | 502 | var sections = ParseConfigFile(filePath); 503 | 504 | if (sections.TryGetValue(section, out var sectionData) && 505 | sectionData.TryGetValue(key, out var value)) 506 | { 507 | return value; 508 | } 509 | return null; 510 | } 511 | 512 | // 解析配置文件为节字典(读写配置) 513 | private static Dictionary> ParseConfigFile(string filePath) 514 | { 515 | var sections = new Dictionary>(StringComparer.OrdinalIgnoreCase); 516 | string currentSection = ""; 517 | 518 | if (File.Exists(filePath)) 519 | { 520 | foreach (var line in File.ReadAllLines(filePath)) 521 | { 522 | var trimmed = line.Trim(); 523 | 524 | // 处理节头 525 | if (trimmed.StartsWith("[") && trimmed.EndsWith("]")) 526 | { 527 | currentSection = trimmed.Substring(1, trimmed.Length - 2).Trim(); 528 | if (!sections.ContainsKey(currentSection)) 529 | { 530 | sections[currentSection] = new Dictionary(StringComparer.OrdinalIgnoreCase); 531 | } 532 | continue; 533 | } 534 | 535 | // 处理键值对 536 | var parts = line.Split(new[] { '=' }, 2); 537 | if (parts.Length == 2 && !string.IsNullOrWhiteSpace(parts[0])) 538 | { 539 | var k = parts[0].Trim(); 540 | var v = parts[1].Trim(); 541 | 542 | if (!sections.ContainsKey(currentSection)) 543 | { 544 | sections[currentSection] = new Dictionary(StringComparer.OrdinalIgnoreCase); 545 | } 546 | 547 | sections[currentSection][k] = v; 548 | } 549 | } 550 | } 551 | return sections; 552 | } 553 | 554 | //删除配置 555 | public static void DeleteConfig(string filePath, string section, string key) 556 | { 557 | if (string.IsNullOrWhiteSpace(key)) 558 | throw new ArgumentException("Key cannot be empty", nameof(key)); 559 | 560 | var sections = ParseConfigFile(filePath); 561 | section = section ?? ""; 562 | 563 | if (sections.TryGetValue(section, out var sectionData) && sectionData.Remove(key)) 564 | { 565 | // 如果节已空则移除整个节 566 | if (sectionData.Count == 0) 567 | { 568 | sections.Remove(section); 569 | } 570 | 571 | SaveSectionsToFile(filePath, sections); 572 | 573 | } 574 | } 575 | 576 | // 统一保存配置的方法 577 | private static void SaveSectionsToFile(string filePath, Dictionary> sections) 578 | { 579 | var lines = new List(); 580 | 581 | // 处理默认节 582 | if (sections.TryGetValue("", out var defaultSection) && defaultSection.Count > 0) 583 | { 584 | lines.AddRange(defaultSection.Select(kvp => $"{kvp.Key}={kvp.Value}")); 585 | } 586 | 587 | // 处理带节名的配置(按字母排序) 588 | foreach (var sec in sections.Keys 589 | .Where(s => !string.IsNullOrEmpty(s)) 590 | .OrderBy(s => s, StringComparer.OrdinalIgnoreCase)) 591 | { 592 | var sectionData = sections[sec]; 593 | if (sectionData.Count == 0) continue; 594 | 595 | if (lines.Count > 0) lines.Add(""); 596 | lines.Add($"[{sec}]"); 597 | lines.AddRange(sectionData.Select(kvp => $"{kvp.Key}={kvp.Value}")); 598 | } 599 | 600 | File.WriteAllLines(filePath, lines, Encoding.UTF8); 601 | } 602 | 603 | //删除配置节 604 | public static void DeleteSection(string filePath, string section) 605 | { 606 | var sections = ParseConfigFile(filePath); 607 | section = section ?? ""; 608 | 609 | if (sections.Remove(section)) 610 | { 611 | SaveSectionsToFile(filePath, sections); 612 | } 613 | } 614 | 615 | //写PATH系统环境变量 616 | public static void AddPath(string directoryPath, bool systemLevel = true) 617 | { 618 | if (string.IsNullOrWhiteSpace(directoryPath)) 619 | throw new ArgumentException("目录路径不能为空"); 620 | 621 | RegistryKey registryKey = systemLevel ? 622 | Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Session Manager\Environment", true) : 623 | Registry.CurrentUser.OpenSubKey(@"Environment", true); 624 | 625 | if (registryKey == null) 626 | throw new NullReferenceException("注册表项未找到"); 627 | 628 | try 629 | { 630 | string currentPath = registryKey.GetValue("PATH", "", RegistryValueOptions.DoNotExpandEnvironmentNames).ToString(); 631 | string[] paths = currentPath.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries); 632 | 633 | // 检查是否已存在(不区分大小写) 634 | if (paths.Any(p => p.Trim().Equals(directoryPath.Trim(), StringComparison.OrdinalIgnoreCase))) 635 | return; 636 | 637 | // 追加新路径 638 | string newPath = currentPath.TrimEnd(';') + ";" + directoryPath.Trim(); 639 | 640 | // 更新注册表 641 | registryKey.SetValue("PATH", newPath, RegistryValueKind.ExpandString); 642 | 643 | // 广播环境变量变更通知 644 | SendMessageTimeout( 645 | new IntPtr(0xFFFF), // HWND_BROADCAST 646 | WM_SETTINGCHANGE, 647 | UIntPtr.Zero, 648 | "Environment", 649 | SMTO_ABORTIFHUNG, 650 | 5000, 651 | out UIntPtr _); 652 | } 653 | finally 654 | { 655 | registryKey.Close(); 656 | } 657 | } 658 | 659 | //创建快捷方式 660 | public static bool CreateShortcut(string targetPath, string shortcutPath) 661 | { 662 | if (!File.Exists(targetPath)) return false; 663 | 664 | try 665 | { 666 | Directory.CreateDirectory(Path.GetDirectoryName(shortcutPath)); 667 | 668 | var shellLink = (IShellLinkW)new ShellLink(); 669 | shellLink.SetPath(targetPath); 670 | shellLink.SetWorkingDirectory(Path.GetDirectoryName(targetPath)); 671 | shellLink.SetIconLocation(targetPath, 0); // 使用目标文件自身图标 672 | 673 | var persistFile = (IPersistFile)shellLink; 674 | persistFile.Save(shortcutPath, false); 675 | return true; 676 | } 677 | catch 678 | { 679 | return false; 680 | } 681 | } 682 | 683 | //程序自启动 684 | public static bool SetAutoStart(bool enable, string exePath = null, RegistryKey registryRoot = null, string keyName = null) 685 | { 686 | try 687 | { 688 | // 设置默认值 689 | exePath = exePath ?? Application.ExecutablePath; 690 | registryRoot = registryRoot ?? Registry.CurrentUser; 691 | keyName = keyName ?? Application.ProductName; 692 | 693 | // 获取注册表Run子项 694 | using (var runKey = registryRoot.OpenSubKey( 695 | @"Software\Microsoft\Windows\CurrentVersion\Run", 696 | true)) // 需要写权限 697 | { 698 | if (runKey == null) 699 | { 700 | throw new Exception("无法打开注册表Run项"); 701 | } 702 | 703 | if (enable) 704 | { 705 | // 设置自启动 706 | runKey.SetValue(keyName, exePath); 707 | } 708 | else 709 | { 710 | // 移除自启动 711 | runKey.DeleteValue(keyName, throwOnMissingValue: false); 712 | } 713 | } 714 | return true; 715 | } 716 | catch (SecurityException ex) 717 | { 718 | MessageBox.Show($"需要管理员权限才能修改系统级自启动设置\n{ex.Message}"); 719 | return false; 720 | } 721 | catch (UnauthorizedAccessException ex) 722 | { 723 | MessageBox.Show($"访问被拒绝,请以管理员身份运行\n{ex.Message}"); 724 | return false; 725 | } 726 | catch (Exception ex) 727 | { 728 | MessageBox.Show($"操作失败: {ex.Message}"); 729 | return false; 730 | } 731 | } 732 | 733 | /// 734 | /// 检查当前自启动状态 735 | /// 736 | public static bool IsAutoStartEnabled(RegistryKey registryRoot = null, 737 | string keyName = null) 738 | { 739 | try 740 | { 741 | registryRoot = registryRoot ?? Registry.CurrentUser; 742 | keyName = keyName ?? Application.ProductName; 743 | 744 | using (var runKey = registryRoot.OpenSubKey( 745 | @"Software\Microsoft\Windows\CurrentVersion\Run")) 746 | { 747 | var value = runKey?.GetValue(keyName); 748 | return value != null && value.ToString().Equals( 749 | Application.ExecutablePath, 750 | StringComparison.OrdinalIgnoreCase); 751 | } 752 | } 753 | catch 754 | { 755 | return false; 756 | } 757 | } 758 | #endregion 759 | 760 | //事件======================================================================================== 761 | public SetName_Window() 762 | { 763 | InitializeComponent(); 764 | } 765 | 766 | private void textBox_Name_TextChanged(object sender, EventArgs e) 767 | { 768 | if (textBox_Name.Text.Length > 0 && textBox_Name.Text != $"{Main_Window.SGamesPath}") 769 | { 770 | button_Done.Enabled = true; 771 | } 772 | else 773 | { 774 | button_Done.Enabled = false; 775 | } 776 | } 777 | 778 | private void button_Done_Click(object sender, EventArgs e) 779 | { 780 | try 781 | { 782 | Directory.Move($"{Main_Window.RunPath}\\games\\{Main_Window.SGamesPath}", $"{Main_Window.RunPath}\\games\\{textBox_Name.Text}"); 783 | 784 | 785 | WriteConfig(Main_Window.ConfigPath, textBox_Name.Text, "ExecuteName", ReadConfig(Main_Window.ConfigPath, Main_Window.SGamesPath, "ExecuteName")); 786 | WriteConfig(Main_Window.ConfigPath, textBox_Name.Text, "PlayTime", ReadConfig(Main_Window.ConfigPath, Main_Window.SGamesPath, "PlayTime")); 787 | if (ReadConfig(Main_Window.ConfigPath, Main_Window.SGamesPath, "FirstLaunch") != null) 788 | { 789 | WriteConfig(Main_Window.ConfigPath, textBox_Name.Text, "FirstLaunch", ReadConfig(Main_Window.ConfigPath, Main_Window.SGamesPath, "FirstLaunch")); 790 | } 791 | 792 | 793 | DeleteSection(Main_Window.ConfigPath, Main_Window.SGamesPath); 794 | 795 | Main_Window.SGamesPath = textBox_Name.Text; 796 | 797 | SetGame_Window.DialogState = true; 798 | 799 | this.Close(); 800 | } 801 | catch (Exception ex) 802 | { 803 | AntdUI.Notification.open(new AntdUI.Notification.Config(this, "", "", AntdUI.TType.None, AntdUI.TAlignFrom.TR) 804 | { 805 | Title = "发生错误!", 806 | Text = $"在更改名称时发生错误!\n错误原因:{ex.Message}", 807 | Icon = AntdUI.TType.Error 808 | }); 809 | 810 | } 811 | 812 | } 813 | 814 | private void SetName_Window_Load(object sender, EventArgs e) 815 | { 816 | textBox_Name.Text = Main_Window.SGamesPath; 817 | } 818 | 819 | private void button_Cancel_Click(object sender, EventArgs e) 820 | { 821 | this.Close(); 822 | } 823 | } 824 | } 825 | --------------------------------------------------------------------------------