├── .editorconfig ├── .gitattributes ├── .gitignore ├── LICENSE ├── WeChatMo.sln ├── readme.md └── src ├── Forms ├── AboutForm.Designer.cs ├── AboutForm.cs ├── AboutForm.resx ├── MainForm.Designer.cs ├── MainForm.cs └── MainForm.resx ├── Program.cs ├── Resources ├── ICON │ ├── 0.75x │ │ └── LOGOldpi.png │ ├── 1.5x │ │ └── LOGOhdpi.png │ ├── 1x │ │ └── LOGOmdpi.png │ ├── 2x │ │ └── LOGOxhdpi.png │ ├── 3x │ │ └── LOGOxxhdpi.png │ ├── 4x │ │ ├── LOGO@4x.png │ │ └── LOGOxxxhdpi.png │ └── SVG │ │ └── LOGO.svg ├── LOGO.png └── Logo.ico ├── Utilities ├── Logger.cs ├── Parse.cs ├── Patch.cs ├── UpRelease.cs └── WeChat.cs └── WeChatMo.csproj /.editorconfig: -------------------------------------------------------------------------------- 1 | [*.cs] 2 | 3 | # CS1591: 缺少对公共可见类型或成员的 XML 注释 4 | dotnet_diagnostic.CS1591.severity = silent 5 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.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/main/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 | [Bb]uild/ 21 | [Dd]ebug/ 22 | [Dd]ebugPublic/ 23 | [Rr]elease/ 24 | [Rr]eleases/ 25 | x64/ 26 | x86/ 27 | [Ww][Ii][Nn]32/ 28 | [Aa][Rr][Mm]/ 29 | [Aa][Rr][Mm]64/ 30 | bld/ 31 | [Bb]in/ 32 | [Oo]bj/ 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 | *.tlog 95 | *.vspscc 96 | *.vssscc 97 | .builds 98 | *.pidb 99 | *.svclog 100 | *.scc 101 | 102 | # Chutzpah Test files 103 | _Chutzpah* 104 | 105 | # Visual C++ cache files 106 | ipch/ 107 | *.aps 108 | *.ncb 109 | *.opendb 110 | *.opensdf 111 | *.sdf 112 | *.cachefile 113 | *.VC.db 114 | *.VC.VC.opendb 115 | 116 | # Visual Studio profiler 117 | *.psess 118 | *.vsp 119 | *.vspx 120 | *.sap 121 | 122 | # Visual Studio Trace Files 123 | *.e2e 124 | 125 | # TFS 2012 Local Workspace 126 | $tf/ 127 | 128 | # Guidance Automation Toolkit 129 | *.gpState 130 | 131 | # ReSharper is a .NET coding add-in 132 | _ReSharper*/ 133 | *.[Rr]e[Ss]harper 134 | *.DotSettings.user 135 | 136 | # TeamCity is a build add-in 137 | _TeamCity* 138 | 139 | # DotCover is a Code Coverage Tool 140 | *.dotCover 141 | 142 | # AxoCover is a Code Coverage Tool 143 | .axoCover/* 144 | !.axoCover/settings.json 145 | 146 | # Coverlet is a free, cross platform Code Coverage Tool 147 | coverage*.json 148 | coverage*.xml 149 | coverage*.info 150 | 151 | # Visual Studio code coverage results 152 | *.coverage 153 | *.coveragexml 154 | 155 | # NCrunch 156 | _NCrunch_* 157 | .*crunch*.local.xml 158 | nCrunchTemp_* 159 | 160 | # MightyMoose 161 | *.mm.* 162 | AutoTest.Net/ 163 | 164 | # Web workbench (sass) 165 | .sass-cache/ 166 | 167 | # Installshield output folder 168 | [Ee]xpress/ 169 | 170 | # DocProject is a documentation generator add-in 171 | DocProject/buildhelp/ 172 | DocProject/Help/*.HxT 173 | DocProject/Help/*.HxC 174 | DocProject/Help/*.hhc 175 | DocProject/Help/*.hhk 176 | DocProject/Help/*.hhp 177 | DocProject/Help/Html2 178 | DocProject/Help/html 179 | 180 | # Click-Once directory 181 | publish/ 182 | 183 | # Publish Web Output 184 | *.[Pp]ublish.xml 185 | *.azurePubxml 186 | # Note: Comment the next line if you want to checkin your web deploy settings, 187 | # but database connection strings (with potential passwords) will be unencrypted 188 | *.pubxml 189 | *.publishproj 190 | 191 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 192 | # checkin your Azure Web App publish settings, but sensitive information contained 193 | # in these scripts will be unencrypted 194 | PublishScripts/ 195 | 196 | # NuGet Packages 197 | *.nupkg 198 | # NuGet Symbol Packages 199 | *.snupkg 200 | # The packages folder can be ignored because of Package Restore 201 | **/[Pp]ackages/* 202 | # except build/, which is used as an MSBuild target. 203 | !**/[Pp]ackages/build/ 204 | # Uncomment if necessary however generally it will be regenerated when needed 205 | #!**/[Pp]ackages/repositories.config 206 | # NuGet v3's project.json files produces more ignorable files 207 | *.nuget.props 208 | *.nuget.targets 209 | 210 | # Microsoft Azure Build Output 211 | csx/ 212 | *.build.csdef 213 | 214 | # Microsoft Azure Emulator 215 | ecf/ 216 | rcf/ 217 | 218 | # Windows Store app package directories and files 219 | AppPackages/ 220 | BundleArtifacts/ 221 | Package.StoreAssociation.xml 222 | _pkginfo.txt 223 | *.appx 224 | *.appxbundle 225 | *.appxupload 226 | 227 | # Visual Studio cache files 228 | # files ending in .cache can be ignored 229 | *.[Cc]ache 230 | # but keep track of directories ending in .cache 231 | !?*.[Cc]ache/ 232 | 233 | # Others 234 | ClientBin/ 235 | ~$* 236 | *~ 237 | *.dbmdl 238 | *.dbproj.schemaview 239 | *.jfm 240 | *.pfx 241 | *.publishsettings 242 | orleans.codegen.cs 243 | 244 | # Including strong name files can present a security risk 245 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 246 | #*.snk 247 | 248 | # Since there are multiple workflows, uncomment next line to ignore bower_components 249 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 250 | #bower_components/ 251 | 252 | # RIA/Silverlight projects 253 | Generated_Code/ 254 | 255 | # Backup & report files from converting an old project file 256 | # to a newer Visual Studio version. Backup files are not needed, 257 | # because we have git ;-) 258 | _UpgradeReport_Files/ 259 | Backup*/ 260 | UpgradeLog*.XML 261 | UpgradeLog*.htm 262 | ServiceFabricBackup/ 263 | *.rptproj.bak 264 | 265 | # SQL Server files 266 | *.mdf 267 | *.ldf 268 | *.ndf 269 | 270 | # Business Intelligence projects 271 | *.rdl.data 272 | *.bim.layout 273 | *.bim_*.settings 274 | *.rptproj.rsuser 275 | *- [Bb]ackup.rdl 276 | *- [Bb]ackup ([0-9]).rdl 277 | *- [Bb]ackup ([0-9][0-9]).rdl 278 | 279 | # Microsoft Fakes 280 | FakesAssemblies/ 281 | 282 | # GhostDoc plugin setting file 283 | *.GhostDoc.xml 284 | 285 | # Node.js Tools for Visual Studio 286 | .ntvs_analysis.dat 287 | node_modules/ 288 | 289 | # Visual Studio 6 build log 290 | *.plg 291 | 292 | # Visual Studio 6 workspace options file 293 | *.opt 294 | 295 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 296 | *.vbw 297 | 298 | # Visual Studio 6 auto-generated project file (contains which files were open etc.) 299 | *.vbp 300 | 301 | # Visual Studio 6 workspace and project file (working project files containing files to include in project) 302 | *.dsw 303 | *.dsp 304 | 305 | # Visual Studio 6 technical files 306 | *.ncb 307 | *.aps 308 | 309 | # Visual Studio LightSwitch build output 310 | **/*.HTMLClient/GeneratedArtifacts 311 | **/*.DesktopClient/GeneratedArtifacts 312 | **/*.DesktopClient/ModelManifest.xml 313 | **/*.Server/GeneratedArtifacts 314 | **/*.Server/ModelManifest.xml 315 | _Pvt_Extensions 316 | 317 | # Paket dependency manager 318 | .paket/paket.exe 319 | paket-files/ 320 | 321 | # FAKE - F# Make 322 | .fake/ 323 | 324 | # CodeRush personal settings 325 | .cr/personal 326 | 327 | # Python Tools for Visual Studio (PTVS) 328 | __pycache__/ 329 | *.pyc 330 | 331 | # Cake - Uncomment if you are using it 332 | # tools/** 333 | # !tools/packages.config 334 | 335 | # Tabs Studio 336 | *.tss 337 | 338 | # Telerik's JustMock configuration file 339 | *.jmconfig 340 | 341 | # BizTalk build output 342 | *.btp.cs 343 | *.btm.cs 344 | *.odx.cs 345 | *.xsd.cs 346 | 347 | # OpenCover UI analysis results 348 | OpenCover/ 349 | 350 | # Azure Stream Analytics local run output 351 | ASALocalRun/ 352 | 353 | # MSBuild Binary and Structured Log 354 | *.binlog 355 | 356 | # NVidia Nsight GPU debugger configuration file 357 | *.nvuser 358 | 359 | # MFractors (Xamarin productivity tool) working folder 360 | .mfractor/ 361 | 362 | # Local History for Visual Studio 363 | .localhistory/ 364 | 365 | # Visual Studio History (VSHistory) files 366 | .vshistory/ 367 | 368 | # BeatPulse healthcheck temp database 369 | healthchecksdb 370 | 371 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 372 | MigrationBackup/ 373 | 374 | # Ionide (cross platform F# VS Code tools) working folder 375 | .ionide/ 376 | 377 | # Fody - auto-generated XML schema 378 | FodyWeavers.xsd 379 | 380 | # VS Code files for those working on multiple tools 381 | .vscode/* 382 | !.vscode/settings.json 383 | !.vscode/tasks.json 384 | !.vscode/launch.json 385 | !.vscode/extensions.json 386 | *.code-workspace 387 | 388 | # Local History for Visual Studio Code 389 | .history/ 390 | 391 | # Windows Installer files from build outputs 392 | *.cab 393 | *.msi 394 | *.msix 395 | *.msm 396 | *.msp 397 | 398 | # JetBrains Rider 399 | *.sln.iml 400 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 redsonw 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /WeChatMo.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.6.33829.357 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WeChatMo", "src\WeChatMo.csproj", "{ECCCE4DC-745D-425D-914C-891E4C93A4CC}" 7 | EndProject 8 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{52EF5608-2B86-4F1E-B909-B3FCDB3DD36A}" 9 | ProjectSection(SolutionItems) = preProject 10 | .editorconfig = .editorconfig 11 | EndProjectSection 12 | EndProject 13 | Global 14 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 15 | Debug|Any CPU = Debug|Any CPU 16 | Release|Any CPU = Release|Any CPU 17 | EndGlobalSection 18 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 19 | {ECCCE4DC-745D-425D-914C-891E4C93A4CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 20 | {ECCCE4DC-745D-425D-914C-891E4C93A4CC}.Debug|Any CPU.Build.0 = Debug|Any CPU 21 | {ECCCE4DC-745D-425D-914C-891E4C93A4CC}.Release|Any CPU.ActiveCfg = Release|Any CPU 22 | {ECCCE4DC-745D-425D-914C-891E4C93A4CC}.Release|Any CPU.Build.0 = Release|Any CPU 23 | EndGlobalSection 24 | GlobalSection(SolutionProperties) = preSolution 25 | HideSolutionNode = FALSE 26 | EndGlobalSection 27 | GlobalSection(ExtensibilityGlobals) = postSolution 28 | SolutionGuid = {5C1982B7-5CE7-4F70-96C2-A4DD5B33E77C} 29 | EndGlobalSection 30 | EndGlobal 31 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | ## 项目停更 2 | 3 | 此项目将不再维护,全新版本请转移到:[https://github.com/redsonw/MultiWeixin](https://github.com/redsonw/MultiWeixin). 4 | 5 | ## 简介 6 | 7 |   WeChatMo是一个解除微信只能单开的限制的工具,你可能会疑问,为什么要写这么一个工具,有很多办法都可以实现微信多开,例如:选择微信图标后按住Ctrl键不松,快速双击图标或者按回车键,就可以实现多开;也可以使用脚本命令来实现微信多开,这里就不一一举例。 8 | 9 |   微信默认是不能多开的,当今基本上每个人都会有工作和私人两个微信,所以微信不能多开这个限制给我们带来了不小的麻烦,而以上的多开方法都会有一个缺陷:如果微信在运行的时候,如果想要多开必须要关闭微信才可以,而WeChatMo(以下简称MO)在运行一次之后,就可以自由的运行多开微信了。当然这样的工具也有很多,那为什么要自己造轮子呢?嗯,我是为了学习编程,我希望我在学习的同时,也能帮到其他人。 10 | 11 | ## 功能特点 12 | 13 | * 操作简单:Mo会自动检测当前微信版本是否支持解除限制,如果不支持请在微信官方下载最新版本,或者在工具界面上的链接来下载。 14 | * 一次解除:运行一次软件过后将永久有效,不需要重复运行。PS:如果微信更新后需要重新运行; 15 | * 自由安装:文件可以放在任何一个地方运行都可以使用。 16 | * 自动更新:在 v0.1.0.0 版本后,可在线更新特征码,无需要重复多次下载。 17 | 18 | ## 开发环境 19 | 20 | * 运行框架:.NET 7 Desktop Runtime 21 | * 操作系统:Windows 7 & Windows 10 & Windows 11 22 | * 系统类型:64位操作系统 23 | * 支持版本:PC微信电脑版 ≤ 3.5.8.9 24 | 25 | ## 发布地址 26 | 27 | 1. https://github.com/redsonw/WeChatMO/releases 28 | 2. https://www.redsonw.com/wechatmo.html 29 | 30 | ## 使用说明 31 | 32 |   由于是使用的.NET 7 框架开发,所以在运行此工具时,需要下载安装支持库Windows-Desktop-Runtime 7,下载地址:[ Runtime Desktop 7 ](https://www.redsonw.com/?golink=aHR0cHM6Ly9kb3dubG9hZC52aXN1YWxzdHVkaW8ubWljcm9zb2Z0LmNvbS9kb3dubG9hZC9wci9kZmZiMTkzOS1jZWYxLTRkYjMtYTU3OS01NDc1YTMwNjFjZGQvNTc4YjIwODczM2M5MTRjN2I3MzU3ZjZiYWE0ZWNmZDYvd2luZG93c2Rlc2t0b3AtcnVudGltZS03LjAuNS13aW4teDY0LmV4ZQ==),下载后直接双击:WeChatMultiOpen,找到界面的按钮:解除限制,点击即可完成。 33 | 34 | ![图片[1]-解除微信多开工具-枫落墨痕](https://www.redsonw.com/wp-content/uploads/2023/06/WeChatMultiOpen.png) 35 | 36 | ### 目前缺陷 37 | 38 | 已经解决了频繁更新主程序的问题,目前使用的是远程更新特征字进行自动更新。但是依赖网络。 39 | 40 | ### 未来计划 41 | 42 | - 免扫码登录 43 | 44 | 其实一直在计划着更新免扫码登录程序,之前有做过一个版本,但是由于电脑硬盘崩坏,丢失了我的所有数据,也包括了姐姐们,咳~ 所以现在免扫码是有计划做,但是由于工作原因进度会很缓慢,请见谅。 45 | 46 | ## 文件校验 47 | 48 | 名称: WeChatMo.exe 49 | 大小: 2150665 字节 (2100 KiB) 50 | CRC32: 25472481 51 | CRC64: 1E5C07883BBE20A8 52 | SHA256: 507520bd1c2d400f9ac0381ff57bf1f9a4e56852b5ec68a1aee8fd8f1c95099b 53 | SHA1: 86c5b7672a51dc0881c16b5f484f2cc7a8068f05 54 | BLAKE2sp: 204b33f442614f99d843495d8f14cda6249c0da5a4017949d2415fdb507112df 55 | 56 | ## 更新日志 57 | 58 | ### 2023-10-31 v0.1.0.0 59 | 60 | - 特征库升级至 v3.9.8.9; 61 | 62 | ### 2023-09-20 v0.1.0.0 63 | 64 | - 程序版本跨度升级 v0.1.0.0 (意味着有功能更新); 65 | - 支持微信最新版本 3.9.7.25; 66 | - 新增自动更新主程序; 67 | - 新增在线更新特征值(在不更新主程序的情况下也能实现解除多开限制); 68 | 69 | ### 2023-09-08 v0.0.2.4 70 | 71 | - 更新版本号 0.0.2.4 72 | - 支持微信最新版本 3.9.7.15。 73 | 74 | ### 2023-08-23 v0.0.2.3 75 | 76 | - 更新版本号 0.0.2.3 77 | - 支持微信最新版本 3.9.6.47。 78 | 79 | ### 2023-08-11 v0.0.2.2 80 | 81 | - 日志构造函数使用C# 12 规则; 82 | - 更新版本号 0.0.2.2 83 | - 支持微信最新版本 3.9.6.43。 84 | 85 | ### 2023-07-23 v0.0.2.1 86 | 87 | - 修正版本号错误导致无法登录; 88 | - 版本号更新; 89 | - 提高代码可读性; 90 | 91 | ### 2023-07-22 v0.0.1.116 92 | 93 | - 支持PC微信电脑版 3.9.6.33 正式版。 94 | 95 | ### 2023-07-19 v0.0.1.115 96 | 97 | - 修复无法使用的Bug。 98 | 99 | ### 2023-07-19 v0.0.1.114 100 | 101 | - 支持PC微信电脑版 3.9.6.29 测试版。 102 | 103 | ### 2023-07-15 v0.0.1.113 104 | 105 | - 支持PC微信电脑版 3.9.6.22 测试版。 106 | 107 | ### 2023-06-09 v0.0.1.112 108 | 109 | 1. 支持PC微信电脑版 3.9.5.91; 110 | 2. 删除自建版本号脚本。 111 | 112 | ### 2023-06-09 v0.0.0.111 113 | 114 | 1. 支持PC微信电脑版 3.9.5.81 115 | 2. 自动检查微信是否安装; 116 | 3. 自动识别系统已安装微信版本; 117 | 118 | > 微信多开解除工具长期更新,如果遇到BUG请联系我或加QQ群:855181110 119 | 120 | ## 下载地址 121 | | 网盘 | 链接地址 | 提取码 | 122 | | :--: | --- | --- | 123 | |123云盘|https://www.123pan.com/s/82ytVv-Vs6Bv.html|FLMH| 124 | |百度网盘|https://pan.baidu.com/s/1b3LTfICH3kXnNuEwBrN8Tg|FLMH| 125 | |蓝奏云|https://flmh.lanzouk.com/b0131ppde|ad7b| 126 | |夸克网盘|https://pan.quark.cn/s/2c9489bc5369|无| 127 | |阿里云盘|https://www.aliyundrive.com/s/odAZDmCPghP|6p7n| 128 | |天翼云盘|https://cloud.189.cn/t/7zuamyiaUBbi|4xcr| 129 | |Github|https://github.com/redsonw/WeChatMO| 130 | 131 | ## 免责申明 132 | 133 |   本工具仅作为学习使用,作者不对其适用性和可靠性做任何保证,也不承担任何与使用或误用本工具相关的责任。 134 | -------------------------------------------------------------------------------- /src/Forms/AboutForm.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace WeChatMultiOpen 2 | { 3 | partial class AboutForm 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(AboutForm)); 32 | pictureBox1 = new PictureBox(); 33 | textBox1 = new TextBox(); 34 | label1 = new Label(); 35 | ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); 36 | SuspendLayout(); 37 | // 38 | // pictureBox1 39 | // 40 | pictureBox1.Image = (Image)resources.GetObject("pictureBox1.Image"); 41 | pictureBox1.Location = new Point(18, 17); 42 | pictureBox1.Margin = new Padding(2); 43 | pictureBox1.Name = "pictureBox1"; 44 | pictureBox1.Size = new Size(48, 48); 45 | pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; 46 | pictureBox1.TabIndex = 0; 47 | pictureBox1.TabStop = false; 48 | // 49 | // textBox1 50 | // 51 | textBox1.BackColor = SystemColors.Control; 52 | textBox1.BorderStyle = BorderStyle.None; 53 | textBox1.ForeColor = SystemColors.WindowFrame; 54 | textBox1.Location = new Point(87, 12); 55 | textBox1.Multiline = true; 56 | textBox1.Name = "textBox1"; 57 | textBox1.Size = new Size(285, 72); 58 | textBox1.TabIndex = 1; 59 | textBox1.Text = " 本工具仅作为学习使用,作者不对其适用性和可靠性做任何保证,也不承担任何与使用或误用本工具相关的责任。如有侵权请联系我们。"; 60 | // 61 | // label1 62 | // 63 | label1.AutoSize = true; 64 | label1.Location = new Point(283, 87); 65 | label1.Name = "label1"; 66 | label1.Size = new Size(68, 17); 67 | label1.TabIndex = 2; 68 | label1.Text = "作者:弦月"; 69 | // 70 | // AboutForm 71 | // 72 | AutoScaleDimensions = new SizeF(7F, 17F); 73 | AutoScaleMode = AutoScaleMode.Font; 74 | ClientSize = new Size(374, 122); 75 | Controls.Add(label1); 76 | Controls.Add(textBox1); 77 | Controls.Add(pictureBox1); 78 | FormBorderStyle = FormBorderStyle.FixedDialog; 79 | Margin = new Padding(2); 80 | MaximizeBox = false; 81 | MinimizeBox = false; 82 | Name = "AboutForm"; 83 | StartPosition = FormStartPosition.CenterParent; 84 | Text = "关于"; 85 | ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); 86 | ResumeLayout(false); 87 | PerformLayout(); 88 | } 89 | 90 | #endregion 91 | 92 | private PictureBox pictureBox1; 93 | private TextBox textBox1; 94 | private Label label1; 95 | } 96 | } -------------------------------------------------------------------------------- /src/Forms/AboutForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | using System.Windows.Forms; 10 | 11 | namespace WeChatMultiOpen 12 | { 13 | public partial class AboutForm : Form 14 | { 15 | public AboutForm() 16 | { 17 | InitializeComponent(); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Forms/AboutForm.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 | 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 174 | 175 | 176 | -------------------------------------------------------------------------------- /src/Forms/MainForm.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace YueHuan 2 | { 3 | partial class MainForm 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(MainForm)); 32 | LoggerListBox = new ListBox(); 33 | label1 = new Label(); 34 | label2 = new Label(); 35 | label3 = new Label(); 36 | label5 = new Label(); 37 | PatchesButton = new Button(); 38 | VersionLabel = new Label(); 39 | DownloadLinkLabel = new LinkLabel(); 40 | PatchInfoLabel = new Label(); 41 | ReleaseLabel = new Label(); 42 | groupBox1 = new GroupBox(); 43 | groupBox1.SuspendLayout(); 44 | SuspendLayout(); 45 | // 46 | // LoggerListBox 47 | // 48 | LoggerListBox.Dock = DockStyle.Fill; 49 | LoggerListBox.FormattingEnabled = true; 50 | LoggerListBox.ItemHeight = 31; 51 | LoggerListBox.Location = new Point(6, 36); 52 | LoggerListBox.Margin = new Padding(6, 5, 6, 5); 53 | LoggerListBox.Name = "LoggerListBox"; 54 | LoggerListBox.Size = new Size(874, 267); 55 | LoggerListBox.TabIndex = 0; 56 | // 57 | // label1 58 | // 59 | label1.AutoSize = true; 60 | label1.Location = new Point(24, 22); 61 | label1.Margin = new Padding(6, 0, 6, 0); 62 | label1.Name = "label1"; 63 | label1.Size = new Size(140, 31); 64 | label1.TabIndex = 1; 65 | label1.Text = "[ 最新版本 ]"; 66 | // 67 | // label2 68 | // 69 | label2.AutoSize = true; 70 | label2.Location = new Point(24, 75); 71 | label2.Margin = new Padding(6, 0, 6, 0); 72 | label2.Name = "label2"; 73 | label2.Size = new Size(140, 31); 74 | label2.TabIndex = 2; 75 | label2.Text = "[ 下载微信 ]"; 76 | // 77 | // label3 78 | // 79 | label3.AutoSize = true; 80 | label3.Location = new Point(24, 128); 81 | label3.Margin = new Padding(6, 0, 6, 0); 82 | label3.Name = "label3"; 83 | label3.Size = new Size(140, 31); 84 | label3.TabIndex = 3; 85 | label3.Text = "[ 补丁信息 ]"; 86 | // 87 | // label5 88 | // 89 | label5.AutoSize = true; 90 | label5.Location = new Point(24, 181); 91 | label5.Margin = new Padding(6, 0, 6, 0); 92 | label5.Name = "label5"; 93 | label5.Size = new Size(140, 31); 94 | label5.TabIndex = 5; 95 | label5.Text = "[ 发布时间 ]"; 96 | // 97 | // PatchesButton 98 | // 99 | PatchesButton.Location = new Point(728, 117); 100 | PatchesButton.Margin = new Padding(0); 101 | PatchesButton.Name = "PatchesButton"; 102 | PatchesButton.Size = new Size(180, 100); 103 | PatchesButton.TabIndex = 11; 104 | PatchesButton.Text = "解除限制"; 105 | PatchesButton.UseVisualStyleBackColor = true; 106 | PatchesButton.Click += PatchesButton_Click; 107 | // 108 | // VersionLabel 109 | // 110 | VersionLabel.BorderStyle = BorderStyle.Fixed3D; 111 | VersionLabel.Location = new Point(180, 16); 112 | VersionLabel.Margin = new Padding(6, 0, 6, 0); 113 | VersionLabel.Name = "VersionLabel"; 114 | VersionLabel.Size = new Size(730, 42); 115 | VersionLabel.TabIndex = 12; 116 | VersionLabel.TextAlign = ContentAlignment.MiddleLeft; 117 | // 118 | // DownloadLinkLabel 119 | // 120 | DownloadLinkLabel.BorderStyle = BorderStyle.Fixed3D; 121 | DownloadLinkLabel.Location = new Point(180, 69); 122 | DownloadLinkLabel.Margin = new Padding(6, 0, 6, 0); 123 | DownloadLinkLabel.Name = "DownloadLinkLabel"; 124 | DownloadLinkLabel.Size = new Size(730, 42); 125 | DownloadLinkLabel.TabIndex = 13; 126 | DownloadLinkLabel.TextAlign = ContentAlignment.MiddleLeft; 127 | DownloadLinkLabel.LinkClicked += DownloadLinkLabel_LinkClicked; 128 | // 129 | // PatchInfoLabel 130 | // 131 | PatchInfoLabel.BorderStyle = BorderStyle.Fixed3D; 132 | PatchInfoLabel.Location = new Point(180, 122); 133 | PatchInfoLabel.Margin = new Padding(6, 0, 6, 0); 134 | PatchInfoLabel.Name = "PatchInfoLabel"; 135 | PatchInfoLabel.Size = new Size(538, 42); 136 | PatchInfoLabel.TabIndex = 14; 137 | PatchInfoLabel.TextAlign = ContentAlignment.MiddleLeft; 138 | // 139 | // ReleaseLabel 140 | // 141 | ReleaseLabel.BorderStyle = BorderStyle.Fixed3D; 142 | ReleaseLabel.Location = new Point(180, 175); 143 | ReleaseLabel.Margin = new Padding(6, 0, 6, 0); 144 | ReleaseLabel.Name = "ReleaseLabel"; 145 | ReleaseLabel.Size = new Size(538, 42); 146 | ReleaseLabel.TabIndex = 16; 147 | ReleaseLabel.TextAlign = ContentAlignment.MiddleLeft; 148 | // 149 | // groupBox1 150 | // 151 | groupBox1.Controls.Add(LoggerListBox); 152 | groupBox1.Location = new Point(24, 224); 153 | groupBox1.Margin = new Padding(6, 5, 6, 5); 154 | groupBox1.Name = "groupBox1"; 155 | groupBox1.Padding = new Padding(6, 5, 6, 5); 156 | groupBox1.Size = new Size(886, 308); 157 | groupBox1.TabIndex = 17; 158 | groupBox1.TabStop = false; 159 | groupBox1.Text = "日志信息"; 160 | // 161 | // MainForm 162 | // 163 | AutoScaleDimensions = new SizeF(14F, 31F); 164 | AutoScaleMode = AutoScaleMode.Font; 165 | ClientSize = new Size(936, 551); 166 | Controls.Add(groupBox1); 167 | Controls.Add(ReleaseLabel); 168 | Controls.Add(PatchInfoLabel); 169 | Controls.Add(DownloadLinkLabel); 170 | Controls.Add(VersionLabel); 171 | Controls.Add(PatchesButton); 172 | Controls.Add(label5); 173 | Controls.Add(label3); 174 | Controls.Add(label2); 175 | Controls.Add(label1); 176 | FormBorderStyle = FormBorderStyle.FixedSingle; 177 | Icon = (Icon)resources.GetObject("$this.Icon"); 178 | Margin = new Padding(6, 5, 6, 5); 179 | MaximizeBox = false; 180 | MinimizeBox = false; 181 | Name = "MainForm"; 182 | Opacity = 0.98D; 183 | StartPosition = FormStartPosition.CenterScreen; 184 | Text = "解除微信多开限制"; 185 | Load += MainForm_Load; 186 | groupBox1.ResumeLayout(false); 187 | ResumeLayout(false); 188 | PerformLayout(); 189 | } 190 | 191 | #endregion 192 | 193 | private ListBox LoggerListBox; 194 | private Label label1; 195 | private Label label2; 196 | private Label label3; 197 | private Label label4; 198 | private Label label5; 199 | private TextBox TextBox; 200 | private TextBox DownloadTextBox; 201 | private TextBox PatchInfoTextBox; 202 | private TextBox AuthorTextBox; 203 | private TextBox ReleaseTextBox; 204 | private Button PatchesButton; 205 | private Label VersionLabel; 206 | private LinkLabel DownloadLinkLabel; 207 | private Label PatchInfoLabel; 208 | private Label ReleaseLabel; 209 | private GroupBox groupBox1; 210 | } 211 | } -------------------------------------------------------------------------------- /src/Forms/MainForm.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redsonw/WeChatMO/97c49a977c68e8ed38aeae0b1c7c5a9b304888a3/src/Forms/MainForm.cs -------------------------------------------------------------------------------- /src/Forms/MainForm.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 | 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 245 | 246 | 247 | -------------------------------------------------------------------------------- /src/Program.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redsonw/WeChatMO/97c49a977c68e8ed38aeae0b1c7c5a9b304888a3/src/Program.cs -------------------------------------------------------------------------------- /src/Resources/ICON/0.75x/LOGOldpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redsonw/WeChatMO/97c49a977c68e8ed38aeae0b1c7c5a9b304888a3/src/Resources/ICON/0.75x/LOGOldpi.png -------------------------------------------------------------------------------- /src/Resources/ICON/1.5x/LOGOhdpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redsonw/WeChatMO/97c49a977c68e8ed38aeae0b1c7c5a9b304888a3/src/Resources/ICON/1.5x/LOGOhdpi.png -------------------------------------------------------------------------------- /src/Resources/ICON/1x/LOGOmdpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redsonw/WeChatMO/97c49a977c68e8ed38aeae0b1c7c5a9b304888a3/src/Resources/ICON/1x/LOGOmdpi.png -------------------------------------------------------------------------------- /src/Resources/ICON/2x/LOGOxhdpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redsonw/WeChatMO/97c49a977c68e8ed38aeae0b1c7c5a9b304888a3/src/Resources/ICON/2x/LOGOxhdpi.png -------------------------------------------------------------------------------- /src/Resources/ICON/3x/LOGOxxhdpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redsonw/WeChatMO/97c49a977c68e8ed38aeae0b1c7c5a9b304888a3/src/Resources/ICON/3x/LOGOxxhdpi.png -------------------------------------------------------------------------------- /src/Resources/ICON/4x/LOGO@4x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redsonw/WeChatMO/97c49a977c68e8ed38aeae0b1c7c5a9b304888a3/src/Resources/ICON/4x/LOGO@4x.png -------------------------------------------------------------------------------- /src/Resources/ICON/4x/LOGOxxxhdpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redsonw/WeChatMO/97c49a977c68e8ed38aeae0b1c7c5a9b304888a3/src/Resources/ICON/4x/LOGOxxxhdpi.png -------------------------------------------------------------------------------- /src/Resources/ICON/SVG/LOGO.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /src/Resources/LOGO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redsonw/WeChatMO/97c49a977c68e8ed38aeae0b1c7c5a9b304888a3/src/Resources/LOGO.png -------------------------------------------------------------------------------- /src/Resources/Logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redsonw/WeChatMO/97c49a977c68e8ed38aeae0b1c7c5a9b304888a3/src/Resources/Logo.ico -------------------------------------------------------------------------------- /src/Utilities/Logger.cs: -------------------------------------------------------------------------------- 1 | namespace YueHuan 2 | { 3 | public class LogMessage(ListBox loggerListBox) 4 | { 5 | private readonly ListBox loggerListBox = loggerListBox; 6 | 7 | public void Add(string message) 8 | { 9 | loggerListBox.Items.Add(message); 10 | loggerListBox.SelectedIndex = loggerListBox.Items.Count - 1; 11 | loggerListBox.ClearSelected(); 12 | loggerListBox.TopIndex = loggerListBox.Items.Count - 1; 13 | } 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/Utilities/Parse.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json; 2 | 3 | namespace YueHuan 4 | { 5 | public class WeChatUpdate 6 | { 7 | [JsonProperty(nameof(WeChat))] 8 | public required WeChatInfo WeChat { get; set; } 9 | public string[] WechatVer = Array.Empty(); 10 | 11 | /// 12 | /// 特征码信息结构 13 | /// 14 | public class WeChatInfo 15 | { 16 | public Dictionary? Version { get; set; } 17 | 18 | public class VersionInfo 19 | { 20 | [JsonProperty("offset")] 21 | public long Offset { get; set; } 22 | 23 | [JsonProperty("oldValue")] 24 | public byte OldValue { get; set; } 25 | 26 | [JsonProperty("newValue")] 27 | public byte NewValue { get; set; } 28 | } 29 | } 30 | 31 | /// 32 | /// 解析在线JSON文件 33 | /// 34 | /// 35 | /// 36 | public static async Task ParseAsync(string url) 37 | { 38 | using var http = new HttpClient(); 39 | var json = await http.GetStringAsync(url); 40 | return JsonConvert.DeserializeObject(json)!; // 反序列JSON 41 | } 42 | 43 | /// 44 | /// 获取所有支持的版本列表 45 | /// 46 | /// 47 | public string[] UpdateWeChatVersions() 48 | { 49 | if (WeChat != null && WeChat.Version != null) 50 | { 51 | return WeChat.Version.Keys.ToArray(); 52 | } 53 | 54 | return Array.Empty(); 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/Utilities/Patch.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | 3 | namespace YueHuan 4 | { 5 | public class LimitRemover(WeChatWin weChatWin, ListBox lstBox) 6 | { 7 | private readonly WeChatWin weChatWin = weChatWin; 8 | private readonly LogMessage logger = new(lstBox); 9 | private readonly string fileName = "WeChatWin.dll"; 10 | 11 | public async void RemoveLimit() 12 | { 13 | string filePath = Path.Combine(weChatWin.WeChatPath, $"[{weChatWin.WeChatVersion}]", fileName); 14 | string? version = FileVersionInfo.GetVersionInfo(filePath).FileVersion; 15 | 16 | if (version == null) 17 | { 18 | logger.Add($"获取版本失败,请查看是微信是否安装!!"); 19 | return; 20 | } 21 | 22 | if (!weChatWin.CheckVersion()) 23 | { 24 | logger.Add($"当前版本:[{version}] 不支持解除限制,请先安装微信 [{weChatWin.WechatVer[0]}] 或以上版本"); 25 | return; 26 | } 27 | 28 | bool backupSuccess = Backup(filePath); 29 | 30 | if (!backupSuccess) 31 | { 32 | // loggerListBox("备份文件失败,无法继续。"); 33 | } 34 | 35 | bool closeSuccess = CloseWeChat(); 36 | 37 | if (!closeSuccess) 38 | { 39 | logger.Add("关闭微信进程失败,重启计算机后重试。"); 40 | return; 41 | } 42 | 43 | (long offset, byte oldValue, byte newValue) values = await GetVersionValues(version); 44 | 45 | if (values == default) 46 | { 47 | logger.Add($"当前版本:[{version}] 不支持解除限制,请先安装微信 [{weChatWin.WechatVer[0]}] 或以上版本"); 48 | return; 49 | } 50 | 51 | logger.Add($"初始化[ {version} ]十六进制偏移量完成..."); 52 | 53 | try 54 | { 55 | logger.Add("开始载入文件"); 56 | using FileStream fs = new(filePath, FileMode.Open, FileAccess.ReadWrite); 57 | fs.Seek(values.offset, SeekOrigin.Begin); // 设定文件开始位置 58 | logger.Add($"载入成功:{filePath}"); 59 | 60 | byte currentValue = (byte)fs.ReadByte(); // 读取指定位置的字节数据 61 | logger.Add("读取原始数据..."); 62 | 63 | if (currentValue == values.oldValue) 64 | { 65 | // 将文件流的位置重新设置为指定的偏移量 66 | fs.Seek(values.offset, SeekOrigin.Begin); 67 | logger.Add($"返回文件起点准备开始替换数据..."); 68 | 69 | // 写入新的字节数据 70 | fs.WriteByte(values.newValue); 71 | logger.Add($"修改{fileName} 完成"); 72 | 73 | // 刷新文件流,确保数据写入文件 74 | fs.Flush(); 75 | logger.Add("解除双开限制补丁完成"); 76 | } 77 | else 78 | { 79 | logger.Add("未找到指定位置的字节数据或数据已被修改!"); 80 | } 81 | } 82 | catch (Exception ex) 83 | { 84 | logger.Add("文件修改出现错误:" + ex.Message); 85 | } 86 | } 87 | 88 | private bool Backup(string filePath) 89 | { 90 | string backFile = Path.ChangeExtension(filePath, "bak"); 91 | 92 | if (File.Exists(backFile)) 93 | { 94 | DialogResult result = MessageBox.Show("备份文件已经存在,是否继续备份,选择“是”则继续备份,选择“否”则跳过备份。\r\n请注意:跳过备份会造成不可预知的后果!!", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); 95 | if (result == DialogResult.Yes) 96 | { 97 | if (!weChatWin.Backup()) 98 | { 99 | return true; 100 | } 101 | else 102 | { 103 | return false; 104 | } 105 | } 106 | else 107 | { 108 | logger.Add("跳过备份,如微信无法启动时,请重新安装微信即可修复!"); 109 | return true; 110 | } 111 | } 112 | else 113 | { 114 | logger.Add($"备份已存在:{backFile}"); 115 | return true; 116 | } 117 | } 118 | 119 | private bool CloseWeChat() 120 | { 121 | string chatName = "WeChat"; 122 | Process[] processes = Process.GetProcessesByName(chatName); 123 | if (processes.Length > 0) 124 | { 125 | DialogResult result = MessageBox.Show("微信已经运行,是否要继续解除限制,选择“是”关闭微信继续,选择“否”则放弃解除限制。", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); 126 | if (result == DialogResult.Yes) 127 | { 128 | foreach (Process process in processes) 129 | { 130 | try 131 | { 132 | process.Kill(); 133 | logger.Add("正在关闭微信,请稍候..."); 134 | Thread.Sleep(500); 135 | logger.Add("关闭微信成功..."); 136 | } 137 | catch (Exception ex) 138 | { 139 | logger.Add("关闭微信进程失败:" + ex.Message); 140 | return false; 141 | } 142 | } 143 | } 144 | else 145 | { 146 | logger.Add("放弃解除限制"); 147 | } 148 | } 149 | 150 | return true; 151 | } 152 | 153 | private static async Task<(long offset, byte oldValue, byte newValue)> GetVersionValues(string version) 154 | { 155 | string url = "https://www.redsonw.com/WeChat/Update.json"; 156 | WeChatUpdate chatUpdate = await WeChatUpdate.ParseAsync(url); 157 | if (chatUpdate != null) 158 | { 159 | WeChatUpdate.WeChatInfo.VersionInfo versions = chatUpdate.WeChat.Version[version]; 160 | long offset = versions.Offset; 161 | byte oldValue = versions.OldValue; 162 | byte newValue = versions.NewValue; 163 | return (offset, oldValue, newValue); 164 | } 165 | else 166 | { 167 | return (0, 0, 0); 168 | } 169 | } 170 | } 171 | } 172 | -------------------------------------------------------------------------------- /src/Utilities/UpRelease.cs: -------------------------------------------------------------------------------- 1 | using System.Net.Http.Headers; 2 | using Newtonsoft.Json; 3 | 4 | namespace YueHuan 5 | { 6 | public class GithubRelease 7 | { 8 | public string Name { get; set; } 9 | public string TagName { get; set; } 10 | public string Body { get; set; } 11 | public List Assets { get; set; } 12 | 13 | public class Asset 14 | { 15 | public string Url { get; set; } 16 | public string Name { get; set; } 17 | public string ContentType { get; set; } 18 | public long Size { get; set; } 19 | public int DownloadCount { get; set; } 20 | public string BrowserDownloadUrl { get; set; } 21 | } 22 | } 23 | 24 | public class GithubUpdate 25 | { 26 | private readonly HttpClient _httpClient; 27 | private readonly string _owner; 28 | private readonly string _repository; 29 | 30 | public GithubUpdate(string owner, string repository) 31 | { 32 | _owner = owner; 33 | _repository = repository; 34 | 35 | _httpClient = new HttpClient 36 | { 37 | BaseAddress = new Uri("https://api.github.com/") 38 | }; 39 | _httpClient.DefaultRequestHeaders.Accept.Clear(); 40 | _httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.github.v3+json")); 41 | _httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("AppName", "1.0")); 42 | } 43 | 44 | public async Task GetLatestRelease() 45 | { 46 | try 47 | { 48 | HttpResponseMessage response = await _httpClient.GetAsync($"repos/{_owner}/{_repository}/releases/latest"); 49 | response.EnsureSuccessStatusCode(); 50 | string content = await response.Content.ReadAsStringAsync(); 51 | dynamic releaseData = JsonConvert.DeserializeObject(content); 52 | 53 | GithubRelease release = new GithubRelease 54 | { 55 | Name = releaseData.name, 56 | TagName = releaseData.tag_name, 57 | Body = releaseData.body, 58 | Assets = new List() 59 | }; 60 | 61 | foreach (var assetData in releaseData.assets) 62 | { 63 | GithubRelease.Asset asset = new GithubRelease.Asset 64 | { 65 | Url = assetData.url, 66 | Name = assetData.name, 67 | ContentType = assetData.content_type, 68 | Size = assetData.size, 69 | DownloadCount = assetData.download_count, 70 | BrowserDownloadUrl = assetData.browser_download_url 71 | }; 72 | release.Assets.Add(asset); 73 | } 74 | 75 | return release; 76 | } 77 | catch (HttpRequestException ex) 78 | { 79 | // Handle the HTTP request exception here 80 | throw ex; // Re-throw or handle as appropriate 81 | } 82 | } 83 | 84 | public async Task> GetReleaseAssets() 85 | { 86 | GithubRelease release = await GetLatestRelease(); 87 | return release.Assets; 88 | } 89 | 90 | public async Task DownloadExe(string filePath, IProgress progress) 91 | { 92 | List assets = await GetReleaseAssets(); 93 | GithubRelease.Asset exeAsset = assets.Find(asset => asset.Name.EndsWith(".exe")); 94 | 95 | if (exeAsset != null) 96 | { 97 | string exeUrl = exeAsset.BrowserDownloadUrl; 98 | 99 | using HttpClient httpClient = new HttpClient(); 100 | HttpResponseMessage response = await httpClient.GetAsync(exeUrl, HttpCompletionOption.ResponseHeadersRead); 101 | response.EnsureSuccessStatusCode(); 102 | 103 | long? contentLength = response.Content.Headers.ContentLength; 104 | 105 | using Stream stream = await response.Content.ReadAsStreamAsync(); 106 | using FileStream fileStream = File.Create(filePath); 107 | 108 | const int bufferSize = 81920; 109 | byte[] buffer = new byte[bufferSize]; 110 | long totalBytesRead = 0; 111 | int bytesRead; 112 | 113 | while ((bytesRead = await stream.ReadAsync(buffer.AsMemory(0, bufferSize))) > 0) 114 | { 115 | await fileStream.WriteAsync(buffer.AsMemory(0, bytesRead)); 116 | totalBytesRead += bytesRead; 117 | 118 | if (contentLength.HasValue) 119 | { 120 | double percentComplete = ((double)totalBytesRead / contentLength.Value) * 100; 121 | progress.Report(percentComplete); 122 | } 123 | } 124 | 125 | return 100; // 下载完成 126 | } 127 | 128 | return 0; // 如果下载失败,可以返回适当的错误码 129 | } 130 | 131 | 132 | 133 | public async Task GetExeDownloadUrl() 134 | { 135 | List assets = await GetReleaseAssets(); 136 | GithubRelease.Asset exeAsset = assets.Find(asset => asset.Name.EndsWith(".exe")); 137 | return exeAsset?.BrowserDownloadUrl; 138 | } 139 | } 140 | } 141 | -------------------------------------------------------------------------------- /src/Utilities/WeChat.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using System.Diagnostics; 3 | 4 | namespace YueHuan 5 | { 6 | public class WeChatWin 7 | { 8 | // 全局变量:WeChatPath、WeChatVersion 9 | public string WeChatPath = string.Empty; 10 | public string WeChatVersion = string.Empty; 11 | public string WeChatTitle = string.Empty; 12 | public string UninstallString = string.Empty; 13 | public string[] WechatVer = Array.Empty(); 14 | 15 | public WeChatWin() 16 | { 17 | // 查找注册表中的主键 18 | using var key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\WeChat"); 19 | if (key != null) 20 | { 21 | // 读取键值:InstallLocation、DisplayVersion 22 | WeChatPath = (string)key.GetValue("InstallLocation")!; // 读取微信安装目录 23 | WeChatVersion = (string)key.GetValue("DisplayVersion")!; // 读取当前微信版本 24 | WeChatTitle = (string)key.GetValue("DisplayName")!; // 读取微信名称 25 | UninstallString = (string)key.GetValue("UninstallString")!; // 读取微信卸载文件路径 26 | } 27 | } 28 | 29 | public async Task InitializeAsync() 30 | { 31 | string url = "https://www.redsonw.com/WeChat/Update.json"; 32 | WeChatUpdate chatUpdate = await WeChatUpdate.ParseAsync(url); 33 | WechatVer = chatUpdate.WeChat.Version.Keys.ToArray(); 34 | } 35 | 36 | public bool CheckVersion() 37 | { 38 | string fileName = Path.Combine(WeChatPath, $"[{WeChatVersion}]", "WeChatWin.dll"); // 获取微信动态库 39 | 40 | FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(fileName); // 获取动态库的版本号 41 | 42 | string? version = fileVersionInfo.FileVersion; // 设置动态库版本号 43 | 44 | if (version != null) 45 | { 46 | foreach (string v in WechatVer) 47 | { 48 | if (version == v) 49 | { 50 | return true; 51 | } 52 | } 53 | } 54 | 55 | return false; 56 | } 57 | 58 | // 备份WeChatPath路径下的WeChatWin.dll文件 59 | public bool Backup() 60 | { 61 | try 62 | { 63 | string filePath = Path.Combine(WeChatPath, $"[{WeChatVersion}]", "WeChatWin.dll"); 64 | string backupPath = Path.ChangeExtension(filePath, "bak"); 65 | 66 | File.Copy(filePath, backupPath, true); 67 | return true; // 备份成功,返回 true 68 | } 69 | catch (Exception ex) 70 | { 71 | return false; // 备份失败,返回 false 72 | throw new Exception($"错误信息:{ex.Message}{ex}"); 73 | } 74 | } 75 | 76 | // 跳转到指定链接 77 | public static void OpenURL(string url) 78 | { 79 | // 使用默认浏览器打开链接 80 | Process.Start(new ProcessStartInfo 81 | { 82 | FileName = url, 83 | UseShellExecute = true 84 | }); 85 | } 86 | } 87 | 88 | } 89 | -------------------------------------------------------------------------------- /src/WeChatMo.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | WinExe 5 | net7.0-windows 6 | enable 7 | true 8 | enable 9 | x64 10 | Resources\Logo.ico 11 | 12 | False 13 | Build 14 | 15 | 0.1.0.0 16 | 17 | 0.1.0.0 18 | 19 | 0.1.0.0 20 | 21 | 弦月 22 | 23 | Redsonw.Com 24 | 25 | 解除微信多开工具 26 | 解除微信多开限制 27 | Copyright © 2023 28 | 解除微信多开限制 29 | LOGO.png 30 | True 31 | readme.md 32 | YueHuan 33 | 34 | 35 | preview 36 | 37 | 38 | preview 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | True 47 | \ 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | True 57 | \ 58 | 59 | 60 | 61 | 62 | 63 | --------------------------------------------------------------------------------