├── .gitignore
├── .vs
└── WeChatAPI
│ └── v14
│ └── .suo
├── README.md
├── WeChatAPI.Desktop.Demo
├── App.config
├── MainPage.Designer.cs
├── MainPage.cs
├── MainPage.resx
├── Program.cs
├── Properties
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ ├── Resources.resx
│ ├── Settings.Designer.cs
│ └── Settings.settings
├── QRCodePage.Designer.cs
├── QRCodePage.cs
├── QRCodePage.resx
├── WeChatAPI.Desktop.Demo.csproj
└── bin
│ └── Debug
│ ├── HtmlAgilityPack.dll
│ ├── Newtonsoft.Json.dll
│ └── WeChatAPI.Desktop.dll
├── WeChatAPI.Universal.Demo
├── App.xaml
├── App.xaml.cs
├── Assets
│ ├── LockScreenLogo.scale-200.png
│ ├── SplashScreen.scale-200.png
│ ├── Square150x150Logo.scale-200.png
│ ├── Square44x44Logo.scale-200.png
│ ├── Square44x44Logo.targetsize-24_altform-unplated.png
│ ├── StoreLogo.png
│ └── Wide310x150Logo.scale-200.png
├── MainPage.xaml
├── MainPage.xaml.cs
├── Package.appxmanifest
├── Properties
│ ├── AssemblyInfo.cs
│ └── Default.rd.xml
├── WeChatAPI.Universal.Demo.csproj
├── WeChatAPI.Universal.Demo_TemporaryKey.pfx
├── project.json
└── project.lock.json
└── WeChatAPI.sln
/.gitignore:
--------------------------------------------------------------------------------
1 | WeChatAPI.Desktop.Demo/obj
2 | WeChatAPI.Universal.Demo/obj
3 | packages/
4 | *.pdb
5 | *.xml
6 | saved
7 | *.config
8 | *.exe
9 | *.manifest
10 |
--------------------------------------------------------------------------------
/.vs/WeChatAPI/v14/.suo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xJonathanLEI/WeChatAPI/2c6b95e1458a1f02373111ca762eaab622e314cd/.vs/WeChatAPI/v14/.suo
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # WeChatAPI
2 | WeChatAPI is a 3rd-party API written in C# for WeChat, the most popular IM app in China.
3 |
4 | It has been decided that we will close source. Nevertheless, the team will update the GitHub repository with the latest demo. Also, the wiki will be kept up-to-date.
5 |
6 | ## How to Get Started
7 | It's simple. Just clone the repository and run the demo app. It shall present all the features we've finished.
8 |
9 | If you want a overview of how the API actually works, please refer to the [Wiki](https://github.com/xJonathanLEI/WeChatAPI/wiki).
10 |
11 | ## Contributing
12 | You should really join our team if you want to contribute because we've decided not to open source.
13 |
14 | Please refer to the project [Wiki](https://github.com/xJonathanLEI/WeChatAPI/wiki) for roadmap and instructions.
15 |
16 | (I am sitll writing the Wiki. Your help to complete it will be highly appreciated)
--------------------------------------------------------------------------------
/WeChatAPI.Desktop.Demo/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/WeChatAPI.Desktop.Demo/MainPage.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace WeChatAPI.Desktop.Demo
2 | {
3 | partial class MainPage
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.userAvatarBox = new System.Windows.Forms.PictureBox();
32 | this.labelSponsor = new System.Windows.Forms.Label();
33 | this.linkLabelSponsor = new System.Windows.Forms.LinkLabel();
34 | this.labelUserNickname = new System.Windows.Forms.Label();
35 | this.textBoxOutPut = new System.Windows.Forms.TextBox();
36 | this.labelOutput = new System.Windows.Forms.Label();
37 | this.labelContactList = new System.Windows.Forms.Label();
38 | this.listBoxContactList = new System.Windows.Forms.ListBox();
39 | ((System.ComponentModel.ISupportInitialize)(this.userAvatarBox)).BeginInit();
40 | this.SuspendLayout();
41 | //
42 | // userAvatarBox
43 | //
44 | this.userAvatarBox.Location = new System.Drawing.Point(20, 20);
45 | this.userAvatarBox.Name = "userAvatarBox";
46 | this.userAvatarBox.Size = new System.Drawing.Size(100, 100);
47 | this.userAvatarBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
48 | this.userAvatarBox.TabIndex = 0;
49 | this.userAvatarBox.TabStop = false;
50 | //
51 | // labelSponsor
52 | //
53 | this.labelSponsor.AutoSize = true;
54 | this.labelSponsor.Location = new System.Drawing.Point(1149, 842);
55 | this.labelSponsor.Name = "labelSponsor";
56 | this.labelSponsor.Size = new System.Drawing.Size(131, 25);
57 | this.labelSponsor.TabIndex = 1;
58 | this.labelSponsor.Text = "Powered by ";
59 | //
60 | // linkLabelSponsor
61 | //
62 | this.linkLabelSponsor.AutoSize = true;
63 | this.linkLabelSponsor.Location = new System.Drawing.Point(1266, 842);
64 | this.linkLabelSponsor.Name = "linkLabelSponsor";
65 | this.linkLabelSponsor.Size = new System.Drawing.Size(92, 25);
66 | this.linkLabelSponsor.TabIndex = 2;
67 | this.linkLabelSponsor.TabStop = true;
68 | this.linkLabelSponsor.Text = "MSFaith";
69 | //
70 | // labelUserNickname
71 | //
72 | this.labelUserNickname.AutoSize = true;
73 | this.labelUserNickname.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
74 | this.labelUserNickname.Location = new System.Drawing.Point(135, 31);
75 | this.labelUserNickname.Name = "labelUserNickname";
76 | this.labelUserNickname.Size = new System.Drawing.Size(100, 29);
77 | this.labelUserNickname.TabIndex = 3;
78 | this.labelUserNickname.Text = "Loading";
79 | //
80 | // textBoxOutPut
81 | //
82 | this.textBoxOutPut.Location = new System.Drawing.Point(482, 44);
83 | this.textBoxOutPut.Multiline = true;
84 | this.textBoxOutPut.Name = "textBoxOutPut";
85 | this.textBoxOutPut.ReadOnly = true;
86 | this.textBoxOutPut.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
87 | this.textBoxOutPut.Size = new System.Drawing.Size(874, 795);
88 | this.textBoxOutPut.TabIndex = 4;
89 | //
90 | // labelOutput
91 | //
92 | this.labelOutput.AutoSize = true;
93 | this.labelOutput.Location = new System.Drawing.Point(477, 9);
94 | this.labelOutput.Name = "labelOutput";
95 | this.labelOutput.Size = new System.Drawing.Size(82, 25);
96 | this.labelOutput.TabIndex = 5;
97 | this.labelOutput.Text = "Output:";
98 | //
99 | // labelContactList
100 | //
101 | this.labelContactList.AutoSize = true;
102 | this.labelContactList.Location = new System.Drawing.Point(15, 141);
103 | this.labelContactList.Name = "labelContactList";
104 | this.labelContactList.Size = new System.Drawing.Size(132, 25);
105 | this.labelContactList.TabIndex = 6;
106 | this.labelContactList.Text = "Contact List:";
107 | //
108 | // listBoxContactList
109 | //
110 | this.listBoxContactList.FormattingEnabled = true;
111 | this.listBoxContactList.ItemHeight = 25;
112 | this.listBoxContactList.Location = new System.Drawing.Point(20, 183);
113 | this.listBoxContactList.Name = "listBoxContactList";
114 | this.listBoxContactList.Size = new System.Drawing.Size(440, 654);
115 | this.listBoxContactList.TabIndex = 7;
116 | //
117 | // MainPage
118 | //
119 | this.AutoScaleDimensions = new System.Drawing.SizeF(12F, 25F);
120 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
121 | this.BackColor = System.Drawing.SystemColors.ControlLightLight;
122 | this.ClientSize = new System.Drawing.Size(1368, 874);
123 | this.Controls.Add(this.listBoxContactList);
124 | this.Controls.Add(this.labelContactList);
125 | this.Controls.Add(this.labelOutput);
126 | this.Controls.Add(this.textBoxOutPut);
127 | this.Controls.Add(this.labelUserNickname);
128 | this.Controls.Add(this.linkLabelSponsor);
129 | this.Controls.Add(this.labelSponsor);
130 | this.Controls.Add(this.userAvatarBox);
131 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
132 | this.MaximizeBox = false;
133 | this.Name = "MainPage";
134 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
135 | this.Text = "WeChatAPI Desktop Demo";
136 | this.Shown += new System.EventHandler(this.MainPage_Shown);
137 | ((System.ComponentModel.ISupportInitialize)(this.userAvatarBox)).EndInit();
138 | this.ResumeLayout(false);
139 | this.PerformLayout();
140 |
141 | }
142 |
143 | #endregion
144 |
145 | private System.Windows.Forms.PictureBox userAvatarBox;
146 | private System.Windows.Forms.Label labelSponsor;
147 | private System.Windows.Forms.LinkLabel linkLabelSponsor;
148 | private System.Windows.Forms.Label labelUserNickname;
149 | private System.Windows.Forms.TextBox textBoxOutPut;
150 | private System.Windows.Forms.Label labelOutput;
151 | private System.Windows.Forms.Label labelContactList;
152 | private System.Windows.Forms.ListBox listBoxContactList;
153 | }
154 | }
--------------------------------------------------------------------------------
/WeChatAPI.Desktop.Demo/MainPage.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Windows.Forms;
4 | using WeChatAPI.Desktop;
5 |
6 | namespace WeChatAPI.Desktop.Demo
7 | {
8 | public partial class MainPage : Form
9 | {
10 | int numberOfLines = 0;
11 |
12 | public MainPage()
13 | {
14 | InitializeComponent();
15 | }
16 |
17 | private async void MainPage_Shown(object sender, EventArgs e)
18 | {
19 | AddLineToOutput("Init Process...");
20 | await Program.wechat.InitAsync();
21 | AddLineToOutput("GetContact Process...");
22 | await Program.wechat.GetContactListAsync();
23 | AddLineToOutput("Getting user avatar...");
24 | userAvatarBox.Image = await Program.wechat.GetUserAvatar();
25 | labelUserNickname.Text = Program.wechat.InitResponse.User.NickName;
26 | foreach (WeChatContact member in Program.wechat.ContactList)
27 | listBoxContactList.Items.Add(member.Nickname);
28 |
29 | //Triggers the SyncCheck loop
30 | Program.wechat.SyncCheckCompleted += Wechat_SyncCheckCompleted;
31 | Program.wechat.SyncCompleted += Wechat_SyncCompleted;
32 | Program.wechat.SyncOrSyncCheckError += Wechat_SyncOrSyncCheckError;
33 | Program.wechat.StartChekcingNewMessages();
34 | }
35 |
36 | private void Wechat_SyncOrSyncCheckError(object sender, EventArgs e)
37 | {
38 | AddLineToOutput("[ERROR] " + (e as SyncOrSyncCheckErrorEventArgs).errorMessage);
39 | }
40 |
41 | private void Wechat_SyncCompleted(object sender, EventArgs e)
42 | {
43 | AddLineToOutput("Sync completed.");
44 | List messages = (e as SyncCompletedEventArgs).Messages;
45 | foreach (Message msg in messages)
46 | {
47 | AddLineToOutput("Synced message: " + msg.MessageID);
48 | if (msg.MessageType == Message.MessageTypes.TextMessage)
49 | {
50 | AddLineToOutput(" Text Message content: " + (msg as TextMessage).MessageContent);
51 | }
52 | else
53 | {
54 | AddLineToOutput(" Unknown message type");
55 | }
56 | }
57 | }
58 |
59 | private void Wechat_SyncCheckCompleted(object sender, EventArgs e)
60 | {
61 | //Selector = "0" indicates that there is no new content to sync
62 | AddLineToOutput("SynCheck completed. " + ((e as SyncCheckCompletedEventArgs).selector == "0" ? "No need to Sync." : "Starting Sync..."));
63 | }
64 |
65 | private void AddLineToOutput(string line)
66 | {
67 | if (numberOfLines == 100)
68 | {
69 | numberOfLines = 0;
70 | textBoxOutPut.Text = "";
71 | }
72 | textBoxOutPut.AppendText(line + "\r\n");
73 | textBoxOutPut.Select(textBoxOutPut.TextLength - 1, 0);
74 | numberOfLines++;
75 | }
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/WeChatAPI.Desktop.Demo/MainPage.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 |
--------------------------------------------------------------------------------
/WeChatAPI.Desktop.Demo/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Threading.Tasks;
5 | using System.Windows.Forms;
6 |
7 | namespace WeChatAPI.Desktop.Demo
8 | {
9 | static class Program
10 | {
11 | ///
12 | /// WeChat API handler
13 | ///
14 | public static WeChat wechat { get; set; }
15 | public static string StartupPath { get { string ret = Application.StartupPath; return ret + (ret.EndsWith("\\") ? "" : "\\"); } }
16 | ///
17 | /// The main entry point for the application.
18 | ///
19 | [STAThread]
20 | static void Main()
21 | {
22 | //Without setting the protocol type to TLS, HTTP requests would fail
23 | System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls;
24 | wechat = new WeChat();
25 | Application.EnableVisualStyles();
26 | Application.SetCompatibleTextRenderingDefault(false);
27 | Application.Run(new QRCodePage());
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/WeChatAPI.Desktop.Demo/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("WeChatAPI.Desktop.Demo")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("WeChatAPI.Desktop.Demo")]
13 | [assembly: AssemblyCopyright("Copyright © 2016")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("7a13e4f2-b109-4e71-b7c0-f99ac3ae4476")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/WeChatAPI.Desktop.Demo/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace WeChatAPI.Desktop.Demo.Properties
12 | {
13 |
14 |
15 | ///
16 | /// A strongly-typed resource class, for looking up localized strings, etc.
17 | ///
18 | // This class was auto-generated by the StronglyTypedResourceBuilder
19 | // class via a tool like ResGen or Visual Studio.
20 | // To add or remove a member, edit your .ResX file then rerun ResGen
21 | // with the /str option, or rebuild your VS project.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources
26 | {
27 |
28 | private static global::System.Resources.ResourceManager resourceMan;
29 |
30 | private static global::System.Globalization.CultureInfo resourceCulture;
31 |
32 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
33 | internal Resources()
34 | {
35 | }
36 |
37 | ///
38 | /// Returns the cached ResourceManager instance used by this class.
39 | ///
40 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
41 | internal static global::System.Resources.ResourceManager ResourceManager
42 | {
43 | get
44 | {
45 | if ((resourceMan == null))
46 | {
47 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WeChatAPI.Desktop.Demo.Properties.Resources", typeof(Resources).Assembly);
48 | resourceMan = temp;
49 | }
50 | return resourceMan;
51 | }
52 | }
53 |
54 | ///
55 | /// Overrides the current thread's CurrentUICulture property for all
56 | /// resource lookups using this strongly typed resource class.
57 | ///
58 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
59 | internal static global::System.Globalization.CultureInfo Culture
60 | {
61 | get
62 | {
63 | return resourceCulture;
64 | }
65 | set
66 | {
67 | resourceCulture = value;
68 | }
69 | }
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/WeChatAPI.Desktop.Demo/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | text/microsoft-resx
107 |
108 |
109 | 2.0
110 |
111 |
112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
113 |
114 |
115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
--------------------------------------------------------------------------------
/WeChatAPI.Desktop.Demo/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace WeChatAPI.Desktop.Demo.Properties
12 | {
13 |
14 |
15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
18 | {
19 |
20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
21 |
22 | public static Settings Default
23 | {
24 | get
25 | {
26 | return defaultInstance;
27 | }
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/WeChatAPI.Desktop.Demo/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/WeChatAPI.Desktop.Demo/QRCodePage.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace WeChatAPI.Desktop.Demo
2 | {
3 | partial class QRCodePage
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.pictureBox1 = new System.Windows.Forms.PictureBox();
32 | this.labelScanToLogin = new System.Windows.Forms.Label();
33 | this.labelLoggingIn = new System.Windows.Forms.Label();
34 | this.labelConfirmLogin = new System.Windows.Forms.Label();
35 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
36 | this.SuspendLayout();
37 | //
38 | // pictureBox1
39 | //
40 | this.pictureBox1.Location = new System.Drawing.Point(101, 76);
41 | this.pictureBox1.Name = "pictureBox1";
42 | this.pictureBox1.Size = new System.Drawing.Size(430, 430);
43 | this.pictureBox1.TabIndex = 0;
44 | this.pictureBox1.TabStop = false;
45 | //
46 | // labelScanToLogin
47 | //
48 | this.labelScanToLogin.AutoSize = true;
49 | this.labelScanToLogin.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
50 | this.labelScanToLogin.Location = new System.Drawing.Point(135, 564);
51 | this.labelScanToLogin.Name = "labelScanToLogin";
52 | this.labelScanToLogin.Size = new System.Drawing.Size(355, 37);
53 | this.labelScanToLogin.TabIndex = 1;
54 | this.labelScanToLogin.Text = "Scan QR Code to Login";
55 | //
56 | // labelLoggingIn
57 | //
58 | this.labelLoggingIn.AutoSize = true;
59 | this.labelLoggingIn.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
60 | this.labelLoggingIn.Location = new System.Drawing.Point(220, 564);
61 | this.labelLoggingIn.Name = "labelLoggingIn";
62 | this.labelLoggingIn.Size = new System.Drawing.Size(193, 37);
63 | this.labelLoggingIn.TabIndex = 2;
64 | this.labelLoggingIn.Text = "Logging in...";
65 | this.labelLoggingIn.Visible = false;
66 | //
67 | // labelConfirmLogin
68 | //
69 | this.labelConfirmLogin.AutoSize = true;
70 | this.labelConfirmLogin.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
71 | this.labelConfirmLogin.Location = new System.Drawing.Point(97, 564);
72 | this.labelConfirmLogin.Name = "labelConfirmLogin";
73 | this.labelConfirmLogin.Size = new System.Drawing.Size(442, 37);
74 | this.labelConfirmLogin.TabIndex = 3;
75 | this.labelConfirmLogin.Text = "Confirm Login on Your Phone";
76 | this.labelConfirmLogin.Visible = false;
77 | //
78 | // QRCodePage
79 | //
80 | this.AutoScaleDimensions = new System.Drawing.SizeF(12F, 25F);
81 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
82 | this.BackColor = System.Drawing.SystemColors.ButtonHighlight;
83 | this.ClientSize = new System.Drawing.Size(649, 679);
84 | this.Controls.Add(this.labelConfirmLogin);
85 | this.Controls.Add(this.labelLoggingIn);
86 | this.Controls.Add(this.labelScanToLogin);
87 | this.Controls.Add(this.pictureBox1);
88 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
89 | this.MaximizeBox = false;
90 | this.MinimizeBox = false;
91 | this.Name = "QRCodePage";
92 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
93 | this.Text = "WeChatAPI Desktop Demo";
94 | this.Load += new System.EventHandler(this.QRCodePage_Load);
95 | this.Shown += new System.EventHandler(this.QRCodePage_Shown);
96 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
97 | this.ResumeLayout(false);
98 | this.PerformLayout();
99 |
100 | }
101 |
102 | #endregion
103 |
104 | private System.Windows.Forms.PictureBox pictureBox1;
105 | private System.Windows.Forms.Label labelScanToLogin;
106 | private System.Windows.Forms.Label labelLoggingIn;
107 | private System.Windows.Forms.Label labelConfirmLogin;
108 | }
109 | }
--------------------------------------------------------------------------------
/WeChatAPI.Desktop.Demo/QRCodePage.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows.Forms;
3 |
4 | namespace WeChatAPI.Desktop.Demo
5 | {
6 | ///
7 | /// This page is where the user scans the QR code and login
8 | ///
9 | public partial class QRCodePage : Form
10 | {
11 | public QRCodePage()
12 | {
13 | InitializeComponent();
14 | }
15 |
16 | private async void QRCodePage_Shown(object sender, EventArgs e)
17 | {
18 | //Load QR code image
19 | pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
20 | pictureBox1.Image = await Program.wechat.GetQRCodeAsync();
21 | }
22 |
23 | private void QRCodePage_Load(object sender, EventArgs e)
24 | {
25 | //Handles events
26 | Program.wechat.QRCodeExpired += Wechat_QRCodeExpired;
27 | Program.wechat.QRCodeScanned += Wechat_QRCodeScanned;
28 | Program.wechat.LoginConfirmed += Wechat_LoginConfirmed;
29 | Program.wechat.LoginFinished += Wechat_LoginFinished;
30 | }
31 |
32 | private void Wechat_LoginFinished(object sender, EventArgs e)
33 | {
34 | //Login process finished. Navigate to MainPage
35 | Hide();
36 | new MainPage().ShowDialog();
37 | Close();
38 | }
39 |
40 | private void Wechat_LoginConfirmed(object sender, EventArgs e)
41 | {
42 | //The user has confirmed login on the phone
43 | labelConfirmLogin.Hide();
44 | labelLoggingIn.Show();
45 | }
46 |
47 | private void Wechat_QRCodeScanned(object sender, EventArgs e)
48 | {
49 | //The QR code has been scanned
50 | //Show the avatar
51 | pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
52 | pictureBox1.Image = (e as QRCodeScannedEventArgs).profilePicture;
53 | labelScanToLogin.Hide();
54 | labelConfirmLogin.Show();
55 | }
56 |
57 | private async void Wechat_QRCodeExpired(object sender, EventArgs e)
58 | {
59 | //QR code expired.
60 | pictureBox1.Image = null;
61 | pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
62 | pictureBox1.Image = await Program.wechat.GetQRCodeAsync();
63 | }
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/WeChatAPI.Desktop.Demo/QRCodePage.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 |
--------------------------------------------------------------------------------
/WeChatAPI.Desktop.Demo/WeChatAPI.Desktop.Demo.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {7A13E4F2-B109-4E71-B7C0-F99AC3AE4476}
8 | WinExe
9 | Properties
10 | WeChatAPI.Desktop.Demo
11 | WeChatAPI.Desktop.Demo
12 | v4.6.1
13 | 512
14 | true
15 |
16 |
17 | AnyCPU
18 | true
19 | full
20 | false
21 | bin\Debug\
22 | DEBUG;TRACE
23 | prompt
24 | 4
25 |
26 |
27 | AnyCPU
28 | pdbonly
29 | true
30 | bin\Release\
31 | TRACE
32 | prompt
33 | 4
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | False
49 | ..\..\WeChatAPI\WeChatAPI.Desktop\bin\Debug\WeChatAPI.Desktop.dll
50 |
51 |
52 |
53 |
54 | Form
55 |
56 |
57 | MainPage.cs
58 |
59 |
60 |
61 |
62 | Form
63 |
64 |
65 | QRCodePage.cs
66 |
67 |
68 | MainPage.cs
69 |
70 |
71 | ResXFileCodeGenerator
72 | Resources.Designer.cs
73 | Designer
74 |
75 |
76 | True
77 | Resources.resx
78 |
79 |
80 | QRCodePage.cs
81 |
82 |
83 | SettingsSingleFileGenerator
84 | Settings.Designer.cs
85 |
86 |
87 | True
88 | Settings.settings
89 | True
90 |
91 |
92 |
93 |
94 |
95 |
96 |
103 |
--------------------------------------------------------------------------------
/WeChatAPI.Desktop.Demo/bin/Debug/HtmlAgilityPack.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xJonathanLEI/WeChatAPI/2c6b95e1458a1f02373111ca762eaab622e314cd/WeChatAPI.Desktop.Demo/bin/Debug/HtmlAgilityPack.dll
--------------------------------------------------------------------------------
/WeChatAPI.Desktop.Demo/bin/Debug/Newtonsoft.Json.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xJonathanLEI/WeChatAPI/2c6b95e1458a1f02373111ca762eaab622e314cd/WeChatAPI.Desktop.Demo/bin/Debug/Newtonsoft.Json.dll
--------------------------------------------------------------------------------
/WeChatAPI.Desktop.Demo/bin/Debug/WeChatAPI.Desktop.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xJonathanLEI/WeChatAPI/2c6b95e1458a1f02373111ca762eaab622e314cd/WeChatAPI.Desktop.Demo/bin/Debug/WeChatAPI.Desktop.dll
--------------------------------------------------------------------------------
/WeChatAPI.Universal.Demo/App.xaml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/WeChatAPI.Universal.Demo/App.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Runtime.InteropServices.WindowsRuntime;
6 | using Windows.ApplicationModel;
7 | using Windows.ApplicationModel.Activation;
8 | using Windows.Foundation;
9 | using Windows.Foundation.Collections;
10 | using Windows.UI.Xaml;
11 | using Windows.UI.Xaml.Controls;
12 | using Windows.UI.Xaml.Controls.Primitives;
13 | using Windows.UI.Xaml.Data;
14 | using Windows.UI.Xaml.Input;
15 | using Windows.UI.Xaml.Media;
16 | using Windows.UI.Xaml.Navigation;
17 |
18 | namespace WeChatAPI.Universal.Demo
19 | {
20 | ///
21 | /// Provides application-specific behavior to supplement the default Application class.
22 | ///
23 | sealed partial class App : Application
24 | {
25 | ///
26 | /// Initializes the singleton application object. This is the first line of authored code
27 | /// executed, and as such is the logical equivalent of main() or WinMain().
28 | ///
29 | public App()
30 | {
31 | this.InitializeComponent();
32 | this.Suspending += OnSuspending;
33 | }
34 |
35 | ///
36 | /// Invoked when the application is launched normally by the end user. Other entry points
37 | /// will be used such as when the application is launched to open a specific file.
38 | ///
39 | /// Details about the launch request and process.
40 | protected override void OnLaunched(LaunchActivatedEventArgs e)
41 | {
42 | #if DEBUG
43 | if (System.Diagnostics.Debugger.IsAttached)
44 | {
45 | this.DebugSettings.EnableFrameRateCounter = true;
46 | }
47 | #endif
48 | Frame rootFrame = Window.Current.Content as Frame;
49 |
50 | // Do not repeat app initialization when the Window already has content,
51 | // just ensure that the window is active
52 | if (rootFrame == null)
53 | {
54 | // Create a Frame to act as the navigation context and navigate to the first page
55 | rootFrame = new Frame();
56 |
57 | rootFrame.NavigationFailed += OnNavigationFailed;
58 |
59 | if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
60 | {
61 | //TODO: Load state from previously suspended application
62 | }
63 |
64 | // Place the frame in the current Window
65 | Window.Current.Content = rootFrame;
66 | }
67 |
68 | if (e.PrelaunchActivated == false)
69 | {
70 | if (rootFrame.Content == null)
71 | {
72 | // When the navigation stack isn't restored navigate to the first page,
73 | // configuring the new page by passing required information as a navigation
74 | // parameter
75 | rootFrame.Navigate(typeof(MainPage), e.Arguments);
76 | }
77 | // Ensure the current window is active
78 | Window.Current.Activate();
79 | }
80 | }
81 |
82 | ///
83 | /// Invoked when Navigation to a certain page fails
84 | ///
85 | /// The Frame which failed navigation
86 | /// Details about the navigation failure
87 | void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
88 | {
89 | throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
90 | }
91 |
92 | ///
93 | /// Invoked when application execution is being suspended. Application state is saved
94 | /// without knowing whether the application will be terminated or resumed with the contents
95 | /// of memory still intact.
96 | ///
97 | /// The source of the suspend request.
98 | /// Details about the suspend request.
99 | private void OnSuspending(object sender, SuspendingEventArgs e)
100 | {
101 | var deferral = e.SuspendingOperation.GetDeferral();
102 | //TODO: Save application state and stop any background activity
103 | deferral.Complete();
104 | }
105 | }
106 | }
107 |
--------------------------------------------------------------------------------
/WeChatAPI.Universal.Demo/Assets/LockScreenLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xJonathanLEI/WeChatAPI/2c6b95e1458a1f02373111ca762eaab622e314cd/WeChatAPI.Universal.Demo/Assets/LockScreenLogo.scale-200.png
--------------------------------------------------------------------------------
/WeChatAPI.Universal.Demo/Assets/SplashScreen.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xJonathanLEI/WeChatAPI/2c6b95e1458a1f02373111ca762eaab622e314cd/WeChatAPI.Universal.Demo/Assets/SplashScreen.scale-200.png
--------------------------------------------------------------------------------
/WeChatAPI.Universal.Demo/Assets/Square150x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xJonathanLEI/WeChatAPI/2c6b95e1458a1f02373111ca762eaab622e314cd/WeChatAPI.Universal.Demo/Assets/Square150x150Logo.scale-200.png
--------------------------------------------------------------------------------
/WeChatAPI.Universal.Demo/Assets/Square44x44Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xJonathanLEI/WeChatAPI/2c6b95e1458a1f02373111ca762eaab622e314cd/WeChatAPI.Universal.Demo/Assets/Square44x44Logo.scale-200.png
--------------------------------------------------------------------------------
/WeChatAPI.Universal.Demo/Assets/Square44x44Logo.targetsize-24_altform-unplated.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xJonathanLEI/WeChatAPI/2c6b95e1458a1f02373111ca762eaab622e314cd/WeChatAPI.Universal.Demo/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
--------------------------------------------------------------------------------
/WeChatAPI.Universal.Demo/Assets/StoreLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xJonathanLEI/WeChatAPI/2c6b95e1458a1f02373111ca762eaab622e314cd/WeChatAPI.Universal.Demo/Assets/StoreLogo.png
--------------------------------------------------------------------------------
/WeChatAPI.Universal.Demo/Assets/Wide310x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xJonathanLEI/WeChatAPI/2c6b95e1458a1f02373111ca762eaab622e314cd/WeChatAPI.Universal.Demo/Assets/Wide310x150Logo.scale-200.png
--------------------------------------------------------------------------------
/WeChatAPI.Universal.Demo/MainPage.xaml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/WeChatAPI.Universal.Demo/MainPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Runtime.InteropServices.WindowsRuntime;
6 | using Windows.Foundation;
7 | using Windows.Foundation.Collections;
8 | using Windows.UI.Xaml;
9 | using Windows.UI.Xaml.Controls;
10 | using Windows.UI.Xaml.Controls.Primitives;
11 | using Windows.UI.Xaml.Data;
12 | using Windows.UI.Xaml.Input;
13 | using Windows.UI.Xaml.Media;
14 | using Windows.UI.Xaml.Navigation;
15 |
16 | // The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
17 |
18 | namespace WeChatAPI.Universal.Demo
19 | {
20 | ///
21 | /// An empty page that can be used on its own or navigated to within a Frame.
22 | ///
23 | public sealed partial class MainPage : Page
24 | {
25 | public MainPage()
26 | {
27 | this.InitializeComponent();
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/WeChatAPI.Universal.Demo/Package.appxmanifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
13 |
14 |
15 |
16 |
17 | WeChatAPI.Universal.Demo
18 | xJona
19 | Assets\StoreLogo.png
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
34 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/WeChatAPI.Universal.Demo/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("WeChatAPI.Universal.Demo")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("WeChatAPI.Universal.Demo")]
13 | [assembly: AssemblyCopyright("Copyright © 2016")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Version information for an assembly consists of the following four values:
18 | //
19 | // Major Version
20 | // Minor Version
21 | // Build Number
22 | // Revision
23 | //
24 | // You can specify all the values or you can default the Build and Revision Numbers
25 | // by using the '*' as shown below:
26 | // [assembly: AssemblyVersion("1.0.*")]
27 | [assembly: AssemblyVersion("1.0.0.0")]
28 | [assembly: AssemblyFileVersion("1.0.0.0")]
29 | [assembly: ComVisible(false)]
--------------------------------------------------------------------------------
/WeChatAPI.Universal.Demo/Properties/Default.rd.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/WeChatAPI.Universal.Demo/WeChatAPI.Universal.Demo.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | x86
7 | {ce2ac7c8-97ae-44ca-a230-72f5e3969289}
8 | AppContainerExe
9 | Properties
10 | WeChatAPI.Universal.Demo
11 | WeChatAPI.Universal.Demo
12 | en-US
13 | UAP
14 | 10.0.14393.0
15 | 10.0.10586.0
16 | 14
17 | 512
18 | {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
19 |
20 | WeChatAPI.Universal.Demo_TemporaryKey.pfx
21 |
22 |
23 |
24 | true
25 | bin\x86\Debug\
26 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
27 | ;2008
28 | full
29 | x86
30 | false
31 | prompt
32 | true
33 |
34 |
35 | bin\x86\Release\
36 | TRACE;NETFX_CORE;WINDOWS_UWP
37 | true
38 | ;2008
39 | pdbonly
40 | x86
41 | false
42 | prompt
43 | true
44 | true
45 |
46 |
47 | true
48 | bin\ARM\Debug\
49 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
50 | ;2008
51 | full
52 | ARM
53 | false
54 | prompt
55 | true
56 |
57 |
58 | bin\ARM\Release\
59 | TRACE;NETFX_CORE;WINDOWS_UWP
60 | true
61 | ;2008
62 | pdbonly
63 | ARM
64 | false
65 | prompt
66 | true
67 | true
68 |
69 |
70 | true
71 | bin\x64\Debug\
72 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
73 | ;2008
74 | full
75 | x64
76 | false
77 | prompt
78 | true
79 |
80 |
81 | bin\x64\Release\
82 | TRACE;NETFX_CORE;WINDOWS_UWP
83 | true
84 | ;2008
85 | pdbonly
86 | x64
87 | false
88 | prompt
89 | true
90 | true
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 | App.xaml
99 |
100 |
101 | MainPage.xaml
102 |
103 |
104 |
105 |
106 |
107 | Designer
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 | MSBuild:Compile
126 | Designer
127 |
128 |
129 | MSBuild:Compile
130 | Designer
131 |
132 |
133 |
134 |
135 | 14.0
136 |
137 |
138 |
139 |
146 |
147 |
--------------------------------------------------------------------------------
/WeChatAPI.Universal.Demo/WeChatAPI.Universal.Demo_TemporaryKey.pfx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xJonathanLEI/WeChatAPI/2c6b95e1458a1f02373111ca762eaab622e314cd/WeChatAPI.Universal.Demo/WeChatAPI.Universal.Demo_TemporaryKey.pfx
--------------------------------------------------------------------------------
/WeChatAPI.Universal.Demo/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "dependencies": {
3 | "Microsoft.NETCore.UniversalWindowsPlatform": "5.1.0"
4 | },
5 | "frameworks": {
6 | "uap10.0": {}
7 | },
8 | "runtimes": {
9 | "win10-arm": {},
10 | "win10-arm-aot": {},
11 | "win10-x86": {},
12 | "win10-x86-aot": {},
13 | "win10-x64": {},
14 | "win10-x64-aot": {}
15 | }
16 | }
--------------------------------------------------------------------------------
/WeChatAPI.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 14
4 | VisualStudioVersion = 14.0.25420.1
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WeChatAPI.Desktop.Demo", "WeChatAPI.Desktop.Demo\WeChatAPI.Desktop.Demo.csproj", "{7A13E4F2-B109-4E71-B7C0-F99AC3AE4476}"
7 | EndProject
8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WeChatAPI.Universal.Demo", "WeChatAPI.Universal.Demo\WeChatAPI.Universal.Demo.csproj", "{CE2AC7C8-97AE-44CA-A230-72F5E3969289}"
9 | EndProject
10 | Global
11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
12 | Debug|Any CPU = Debug|Any CPU
13 | Debug|ARM = Debug|ARM
14 | Debug|x64 = Debug|x64
15 | Debug|x86 = Debug|x86
16 | Release|Any CPU = Release|Any CPU
17 | Release|ARM = Release|ARM
18 | Release|x64 = Release|x64
19 | Release|x86 = Release|x86
20 | EndGlobalSection
21 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
22 | {7A13E4F2-B109-4E71-B7C0-F99AC3AE4476}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
23 | {7A13E4F2-B109-4E71-B7C0-F99AC3AE4476}.Debug|Any CPU.Build.0 = Debug|Any CPU
24 | {7A13E4F2-B109-4E71-B7C0-F99AC3AE4476}.Debug|ARM.ActiveCfg = Debug|Any CPU
25 | {7A13E4F2-B109-4E71-B7C0-F99AC3AE4476}.Debug|ARM.Build.0 = Debug|Any CPU
26 | {7A13E4F2-B109-4E71-B7C0-F99AC3AE4476}.Debug|x64.ActiveCfg = Debug|Any CPU
27 | {7A13E4F2-B109-4E71-B7C0-F99AC3AE4476}.Debug|x64.Build.0 = Debug|Any CPU
28 | {7A13E4F2-B109-4E71-B7C0-F99AC3AE4476}.Debug|x86.ActiveCfg = Debug|Any CPU
29 | {7A13E4F2-B109-4E71-B7C0-F99AC3AE4476}.Debug|x86.Build.0 = Debug|Any CPU
30 | {7A13E4F2-B109-4E71-B7C0-F99AC3AE4476}.Release|Any CPU.ActiveCfg = Release|Any CPU
31 | {7A13E4F2-B109-4E71-B7C0-F99AC3AE4476}.Release|Any CPU.Build.0 = Release|Any CPU
32 | {7A13E4F2-B109-4E71-B7C0-F99AC3AE4476}.Release|ARM.ActiveCfg = Release|Any CPU
33 | {7A13E4F2-B109-4E71-B7C0-F99AC3AE4476}.Release|ARM.Build.0 = Release|Any CPU
34 | {7A13E4F2-B109-4E71-B7C0-F99AC3AE4476}.Release|x64.ActiveCfg = Release|Any CPU
35 | {7A13E4F2-B109-4E71-B7C0-F99AC3AE4476}.Release|x64.Build.0 = Release|Any CPU
36 | {7A13E4F2-B109-4E71-B7C0-F99AC3AE4476}.Release|x86.ActiveCfg = Release|Any CPU
37 | {7A13E4F2-B109-4E71-B7C0-F99AC3AE4476}.Release|x86.Build.0 = Release|Any CPU
38 | {CE2AC7C8-97AE-44CA-A230-72F5E3969289}.Debug|Any CPU.ActiveCfg = Debug|x86
39 | {CE2AC7C8-97AE-44CA-A230-72F5E3969289}.Debug|ARM.ActiveCfg = Debug|ARM
40 | {CE2AC7C8-97AE-44CA-A230-72F5E3969289}.Debug|ARM.Build.0 = Debug|ARM
41 | {CE2AC7C8-97AE-44CA-A230-72F5E3969289}.Debug|ARM.Deploy.0 = Debug|ARM
42 | {CE2AC7C8-97AE-44CA-A230-72F5E3969289}.Debug|x64.ActiveCfg = Debug|x64
43 | {CE2AC7C8-97AE-44CA-A230-72F5E3969289}.Debug|x64.Build.0 = Debug|x64
44 | {CE2AC7C8-97AE-44CA-A230-72F5E3969289}.Debug|x64.Deploy.0 = Debug|x64
45 | {CE2AC7C8-97AE-44CA-A230-72F5E3969289}.Debug|x86.ActiveCfg = Debug|x86
46 | {CE2AC7C8-97AE-44CA-A230-72F5E3969289}.Debug|x86.Build.0 = Debug|x86
47 | {CE2AC7C8-97AE-44CA-A230-72F5E3969289}.Debug|x86.Deploy.0 = Debug|x86
48 | {CE2AC7C8-97AE-44CA-A230-72F5E3969289}.Release|Any CPU.ActiveCfg = Release|x86
49 | {CE2AC7C8-97AE-44CA-A230-72F5E3969289}.Release|ARM.ActiveCfg = Release|ARM
50 | {CE2AC7C8-97AE-44CA-A230-72F5E3969289}.Release|ARM.Build.0 = Release|ARM
51 | {CE2AC7C8-97AE-44CA-A230-72F5E3969289}.Release|ARM.Deploy.0 = Release|ARM
52 | {CE2AC7C8-97AE-44CA-A230-72F5E3969289}.Release|x64.ActiveCfg = Release|x64
53 | {CE2AC7C8-97AE-44CA-A230-72F5E3969289}.Release|x64.Build.0 = Release|x64
54 | {CE2AC7C8-97AE-44CA-A230-72F5E3969289}.Release|x64.Deploy.0 = Release|x64
55 | {CE2AC7C8-97AE-44CA-A230-72F5E3969289}.Release|x86.ActiveCfg = Release|x86
56 | {CE2AC7C8-97AE-44CA-A230-72F5E3969289}.Release|x86.Build.0 = Release|x86
57 | {CE2AC7C8-97AE-44CA-A230-72F5E3969289}.Release|x86.Deploy.0 = Release|x86
58 | EndGlobalSection
59 | GlobalSection(SolutionProperties) = preSolution
60 | HideSolutionNode = FALSE
61 | EndGlobalSection
62 | EndGlobal
63 |
--------------------------------------------------------------------------------