├── .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 | AAABAAEAAAAAAAEAIABvHAAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAAAFv
124 | ck5UAc+id5oAABwpSURBVHja7Z0JuFbj2sf3btdujiJKhobTXJqLTCl94vCJypA5DadkzOnC9yFjiINS
125 | HI5KSByKBixl1qfIcGggJLt5ktKg8T3/23e/rN7zvru9nrXW+67hf1/X77pcaO3dWs/9W896nvt5nrw8
126 | j6Kp9WY6yoAjQVdwHfg7mAk+B0vAUhJJFoIPwEQwDPQCTUHFdO2EEeJI80BLg8agvzaABeBnsAckSCzZ
127 | BoqABW4FJ4AqFEG0Ev8AcBZ4FiwDe9nwSQY2gXfAVaA2RRDuxBeTXwDeUtOzgZOSIi+Jr8FtoA5FEK7k
128 | LwVOBtPBr2zMxCXyqTgIHEgJBD/5a4DhYD0bLvGQXWAGOIa9geAmfwfwNhsr8ZEiHUQupASCk/z54Dzw
129 | AxsoyQLbwYOgKgWQ++SXqb3B4Cc2TJLlQUKZVarJnkBuk38I2MIGSXLEK+AwSiA33f6BTH4SACaBgyiA
130 | 7A749QQb2PhIQBgFylMC2RFAW/CdDw9RSoJ/Aat1QPFrEhm+Byu09HunD21nB7iWnwL+J//B4A0PH5wk
131 | /FwwElwOTtT1AnXB4aAWiQRS1tsQtAM9tMJP5vVXediW5MXRmQLw97t/mEe1/Ct1BeApoFqGFYMk2pQD
132 | LcDN4EuP2tV74BBKwB8BHKeWdfOAZNBwHGgDCrgENNbjSHaktzfUo1qSW9iWvH9gMsDyossHs0gXB5Vl
133 | 0jMyCEF6BJNdLhEv0uuwbXn4gGQ571YXD2WW/aHw4TCKEYEs+rnX5QrSR3VRGm+uBw+lAnjVxcOYobv/
134 | MPEZJZWA1Prf6EICMrjYmu3NmwfSWTdqMHkQsjjoKCY/w0ACZXTQeZdh27uPbc79w5CR/9GGD+Ab0JLJ
135 | z3AhgUrgGcP2t1AHF9n2XDyII7WQw2Svt4uZ/AwPJFAfzDdogzt10Jntz8VD6GVYufU8SzMZHorgMq32
136 | c9oOxyenmxlmN3+UwU3foLu7MvkZXgmgiu4cbDL1XItt0ezmywqrjwxu+kQdwOFNZ3gpgQsNeqNbtdqU
137 | bdHgxrc2qNWWTUDP5g1n+CCAmloy7PSFdD3bo9mN763bLzm52fPtu7QwGB5LYKSBAJ5iezS76cMMbvbT
138 | rMBi+CgAk0HpWcmjxxjObvo4AwFcR9syfBRAM7DGYZv8ClRnm3R+0y2DTRm6UwAMHyUgS33/ZbA4qA7b
139 | pPMbPsfgXLdjeKMZPgpAakveNdgopCnbpfMb/oXB/H8z3miGjwKQ6eWpBu2yHdslBcCIhgBecdgu5cyK
140 | 9myXFACDAmBQAAwKgEEBMCgABgXAoAAYFACDAmBQAAwKgEEBMCgA3nAKgEEBUAAUAIMCoAAoAAYFQAFQ
141 | AAwKgAKgABgUAAVAATAoAAqAAmBQABQABcCgACgA3mgGBUABMBgUAAXAYFAAFACDQQFQAAwGBUABMBgU
142 | AAXAYFAAFACDQQFQAAwGBUABMBgUAAUQ9rjaauoJjH0EUAAmOmyXq0ATtksKIJcJXwAqgxqgLmgAmivy
143 | z3VATVAJlKIMMgpAuNlhu5wLqlIAFEC2kl4SuDroAC4Dw8EL4AMwHxSBNWA9WKf/LP9uAXgfTATDwDmg
144 | IShPEewjgFZgpYN2eQuPrKcA/E78MqC+JvxY8AXYCPaAhCE7wXIwAwzR3kKZOMtAEzlfk3p3Cdrkh+Bw
145 | CoAC8Ottfwg4V9/aP4LdLhJ+f6wAE0BXUC6OIrD1AiqBB8DWYtrjbNDa9meY1BSAZ8kv3+xDwTyww8ek
146 | T8dmMAl0BPkxlkBZ0AtMA0VgI1gD5oHbwBFMfgrA68Q/HNwEFmY56dMhYwe363hDXCUglAf1QAfQHByU
147 | 8t+ZzBSA6+SvAC4GnwUg8e3sBRZoFXMJZIRBAbhN/qb6jb89YMlvZxHoxilDBgXgXeLLdF7PgHT3S8Jy
148 | /X0pAQYF4FIAMvd+I/g5JMlvlwB7AgwKwEXyVwEP6zx8IoTI50BLCoBBAThPfinXfdRlAU8QsOyzAwwG
149 | BbD/5C8E9xomv/yZrR4PFEoPZIuLnsid9joBBoMCKH7Q70qDBN6mRTmXgC7gNE28FS7n9x/StQCdQA/w
150 | jMHvthacQAEwKID9C+B4sNLgDS1FQWXTFAz1NBxAXKuJn3o9Kf0dofP+Tq73stYwUAIMCiBD8lfTb2an
151 | yTobVM2wRkASdprBNceklvfaqAeWOLyefJacRQEwKIDMAhhsuIjnsXSJZbvugwbjCJcWc83y+4qqyW9c
152 | YzXeD40mP2TlFba3JpS4eo4EHwrAm+SvpUt3Tb7VJ+lGH/skrO3ajxuU9fazXy/5sM+0rs+708orh2Se
153 | eQ2S/irr6MQgq22iv3V84gqrS+Jy61TQLQ2nJi6zTv+pm/W/vRtZ78o6+jYkVMgzawhqgIqgVNZkEBMB
154 | 9HUx5Vdkn29PQcTypcE1n5fZCLy58xpYH/7+gOtYn5fvbN1/Uk+rT9GfraGJk60HEsdaTyXaWhMTrayX
155 | Ei2tV4qlufXaL/p8SLhYD5aBReA9MA7cALrqPgcFvgkhBgKooJttuJmqmwlapGzjdYh+y+81uN4WvOEH
156 | /83KK9vYersQ97IlGAqsZpa1upn1xt4m1qzEH8zEfS8Jb5JosQ18DSaA3qCW5yKIgQBkh53VHszXy0Yg
157 | z4L7wSNgrmmvQr7ZB1lttnS3rnwZyf4i7uVqNnayH3aCBeAe0CL1M4ECyNz9v9DnHXwcJf5gq0Wit3Ve
158 | 4kTrkcTR1jQ2bGLCCvBIchdkVyKIgQCG5z75/38k/3LrvxJdrHuQ+NN/69qzIROXLAF/Td0chQL4QwAF
159 | Wl2Xw7d+E7z1WyZ6WP0SbaxJmvj8XieesQe8CToa9QYiLgCp3ns1l13+AdZxia7WHTJCr4N5bLTEF2QW
160 | oS8odCSBiAtAimreyFXy97G6Jo63xvCNT7I5azAcVKYA/lj593Iuuv2XWmckOljj+a1Pso2co/CEfVwg
161 | zgKQevsnsv3ml+Rvbz3D5Ce55OnkUWnF5moMZgFuym63/5TEMdY4Jj/JNXvBKFChWAnEQAB/Br9mo9s/
162 | wOqIb/7RTH4SpOKhm+1FQ3GsBDwKLPZbADLVJ6P9Pgz4ybFYS8HH4A0wWY/OJuHneTAVvA2+0orQXR63
163 | n59Bj4wzAzEQgNQCjPO70KeH1fe3qT6PHtom8K4ejikLQuqCA/V0nEJdHELCT2k9+kxWAFbXE4/OBWO0
164 | 7NcrGci1GsVVAHm6WcY2v7r+8t3f1nrei3l+ubfjQWf7VA6JHfm68KcP+MAjEcgKw3L/IYGYbAhyAHjb
165 | n65/i8Qp1t1uv/tl6mYGOBmU4bFXsd2cJx3VwECw2INPyZ5xFYBwgdfHfsmo/4VWT13UM9PNW/8m7eIz
166 | 8RmZZCA5N0VH903bmvQmDt6nfcVIAJXAFC8FcKXVKnGS9bCbt3+RWjmfic8ogQikN/Cwju6btLddWi4c
167 | HwGkSKCjwa7A+3n7TzdN/h/B6Ux8hkMJyEDwvS4kMHufKsEYngswBOxyKwDZr6+LNdz07f8T6MXkZxiK
168 | QGYNHjcUwA5724vjyUDyKTDBi5H/1tZLJt/+u7U4I5/Jz3DRE6gJ3jGUwKTkYHNczwY8Erznpvvf3Rpk
169 | 2vWfYR/wYzBcSKATWGu4dLhxnAWQp5t8/su06u9Es8G/DfrQmPwMLyQgvcgRhpuIXBE7AaSRgAwKLnDa
170 | /e9rdUL3/0WT7v9Yrf6iABheSaCRbg3mtC3KTsMFsRNAGgkcB75y0v0/37og0cx63aS8tzOTn+GxBPJ1
171 | g1Cn7VHyvmYsBZBGAm3ARyXtAZxh3WDS/ZcDH6pQAAwfegFSQbrZYXtcJ/sIxlYAaSRQH0zd30EfV1nN
172 | Eydb95sI4DYmP8MnCVTT1aJOlwr3ibUA0kigOnihuFV/g6w2iY7WE04FIHu1daMAGD72Ah4z+Ay4J/YC
173 | SBGBbCH2j+IEMMA6NtHOmuh05Z9U/f2Jyc/wUQADDQTwHAWwrwCkPuCb/c8AOC4A+iS5PxuD4ZMApKx8
174 | u8NcnkkB7PsZcC7YWdwMgBzF3dKa4lQAlm78wBbL8EsCHXSmyUm7nEMB/CEAOfn3qWIGAJdfazW67xzr
175 | L7c3t17b6vCevfJ76SWD4Y8AmmluOpoKpAD23/1foacBt6xtfZnXwPqwjS7moQAYFECEu/9rwCjQSnsH
176 | eS2sV+V+tacAGBRAtAQgCT5WE3+tHibSQTcU/V0SeqMpAAYFEDEByNbhc1QCkvilU+oD7DeaAmBQABET
177 | QC1wLCiTLvFTbjQFwKAAIloJmDbxKQAGBRDxQiAHN5oCYFAAFAAFwKAAKAAKgEEBUAAUAIMCoAAoAAYF
178 | QAFQAAwKgAKgABgUAAVAATAoAAqAAmBQABQAg0EBUAAMBgVAATAYFAAFEPrItKjKBAYFQAGEO+FlI5XK
179 | oCaoJ9upgfYpNAd1wCGgPIVAAVAA4Ux6OUvhID1e7SJwJ3gefKAHry4HG8DGFNaDIj2heSb4O7gGdNH9
180 | GQooAgqAAghm4heChuASPUhlnib5bpPj1lPYAhaBZ/T6tVUyFAEFQAHk+G1/hCblP8EyjxK+OOT6i8HD
181 | umNTIXsFFAAFkN3EL9Du/X36ZvY76TMhnwzjdc9G9ggoAArA5+SXnZLbgcfB6hwlfTpWgbvBYZQABUAB
182 | +PPWbwAeCljipzJbBwxjLwEKgALwKvkrgb+ArwOc+HZEUINSxwYoAAqAAnCe/M3Ai8UdjhpQtunUYwUK
183 | gAKgAMy+9c/RAb5ESBFpPRhXCVAAFIBp8pcFQ8BPIU5+uwTusB/uQgFQABRAZgHI9/694NcIJH+SrWBA
184 | 3MYDKAAKwGnyV9Qjz3dHKPmTrASdKAAKgAJIn/wyYn4X2BXB5E/yPqgRFwlQABSAk+/+gTpybpJYUu8/
185 | TasC5Xv7UTDfo6SVcYipHl77dnvFIAVAAVAAVtPOWklnklCfgVN04NB+TVnSO9ll8ssMxOkZrv2yi0+B
186 | dhQABRBrAdiSSdbmf+ji7dy1mDX7TcAPhtf+BZxdzLUbg+8Nrz02OStAAVAAsRNASiINc/GGftO+aUea
187 | 65fWIiKTa8u+AVXSvalt+w2Mc/HJclzUewEUAAWwPwG00OW7pgJ4NrlBRzE/4zHDa08swbXvcvG7j9Fi
188 | JwqAAoilAPJ1Pb2bb/T3dIuvTD0AmVl4xfDaMzNV8NmuP9LF775UFzdFthfgVgDzHP6hn0EbCiDYArAl
189 | T32wxKUANoOzivlObw1WGF57nb2bnoaDwVwXv/tecBUFkFkA7zj8Q9vAqfpDKYDgC2CgJoHbabqF4FR7
190 | qa1ST6cG3Vx7looqNfnlZ93qQc3Ca8kxDArgPwXwosM/tBf0owBCIQDpmk/xeFceGey7WdcQPOBhHcCX
191 | 4EaVTCedGRjnomZhj63ScZ2Og1AAaQQwwuEfEkZSAKEQwFHgu5BV8e0A20v41t+hnx7/pzsRjwA36J4G
192 | F+suxX303zWnANILYADY5fAPzgYHUACBF8BJOs+eiNiCn4/B33QZs+xOfEBypD+Oh5G4FcBJBg1aBgKP
193 | i1svIIQCuMSj7/8gsFy3ID9NzyFIdz5BeT1opJ6+8WUn4Y7KMbrpST3bYST5URCCWwEcDr4y+Ay4lwII
194 | vAD+GpHVfbLZx9Epb/nSuk25lCdfD54Eb+lBI0VaBLQpBfthJDLw+AS4Tq9xhF4zdCJwK4DSYKKBAL4B
195 | deMkgRAK4LYQJ/52LRJql7J7kcwW9NNv/sX6SeDFZ8U3es0r9GeE5mQitwIQBhoIQBiWFEAcJEABZA0Z
196 | uLwclNO/RzldyPSErjnY4+PP3qPFQ//QnkH5oIvACwEcDVYZCGC5JkQsJBBCAVwfwuR/Sw8iSR5K0lmn
197 | Hjfl4HfZpCsdu6bWP0RNAGXBZMNewHRQjQIIpAB6+/y29BIZrHxODwZNFhg9GpD9Cn/Ww0sbBlECXghA
198 | uAjsNBCAFAY9AAqjLoEQCuC4HL05TZJflu5W1d+7O/gigL+nnHZ8fur4QFQEcCj4xLAXsB3cnGzkURVB
199 | CAVQKySHfMhqwwO1m31DwHcp3qxjK5WCIgFXArBdQBgM9hhKYJsOClaMqgRCKACZ1poU8OSfpef8ldft
200 | wMKwS7FUKY7OtI9BmAVQw0UvIKEVheNAHbsEoiKCkC4G6hvgcYDvdCVhgR74GaZdiveoBCrmWgKuBZAi
201 | gUvAry4kIHwOeoNKURJBSAVQz8WWWn7P8/fR33GQi0U/uWS3rlYsyKUEvBaAdOFfcCmA5LjADNADHJQq
202 | gjCKIcQbgjwSwOR5QTcBPV6r/cJasCSDrD1CL4AUCbQA33kggaQI5oJ7QDetHqyiswYF+xOD38RAAHk6
203 | r74qQEmzBnTQb+g3XL6Bd3g0C+Fm7EFmLGrnSgJ+CEC4FGzxSAJ2GSzV1YRSd/AceBKM8ZnHwCNa8djQ
204 | VAIhFkApD7YF85LH9PcaYLjZx27dguxinTKUgqd3DcYQJPHf0dLiM8GVYLqhVIbn6hwCzwSQIoEyuuBn
205 | j8cSyDVLwBBQIeoCSJFAw4BMCW7QVXqyou8Tw2s8p0uA7X+/alqsYzIDkXps2p0GYirS1YbhFkCKBGTN
206 | /9MRE0BCC57ustctxEAAefqm25FjAbyq8/3n64m+JucIdCrmDIEiB1N5F2W4jiwX/tzwNKLwCyDN1ODk
207 | CEpAPm+6R10AKRKQ3XfH57jir592lSe6GD/YZ5fflA1ES1pBuEUHINPtdFxOz0Jw+rt9CqpnWwK+CCBF
208 | AocZ7B0YBqaB8lEXQEqS1HW5y67btf3ylj7SxdSkJG6XDG/uE/QTo6TjCJdmuE59w99vq64gjJwAhIN1
209 | QG1nhASwDDSImQCSifJjDgTwjr5du2kdgOl1XtK3feoYxyyDU4nqplxHyqefcfG73RIZAaSRgAyc3QDW
210 | RUQAsrXZMXEQQBoJ9NIdcrIpgFH6s4d4UIU3U7c8v1hH4BcaXmsOuFZXTkpRzzyX26i9nO3zCH0VQBoJ
211 | 5Ou5AB9FQAByw9rGRQApEpDv8P661DVbArhSf/Zoj8cVgnSdT5KrGiMjgAwiqAXuNtxIJCgs1PGN2Agg
212 | TX3AgCxJYJeeLpTv4iDRMLBUt2OPngAy9Aba6wKgDSEUwMP6d4iVANJIoK8enuFnYvyi25SXdln9F3RW
213 | J+sBIimANBJIFg3JNuGPaqHN3pC8/RvHYRqwhGMC5zqYQzctAGqn38dRFoD8PdtGWgDFiKAUqK+HjUjt
214 | QFFAZw0Wga5xqAR0KAEpsPmMAnB9fFqbWAigGBHk6WIfkcE5WnUnQvhU1wKsB1t1bUC22KILnEaDpnFY
215 | C2AoATlD71ufPgFO1E+A1yMsgBXJvQNjI4ASyCAphKqgHmgNTtBTibJFR1BbeymxWA1oKIEGPtUI7NQF
216 | N3m6/35UBbBAS4njKQAHQgjNMuCYCaC/j8eJDdSfcX+EBTA9eZ4BBRCxiIEACrXKzq/keEh/zuUh2q48
217 | 8AuCKAAKwKu3fyOwrATz3LKL71QwXwe9Srp0dqbuAtQ6B1WI2UDGOU6mACiAsAqgXzFv5pV6JHdTrR2Q
218 | RD5UR7x76VbZsk5/tp7Zt1q30N6u+/1t0rLbw3VL7XcjKIAPdHtzCoACCJ0AMnX/JfFH6lu7VKbjtG1H
219 | eVXWJG+uR3KfqIuP2ukqu0L9f4dGLPlFnIMjsx8AI3Z1AKnd/7W6dVfaxC9mGrGkNAjobsWmfGbfXYgC
220 | oADCJoD+2pClJPhJfXv7ckS27Xp3RST5d2o5dbg3BWXEVgBlNemf0/36Svt5JHbK5iTzIyCAl+xHhVEA
221 | FEDYBFBOB/fK+pn4GT4ZLgnpoSBJFmv1ZPjPBWDE+hMgqwdd2n5eWY/3B8gmG8F5uT4klAKgAEIZtsSp
222 | AWaELPm3685GpSJxNiCDAshx70OmCN8PSfL/qtuHFUbidGAGBRAQCTTSjUOD/ua/NXW8hAKgACgAbyQg
223 | Z+z908cFSW6/+a+zv/lznfwUAAUQRQlU1RqBjQFK/u9116RSQUl8CoACiLIECnT/gDkBSP55WsqcF7Tk
224 | pwAogKiL4DA9bOOHHApgSnKv/6AlPwVAAcRBAkITPQDk2xyMDyxLbvNFAVAAFEDuJCDUA1frMWA/eTy1
225 | t6eYlX6XUQAUAAUQHBnIsuMOWowjXfSvdc+B3SVM+B26Z8GHus+BjDdcBb7M8P8/m1wjQQFQABRAsHoF
226 | hXqopyxkuhDcpHsYTNCz+mboaURjwQidyuuuB3hUSbnWkTrmkLpU+dtsn/hDAVAADOcySD31qEDf3AV6
227 | LFlJ9yuQoqQHdUOU5NFmPTkLQAFQAOGWQrFTeSn/T76e8vOUbm/2ZLIOgAKgACiA+EhEpgBP0R1/q1IA
228 | FAAFEE8ZFCZ3SaIAKAAKIMafFRQABUABMCgACoACYFAAFAAFwKAAKAAKgEEBUAAUAIMCoAAoAAYFQAFQ
229 | AAwKgAKgABgUAAXAYFAAFACDQQFQAAwGBUABMBgUAAXAYFAAFACDQQFQAAwGBUABMBgUAAXAYFAAFACD
230 | QQFQAAzGvu2yuYEAPufdc36jW4K1Dm/0W6AcBcDwsV12BJsdtsvZvHvOb/SfwHKHN/ozcBAFwPCpTQrd
231 | wQ6H7fJ13kHnN7sGWOTwRq8EjZMPi8HwQQDXOWyTwljeQec3uzJ41+GNFjOfRQEwfGqTpcDTBgK4jXfQ
232 | 7GZPMLjZ91MADJ/e/jXBVw7b43bQm3fR7IbfaCCAT8DBlADDh/Z4lia0k/a4CrTmXTS74aeBbQ5v+K/g
233 | HAqA4XFbLG3YI50jA9O8k2Y3/SjwncFNnwoqUAIMD9tiB7DGoC2OZhs0v/FS1POCwU2XXkMvCoDhUfKX
234 | NXz77wTnsg26u/l9wB6Dm/8xOIISYLhsf8L5YItBG1ysvVjeUBcPoA741uDmC2OSlYF8CAzD5G8CFhi2
235 | v8d1Nos31cWDyAcjDR+ADAgOST4EioDhMPll2u81w7b3C+jKNufNwzgWrDd8EJvAILsEGIwSJP+hhuNP
236 | SaaDimxz3jwUGQwc7+JhbNaaggrsCTBKkPwNdCbJtL1t0zUDbGcePhiZhlnt4qHIiOw4XWSURxEwUtsB
237 | KABn6KKyhAum8O3v/UOSsYB7XT4YYT7oB6qlaQC84fFL+iRNdaxpo8v2tQ6cxPbkz0M7Qkt93UpgF/gA
238 | DAT1tMorj8SOSjq+NAIs9aBdCXdzvMlfCZxpsFNQJqS+YAmYCK4GXXQ58RE6CFSNRALZI+IwUBu0AmeD
239 | O8DbHralhK5ercHk91cAYtdbwG4PH1ySrbp4Y7Gu+ppHIsGnYKHKfoPBhh4l4UfdLYjJnwUJVDZcl02I
240 | H/wMLuRYUnYlIEUaM9j4SI7ZnlpsxsjeKG493QiUDZHkAqk0HQYKmfy5k0BdMI2NkWQZKfUdqisFmfw5
241 | loCMvD6l03tsnMRvZPPZK7RwiMkfEAlUUiOvZQMlPjIXdOaAXzAlINWCp4D3wV42VuIhm3V3nyOZ/MEX
242 | gRTx/I+H1V0kvuzWAp//Th47x+QPhwSS57g9BIrYkInB4jHp7g9InjbF5A+nCErpQo9btSpsGxs32c9i
243 | nlfBRaA6Ez9aPYLqutxTegUf6YDhTjb6WCPl3z/oBh5/BW3t28gx8aMpgjzt1slKsP5gFLC0/n+FLgkl
244 | 0WO9JrusKH0J3Al6gkagvJ/Lw/8N0dh5TRUfbEkAAAAASUVORK5CYII=
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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------