更新1
This commit is contained in:
parent
b8577139b7
commit
a3d8595a50
1139
Form1.Designer.cs
generated
1139
Form1.Designer.cs
generated
File diff suppressed because it is too large
Load Diff
753
Form1.cs
753
Form1.cs
@ -1,16 +1,18 @@
|
||||
using System.Net;
|
||||
using System.Net.Http.Json;
|
||||
using AntdUI;
|
||||
using MailKit.Net.Smtp;
|
||||
using MailKit.Security;
|
||||
using MimeKit;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
using AntdUI;
|
||||
using MailKit.Net.Smtp;
|
||||
using MailKit.Security;
|
||||
using MimeKit;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Windows.Automation;
|
||||
using WinLabel = System.Windows.Forms.Label;
|
||||
using WinPanel = System.Windows.Forms.Panel;
|
||||
@ -129,75 +131,43 @@ namespace Vmianqian
|
||||
public Form1()
|
||||
{
|
||||
InitializeComponent();
|
||||
BuildAntdDemoStyleUi();
|
||||
InitializeDesignerLayout();
|
||||
ReloadMenuItems();
|
||||
SelectPage("home");
|
||||
|
||||
if (IsInDesigner()) return;
|
||||
|
||||
Load += Form1_Load;
|
||||
FormClosing += Form1_FormClosing;
|
||||
}
|
||||
|
||||
private void BuildAntdDemoStyleUi()
|
||||
private static bool IsInDesigner()
|
||||
{
|
||||
BackColor = Color.White;
|
||||
Font = new Font("Microsoft YaHei UI", 9F);
|
||||
Text = "V免签 Demo";
|
||||
var fixedWindowSize = new Size(1200, 1000);
|
||||
MinimumSize = fixedWindowSize;
|
||||
MaximumSize = fixedWindowSize;
|
||||
Size = fixedWindowSize;
|
||||
MaximizeBox = false;
|
||||
|
||||
BuildTitlebar();
|
||||
BuildBottomBar();
|
||||
BuildMenu();
|
||||
BuildContentHost();
|
||||
|
||||
Controls.Add(contentHost);
|
||||
Controls.Add(menu);
|
||||
Controls.Add(bottomBar);
|
||||
Controls.Add(titlebar);
|
||||
return LicenseManager.UsageMode == LicenseUsageMode.Designtime;
|
||||
}
|
||||
|
||||
private void BuildTitlebar()
|
||||
private void InitializeDesignerLayout()
|
||||
{
|
||||
titlebar = new AntdUI.PageHeader
|
||||
{
|
||||
Dock = DockStyle.Top,
|
||||
Height = 44,
|
||||
DividerShow = true,
|
||||
ShowButton = true,
|
||||
ShowIcon = true,
|
||||
Text = "V免签PC客户端",
|
||||
SubText = "V0.0.1"
|
||||
};
|
||||
pageHome.Resize += (_, _) => LayoutHomePage();
|
||||
pageWechat.Resize += (_, _) => LayoutWechatPage();
|
||||
pageAlipay.Resize += (_, _) => LayoutAlipayPage();
|
||||
pageSettings.Resize += (_, _) => LayoutSettingsPage();
|
||||
|
||||
lblTopNotice = new AntdUI.Label
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
Text = "监听未启动",
|
||||
TextAlign = ContentAlignment.MiddleRight,
|
||||
ForeColor = Color.DimGray
|
||||
};
|
||||
pageHome.HorizontalScroll.Enabled = false;
|
||||
pageHome.HorizontalScroll.Visible = false;
|
||||
pageWechat.HorizontalScroll.Enabled = false;
|
||||
pageWechat.HorizontalScroll.Visible = false;
|
||||
pageAlipay.HorizontalScroll.Enabled = false;
|
||||
pageAlipay.HorizontalScroll.Visible = false;
|
||||
pageSettings.HorizontalScroll.Enabled = false;
|
||||
pageSettings.HorizontalScroll.Visible = false;
|
||||
|
||||
lblAlipayStatusValue = new AntdUI.Label
|
||||
{
|
||||
Dock = DockStyle.Right,
|
||||
Width = 120,
|
||||
Text = "支付宝: 离线",
|
||||
TextAlign = ContentAlignment.MiddleRight,
|
||||
ForeColor = Color.Red
|
||||
};
|
||||
LayoutHomePage();
|
||||
LayoutWechatPage();
|
||||
LayoutAlipayPage();
|
||||
LayoutSettingsPage();
|
||||
|
||||
lblWechatStatusValue = new AntdUI.Label
|
||||
{
|
||||
Dock = DockStyle.Right,
|
||||
Width = 120,
|
||||
Text = "微信: 离线",
|
||||
TextAlign = ContentAlignment.MiddleRight,
|
||||
ForeColor = Color.Red
|
||||
};
|
||||
|
||||
titlebar.Controls.Add(lblTopNotice);
|
||||
titlebar.Controls.Add(lblAlipayStatusValue);
|
||||
titlebar.Controls.Add(lblWechatStatusValue);
|
||||
if (IsInDesigner()) return;
|
||||
|
||||
EnableWindowDrag(titlebar);
|
||||
EnableWindowDrag(lblTopNotice);
|
||||
@ -205,61 +175,6 @@ namespace Vmianqian
|
||||
EnableWindowDrag(lblAlipayStatusValue);
|
||||
}
|
||||
|
||||
private void BuildBottomBar()
|
||||
{
|
||||
bottomBar = new AntdUI.PageHeader
|
||||
{
|
||||
Dock = DockStyle.Bottom,
|
||||
Height = 40,
|
||||
DividerShow = true,
|
||||
UseLeftMargin = false
|
||||
};
|
||||
|
||||
buttonCollapse = new AntdUI.Button
|
||||
{
|
||||
Dock = DockStyle.Left,
|
||||
Width = 50,
|
||||
Ghost = true,
|
||||
Radius = 0,
|
||||
WaveSize = 0,
|
||||
IconRatio = 0.6F,
|
||||
IconSvg = "MenuUnfoldOutlined",
|
||||
ToggleIconSvg = "MenuFoldOutlined",
|
||||
Toggle = true
|
||||
};
|
||||
buttonCollapse.Click += ButtonCollapse_Click;
|
||||
|
||||
lblRuntimeBottom = new WinLabel
|
||||
{
|
||||
Dock = DockStyle.Right,
|
||||
Width = 220,
|
||||
TextAlign = ContentAlignment.MiddleRight,
|
||||
ForeColor = Color.Gray,
|
||||
Text = "00天:00时:00分:00秒"
|
||||
};
|
||||
|
||||
bottomBar.Controls.Add(lblRuntimeBottom);
|
||||
bottomBar.Controls.Add(buttonCollapse);
|
||||
}
|
||||
|
||||
private void BuildMenu()
|
||||
{
|
||||
menu = new AntdUI.Menu
|
||||
{
|
||||
Dock = DockStyle.Left,
|
||||
Width = 220,
|
||||
Collapsed = false,
|
||||
Unique = true,
|
||||
IconRatio = 1F,
|
||||
Indent = true,
|
||||
Round = false,
|
||||
Radius = 0,
|
||||
Font = new Font("Microsoft YaHei UI", 9F)
|
||||
};
|
||||
menu.SelectChanged += Menu_SelectChanged;
|
||||
ReloadMenuItems();
|
||||
}
|
||||
|
||||
private void ReloadMenuItems()
|
||||
{
|
||||
menu.Items.Clear();
|
||||
@ -269,58 +184,10 @@ namespace Vmianqian
|
||||
menu.Items.Add(new AntdUI.MenuItem { Text = "软件设置", IconSvg = "SettingOutlined", Tag = "settings" });
|
||||
}
|
||||
|
||||
private void BuildContentHost()
|
||||
{
|
||||
contentHost = new WinPanel
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
BackColor = Color.White
|
||||
};
|
||||
|
||||
pageHome = CreatePagePanel();
|
||||
pageWechat = CreatePagePanel();
|
||||
pageAlipay = CreatePagePanel();
|
||||
pageSettings = CreatePagePanel();
|
||||
|
||||
contentHost.Controls.Add(pageSettings);
|
||||
contentHost.Controls.Add(pageAlipay);
|
||||
contentHost.Controls.Add(pageWechat);
|
||||
contentHost.Controls.Add(pageHome);
|
||||
|
||||
BuildHomePage();
|
||||
BuildWechatPage();
|
||||
BuildAlipayPage();
|
||||
BuildSettingsPage();
|
||||
|
||||
pageHome.Resize += (_, _) => LayoutHomePage();
|
||||
pageWechat.Resize += (_, _) => LayoutWechatPage();
|
||||
pageAlipay.Resize += (_, _) => LayoutAlipayPage();
|
||||
pageSettings.Resize += (_, _) => LayoutSettingsPage();
|
||||
|
||||
LayoutHomePage();
|
||||
LayoutWechatPage();
|
||||
LayoutAlipayPage();
|
||||
LayoutSettingsPage();
|
||||
}
|
||||
|
||||
private WinPanel CreatePagePanel()
|
||||
{
|
||||
var panel = new WinPanel
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
BackColor = Color.FromArgb(245, 247, 250),
|
||||
AutoScroll = true
|
||||
};
|
||||
panel.HorizontalScroll.Enabled = false;
|
||||
panel.HorizontalScroll.Visible = false;
|
||||
return panel;
|
||||
}
|
||||
|
||||
private void LayoutHomePage()
|
||||
{
|
||||
const int margin = 20;
|
||||
const int gap = 16;
|
||||
const int cardHeight = 420;
|
||||
var pageAvailableWidth = Math.Max(0, pageHome.ClientSize.Width - margin * 2);
|
||||
pageHome.SuspendLayout();
|
||||
|
||||
@ -356,13 +223,14 @@ namespace Vmianqian
|
||||
memberCard.SuspendLayout();
|
||||
|
||||
var availableWidth = Math.Max(0, pageAvailableWidth);
|
||||
var rowBottom = top + cardHeight;
|
||||
var rowWidth = Math.Max(0, availableWidth - gap);
|
||||
var leftWidth = rowWidth / 2;
|
||||
var rightWidth = rowWidth - leftWidth;
|
||||
var configHeight = 390;
|
||||
var memberHeight = 128;
|
||||
|
||||
configCard.Bounds = new Rectangle(margin, top, leftWidth, cardHeight);
|
||||
memberCard.Bounds = new Rectangle(margin + leftWidth + gap, top, rightWidth, cardHeight);
|
||||
configCard.Bounds = new Rectangle(margin, top, leftWidth, configHeight);
|
||||
memberCard.Bounds = new Rectangle(margin + leftWidth + gap, top, rightWidth, memberHeight);
|
||||
|
||||
const int contentLeft = 24;
|
||||
const int contentRight = 24;
|
||||
@ -371,25 +239,24 @@ namespace Vmianqian
|
||||
lblServerUrlTitle.Location = new Point(contentLeft, 20);
|
||||
txtServerUrl.Location = new Point(contentLeft, 48);
|
||||
txtServerUrl.Width = inputWidth;
|
||||
lblApiKeyTitle.Location = new Point(contentLeft, 94);
|
||||
txtApiKey.Location = new Point(contentLeft, 122);
|
||||
lblApiKeyTitle.Location = new Point(contentLeft, 118);
|
||||
txtApiKey.Location = new Point(contentLeft, 146);
|
||||
txtApiKey.Width = inputWidth;
|
||||
|
||||
const int actionTop = 252;
|
||||
const int actionTop = 236;
|
||||
const int buttonGap = 12;
|
||||
var actionButtonWidth = Math.Max(72, (contentWidth - buttonGap * 2) / 3);
|
||||
var actionButtonWidth = Math.Max(96, (contentWidth - buttonGap) / 2);
|
||||
btnSaveConfig.Location = new Point(24, actionTop);
|
||||
btnSaveConfig.Size = new Size(actionButtonWidth, 36);
|
||||
btnToggleService.Location = new Point(btnSaveConfig.Right + buttonGap, actionTop);
|
||||
btnToggleService.Size = new Size(actionButtonWidth, 36);
|
||||
btnHeartbeatCheck.Location = new Point(btnToggleService.Right + buttonGap, actionTop);
|
||||
btnHeartbeatCheck.Size = new Size(actionButtonWidth, 34);
|
||||
btnSaveConfig.Size = new Size(actionButtonWidth, 55);
|
||||
btnHeartbeatCheck.Location = new Point(btnSaveConfig.Right + buttonGap, actionTop);
|
||||
btnHeartbeatCheck.Size = new Size(actionButtonWidth, 55);
|
||||
|
||||
const int heartbeatTop = 300;
|
||||
const int heartbeatTop = 310;
|
||||
chkHeartbeatEnabled.Location = new Point(contentLeft, heartbeatTop - 4);
|
||||
lblHeartbeatDesc.Location = new Point(chkHeartbeatEnabled.Right + 4, heartbeatTop + 1);
|
||||
lblMemberPlaceholder.Size = new Size(Math.Max(220, memberCard.ClientSize.Width - 48), 52);
|
||||
|
||||
var rowBottom = Math.Max(configCard.Bottom, memberCard.Bottom);
|
||||
var logCardTop = rowBottom + margin;
|
||||
var homeLogCard = FindCard(pageHome, "home-log");
|
||||
if (homeLogCard != null)
|
||||
@ -417,7 +284,11 @@ namespace Vmianqian
|
||||
}
|
||||
if (btnClearLog != null)
|
||||
{
|
||||
btnClearLog.Location = new Point(Math.Max(24, logCard.ClientSize.Width - btnClearLog.Width - 24), 14);
|
||||
btnClearLog.Size = new Size(92, 36);
|
||||
btnClearLog.Location = new Point(
|
||||
Math.Max(24, logCard.ClientSize.Width - btnClearLog.Width - 24),
|
||||
14
|
||||
);
|
||||
}
|
||||
logCard.ResumeLayout(false);
|
||||
}
|
||||
@ -441,27 +312,30 @@ namespace Vmianqian
|
||||
var totalWidth = Math.Max(0, pageWechat.ClientSize.Width - margin * 2 - gap);
|
||||
var hookWidth = totalWidth / 2;
|
||||
var protocolWidth = totalWidth - hookWidth;
|
||||
hookCard.Bounds = new Rectangle(margin, 20, hookWidth, 240);
|
||||
protocolCard.Bounds = new Rectangle(hookCard.Right + gap, 20, protocolWidth, 240);
|
||||
hookCard.Bounds = new Rectangle(margin, 20, hookWidth, 280);
|
||||
protocolCard.Bounds = new Rectangle(hookCard.Right + gap, 20, protocolWidth, 280);
|
||||
|
||||
var hookPathWidth = Math.Max(140, hookCard.ClientSize.Width - 24 - 24 - btnSelectWechatPath.Width - 12);
|
||||
txtWechatPath.Width = hookPathWidth;
|
||||
btnSelectWechatPath.Size = new Size(92, 36);
|
||||
btnSelectWechatPath.Location = new Point(txtWechatPath.Left + txtWechatPath.Width + 12, txtWechatPath.Top);
|
||||
btnWechatHookStart.Size = new Size(120, 36);
|
||||
btnWechatHookStart.Location = new Point(24, hookCard.ClientSize.Height - btnWechatHookStart.Height - 16);
|
||||
btnWechatHookStart.Size = new Size(168, 42);
|
||||
btnWechatHookStart.Location = new Point(24, 182);
|
||||
|
||||
lblWechatSidTitle.Location = new Point(24, 54);
|
||||
btnWechatSidAuto.Size = new Size(92, 36);
|
||||
var sidWidth = Math.Max(180, protocolCard.ClientSize.Width - 48 - btnWechatSidAuto.Width - 12);
|
||||
txtWechatId.Width = sidWidth;
|
||||
btnWechatSidAuto.Location = new Point(txtWechatId.Left + txtWechatId.Width + 12, txtWechatId.Top);
|
||||
var halfWidth = Math.Max(160, (sidWidth - 12) / 2);
|
||||
var rightColX = 24 + halfWidth + 12;
|
||||
lblWechatFrequencyTitle.Location = new Point(24, 122);
|
||||
numWechatInterval.Location = new Point(24, 150);
|
||||
lblWechatPollingTitle.Location = new Point(rightColX, 122);
|
||||
chkWheel.Location = new Point(rightColX, 150);
|
||||
btnWechatProtocolStart.Size = new Size(120, 36);
|
||||
btnWechatProtocolStart.Location = new Point(24, protocolCard.ClientSize.Height - btnWechatProtocolStart.Height - 16);
|
||||
lblWechatFrequencyTitle.Location = new Point(24, 146);
|
||||
numWechatInterval.Location = new Point(24, 182);
|
||||
numWechatInterval.Size = new Size(96, 30);
|
||||
lblWechatPollingTitle.Location = new Point(rightColX, 146);
|
||||
chkWheel.Location = new Point(rightColX, 198);
|
||||
btnWechatProtocolStart.Size = new Size(120, 42);
|
||||
btnWechatProtocolStart.Location = new Point(24, btnWechatHookStart.Bottom - btnWechatProtocolStart.Height);
|
||||
}
|
||||
|
||||
if (gridCard != null && hookCard != null)
|
||||
@ -479,6 +353,7 @@ namespace Vmianqian
|
||||
|
||||
if (btnClearWechatLog != null)
|
||||
{
|
||||
btnClearWechatLog.Size = new Size(92, 36);
|
||||
btnClearWechatLog.Location = new Point(Math.Max(24, gridCard.ClientSize.Width - btnClearWechatLog.Width - 24), 14);
|
||||
}
|
||||
}
|
||||
@ -493,6 +368,7 @@ namespace Vmianqian
|
||||
{
|
||||
var bottom = pageAlipay.ClientSize.Height - 20;
|
||||
gridCard.Height = Math.Max(260, bottom - gridCard.Top);
|
||||
numAlipayInterval.Size = new Size(96, 30);
|
||||
|
||||
if (gridAlipayLogs != null)
|
||||
{
|
||||
@ -529,6 +405,8 @@ namespace Vmianqian
|
||||
lblEmailAuthCodeTitle.Location = new Point(authCodeLeft, 278);
|
||||
txtEmailAuthCode.Location = new Point(authCodeLeft, 306);
|
||||
txtEmailAuthCode.Width = authCodeWidth;
|
||||
btnEmailSave.Size = new Size(110, 42);
|
||||
btnEmailTest.Size = new Size(110, 42);
|
||||
btnEmailSave.Location = new Point(24, 350);
|
||||
btnEmailTest.Location = new Point(btnEmailSave.Right + 12, 350);
|
||||
}
|
||||
@ -557,395 +435,6 @@ namespace Vmianqian
|
||||
return null;
|
||||
}
|
||||
|
||||
private void BuildHomePage()
|
||||
{
|
||||
var summaryCard = CreateCardPanel(new Rectangle(20, 20, 1080, 120));
|
||||
summaryCard.Tag = "home-summary";
|
||||
|
||||
lblSummaryTitle = new AntdUI.Label
|
||||
{
|
||||
Text = "欢迎使用 V免签 PC 监听客户端",
|
||||
Font = new Font("Microsoft YaHei UI", 22F, FontStyle.Regular),
|
||||
AutoSize = true,
|
||||
Location = new Point(28, 24)
|
||||
};
|
||||
|
||||
lblSummaryDesc = new AntdUI.Label
|
||||
{
|
||||
Text = "当前阶段先打通“PC端本地监听 -> V免签服务端回调 -> 心跳检测”链路,整体布局按 AntdUI Demo 风格复刻。",
|
||||
AutoSize = false,
|
||||
Location = new Point(70, 64),
|
||||
ForeColor = Color.DimGray
|
||||
};
|
||||
|
||||
summaryCard.Controls.Add(lblSummaryTitle);
|
||||
summaryCard.Controls.Add(lblSummaryDesc);
|
||||
|
||||
var configCard = CreateCardPanel(new Rectangle(20, 160, 1080, 360));
|
||||
configCard.Tag = "home-config";
|
||||
|
||||
lblServerUrlTitle = CreateTitleLabel("V免签地址", 24, 20);
|
||||
configCard.Controls.Add(lblServerUrlTitle);
|
||||
txtServerUrl = CreateInput(24, 48, 500, "例如:https://你的域名/");
|
||||
configCard.Controls.Add(txtServerUrl);
|
||||
|
||||
lblApiKeyTitle = CreateTitleLabel("通信密钥 / Token", 24, 94);
|
||||
configCard.Controls.Add(lblApiKeyTitle);
|
||||
txtApiKey = CreateInput(24, 122, 500, "请输入与服务端密钥");
|
||||
configCard.Controls.Add(txtApiKey);
|
||||
|
||||
btnSaveConfig = new AntdUI.Button
|
||||
{
|
||||
Text = "保存配置",
|
||||
Type = TTypeMini.Primary,
|
||||
Location = new Point(24, 252),
|
||||
Size = new Size(110, 36),
|
||||
};
|
||||
btnSaveConfig.Click += btnSaveConfig_Click;
|
||||
|
||||
btnToggleService = new AntdUI.Button
|
||||
{
|
||||
Text = "启动监听",
|
||||
Type = TTypeMini.Primary,
|
||||
Location = new Point(146, 292),
|
||||
Size = new Size(110, 36),
|
||||
};
|
||||
btnToggleService.Click += btnToggleService_Click;
|
||||
|
||||
configCard.Controls.Add(btnSaveConfig);
|
||||
configCard.Controls.Add(btnToggleService);
|
||||
|
||||
chkHeartbeatEnabled = new AntdUI.Switch
|
||||
{
|
||||
Location = new Point(24, 296),
|
||||
Size = new Size(62, 28),
|
||||
AutoSize = false
|
||||
};
|
||||
chkHeartbeatEnabled.CheckedChanged += chkHeartbeatEnabled_CheckedChanged;
|
||||
|
||||
lblHeartbeatDesc = new AntdUI.Label
|
||||
{
|
||||
Text = "自动心跳",
|
||||
AutoSize = true,
|
||||
Location = new Point(90, 301),
|
||||
ForeColor = Color.DimGray
|
||||
};
|
||||
|
||||
btnHeartbeatCheck = new AntdUI.Button
|
||||
{
|
||||
Text = "心跳检测",
|
||||
Type = TTypeMini.Primary,
|
||||
Location = new Point(268, 292),
|
||||
Size = new Size(110, 34)
|
||||
};
|
||||
btnHeartbeatCheck.Click += btnHeartbeatCheck_Click;
|
||||
|
||||
configCard.Controls.Add(chkHeartbeatEnabled);
|
||||
configCard.Controls.Add(lblHeartbeatDesc);
|
||||
configCard.Controls.Add(btnHeartbeatCheck);
|
||||
|
||||
var memberCard = CreateCardPanel(new Rectangle(660, 160, 440, 360));
|
||||
memberCard.Tag = "home-member";
|
||||
memberCard.Controls.Add(CreateTitleLabel("会员登录绑定", 24, 20));
|
||||
lblMemberPlaceholder = new AntdUI.Label
|
||||
{
|
||||
Text = "预留区域:后续用于会员登录、设备绑定、解绑与状态展示。",
|
||||
AutoSize = false,
|
||||
Location = new Point(24, 56),
|
||||
Size = new Size(392, 52),
|
||||
ForeColor = Color.DimGray
|
||||
};
|
||||
memberCard.Controls.Add(lblMemberPlaceholder);
|
||||
|
||||
var logCard = CreateCardPanel(new Rectangle(20, 500, 1080, 300));
|
||||
logCard.Tag = "home-log";
|
||||
|
||||
logCard.Controls.Add(CreateTitleLabel("运行日志", 24, 18));
|
||||
btnClearLog = new AntdUI.Button
|
||||
{
|
||||
Text = "清空",
|
||||
Type = TTypeMini.Primary,
|
||||
Ghost = true,
|
||||
Location = new Point(980, 14),
|
||||
Size = new Size(72, 30),
|
||||
Anchor = AnchorStyles.Top | AnchorStyles.Right
|
||||
};
|
||||
btnClearLog.Click += (_, _) => txtLog.Clear();
|
||||
logCard.Controls.Add(btnClearLog);
|
||||
|
||||
txtLog = new WinTextBox
|
||||
{
|
||||
Location = new Point(24, 50),
|
||||
Size = new Size(1030, 224),
|
||||
Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right,
|
||||
Multiline = true,
|
||||
ScrollBars = ScrollBars.Vertical,
|
||||
ReadOnly = true,
|
||||
BackColor = Color.Black,
|
||||
ForeColor = Color.Lime,
|
||||
BorderStyle = BorderStyle.FixedSingle
|
||||
};
|
||||
logCard.Controls.Add(txtLog);
|
||||
|
||||
pageHome.Controls.Add(summaryCard);
|
||||
pageHome.Controls.Add(configCard);
|
||||
pageHome.Controls.Add(memberCard);
|
||||
pageHome.Controls.Add(logCard);
|
||||
}
|
||||
|
||||
private void BuildWechatPage()
|
||||
{
|
||||
var hookCard = CreateCardPanel(new Rectangle(20, 20, 532, 240));
|
||||
hookCard.Tag = "wechat-hook";
|
||||
hookCard.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
hookCard.Controls.Add(CreateTitleLabel("Hook 功能", 24, 18));
|
||||
hookCard.Controls.Add(CreateTitleLabel("微信安装路径", 24, 54));
|
||||
txtWechatPath = CreateInput(24, 48, 390, "微信.exe 路径");
|
||||
txtWechatPath.Location = new Point(24, 82);
|
||||
txtWechatPath.Width = 280;
|
||||
hookCard.Controls.Add(txtWechatPath);
|
||||
btnSelectWechatPath = new AntdUI.Button
|
||||
{
|
||||
Text = "选择路径",
|
||||
Type = TTypeMini.Primary,
|
||||
Ghost = true,
|
||||
Location = new Point(316, 82),
|
||||
Size = new Size(92, 36)
|
||||
};
|
||||
btnSelectWechatPath.Click += btnSelectWechatPath_Click;
|
||||
hookCard.Controls.Add(btnSelectWechatPath);
|
||||
btnWechatHookStart = new AntdUI.Button
|
||||
{
|
||||
Text = "开始监听",
|
||||
Type = TTypeMini.Primary,
|
||||
Location = new Point(24, 128),
|
||||
Size = new Size(120, 36)
|
||||
};
|
||||
btnWechatHookStart.Click += btnWechatHookStart_Click;
|
||||
hookCard.Controls.Add(btnWechatHookStart);
|
||||
|
||||
var protocolCard = CreateCardPanel(new Rectangle(568, 20, 532, 240));
|
||||
protocolCard.Tag = "wechat-protocol";
|
||||
protocolCard.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
protocolCard.Controls.Add(CreateTitleLabel("协议功能", 24, 18));
|
||||
|
||||
lblWechatSidTitle = CreateTitleLabel("微信 SID", 24, 54);
|
||||
protocolCard.Controls.Add(lblWechatSidTitle);
|
||||
txtWechatId = CreateInput(24, 82, 356, "可选");
|
||||
protocolCard.Controls.Add(txtWechatId);
|
||||
btnWechatSidAuto = new AntdUI.Button
|
||||
{
|
||||
Text = "自动获取",
|
||||
Type = TTypeMini.Primary,
|
||||
Ghost = true,
|
||||
Location = new Point(392, 82),
|
||||
Size = new Size(92, 36)
|
||||
};
|
||||
btnWechatSidAuto.Click += btnWechatSidAuto_Click;
|
||||
protocolCard.Controls.Add(btnWechatSidAuto);
|
||||
|
||||
lblWechatFrequencyTitle = CreateTitleLabel("监控频率(秒)", 24, 122);
|
||||
protocolCard.Controls.Add(lblWechatFrequencyTitle);
|
||||
numWechatInterval = new NumericUpDown
|
||||
{
|
||||
Location = new Point(24, 150),
|
||||
Size = new Size(96, 23),
|
||||
Minimum = 1,
|
||||
Maximum = 3600,
|
||||
Value = 5
|
||||
};
|
||||
protocolCard.Controls.Add(numWechatInterval);
|
||||
|
||||
lblWechatPollingTitle = CreateTitleLabel("接口轮询", 274, 122);
|
||||
protocolCard.Controls.Add(lblWechatPollingTitle);
|
||||
chkWheel = new AntdUI.Checkbox
|
||||
{
|
||||
Text = "接口轮询",
|
||||
Location = new Point(274, 150),
|
||||
AutoSize = true
|
||||
};
|
||||
protocolCard.Controls.Add(chkWheel);
|
||||
btnWechatProtocolStart = new AntdUI.Button
|
||||
{
|
||||
Text = "开始监听",
|
||||
Type = TTypeMini.Primary,
|
||||
Location = new Point(24, 196),
|
||||
Size = new Size(120, 36)
|
||||
};
|
||||
btnWechatProtocolStart.Click += btnWechatProtocolStart_Click;
|
||||
protocolCard.Controls.Add(btnWechatProtocolStart);
|
||||
|
||||
var gridCard = CreateCardPanel(new Rectangle(20, 280, 1080, 450));
|
||||
gridCard.Tag = "wechat-log";
|
||||
gridCard.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
||||
gridCard.Controls.Add(CreateTitleLabel("微信监听记录", 24, 18));
|
||||
btnClearWechatLog = new AntdUI.Button
|
||||
{
|
||||
Text = "清空",
|
||||
Type = TTypeMini.Primary,
|
||||
Ghost = true,
|
||||
Location = new Point(980, 14),
|
||||
Size = new Size(72, 30),
|
||||
Anchor = AnchorStyles.Top | AnchorStyles.Right
|
||||
};
|
||||
btnClearWechatLog.Click += (_, _) => gridWechatLogs.Rows.Clear();
|
||||
gridCard.Controls.Add(btnClearWechatLog);
|
||||
|
||||
gridWechatLogs = CreateWechatGrid();
|
||||
gridWechatLogs.Location = new Point(24, 50);
|
||||
gridWechatLogs.Size = new Size(1030, 464);
|
||||
gridWechatLogs.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
||||
gridCard.Controls.Add(gridWechatLogs);
|
||||
|
||||
pageWechat.Controls.Add(hookCard);
|
||||
pageWechat.Controls.Add(protocolCard);
|
||||
pageWechat.Controls.Add(gridCard);
|
||||
UpdateWechatMonitorButtons();
|
||||
}
|
||||
|
||||
private void BuildAlipayPage()
|
||||
{
|
||||
var card = CreateCardPanel(new Rectangle(20, 20, 1080, 150));
|
||||
card.Tag = "alipay-config";
|
||||
card.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
|
||||
card.Controls.Add(CreateTitleLabel("旺旺/支付宝路径", 24, 20));
|
||||
txtAliPath = CreateInput(24, 48, 300, "程序路径");
|
||||
card.Controls.Add(txtAliPath);
|
||||
|
||||
card.Controls.Add(CreateTitleLabel("应用 ID", 350, 20));
|
||||
txtAliAppId = CreateInput(350, 48, 170, "AppId");
|
||||
card.Controls.Add(txtAliAppId);
|
||||
|
||||
card.Controls.Add(CreateTitleLabel("用户 ID", 550, 20));
|
||||
txtAliPid = CreateInput(550, 48, 170, "Pid/UserId");
|
||||
card.Controls.Add(txtAliPid);
|
||||
|
||||
card.Controls.Add(CreateTitleLabel("轮询频率(秒)", 750, 20));
|
||||
numAlipayInterval = new NumericUpDown
|
||||
{
|
||||
Location = new Point(750, 51),
|
||||
Size = new Size(96, 23),
|
||||
Minimum = 1,
|
||||
Maximum = 3600,
|
||||
Value = 5
|
||||
};
|
||||
card.Controls.Add(numAlipayInterval);
|
||||
|
||||
var desc = new AntdUI.Label
|
||||
{
|
||||
Text = "后续这里接入支付宝真实到账监听逻辑,目前保留参数配置与回调结果展示。",
|
||||
AutoSize = false,
|
||||
Location = new Point(24, 102),
|
||||
Size = new Size(960, 24),
|
||||
ForeColor = Color.DimGray
|
||||
};
|
||||
card.Controls.Add(desc);
|
||||
|
||||
var gridCard = CreateCardPanel(new Rectangle(20, 190, 1080, 540));
|
||||
gridCard.Tag = "alipay-log";
|
||||
gridCard.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
||||
gridCard.Controls.Add(CreateTitleLabel("支付宝监听记录", 24, 18));
|
||||
|
||||
gridAlipayLogs = CreateAlipayGrid();
|
||||
gridAlipayLogs.Location = new Point(24, 50);
|
||||
gridAlipayLogs.Size = new Size(1030, 464);
|
||||
gridAlipayLogs.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
||||
gridCard.Controls.Add(gridAlipayLogs);
|
||||
|
||||
pageAlipay.Controls.Add(card);
|
||||
pageAlipay.Controls.Add(gridCard);
|
||||
}
|
||||
|
||||
private void BuildSettingsPage()
|
||||
{
|
||||
var listenCard = CreateCardPanel(new Rectangle(20, 20, 1080, 200));
|
||||
listenCard.Tag = "settings-listen";
|
||||
listenCard.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
|
||||
listenCard.Controls.Add(CreateTitleLabel("本地监听端口", 24, 20));
|
||||
txtServicePort = CreateInput(24, 48, 180, "8989");
|
||||
listenCard.Controls.Add(txtServicePort);
|
||||
|
||||
listenCard.Controls.Add(CreateTitleLabel("本地监听路径", 240, 20));
|
||||
txtListenPath = CreateInput(240, 48, 240, "/notify/");
|
||||
listenCard.Controls.Add(txtListenPath);
|
||||
|
||||
var info = new AntdUI.Label
|
||||
{
|
||||
Text = "这个页面用于维护本地监听、邮箱通知与项目说明。",
|
||||
AutoSize = false,
|
||||
Location = new Point(24, 108),
|
||||
Size = new Size(920, 60),
|
||||
ForeColor = Color.DimGray
|
||||
};
|
||||
listenCard.Controls.Add(info);
|
||||
|
||||
var emailCard = CreateCardPanel(new Rectangle(20, 236, 1080, 420));
|
||||
emailCard.Tag = "settings-email";
|
||||
emailCard.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
|
||||
emailCard.Controls.Add(CreateTitleLabel("邮箱通知配置", 24, 20));
|
||||
lblSenderEmailTitle = CreateTitleLabel("发送邮箱", 24, 56);
|
||||
emailCard.Controls.Add(lblSenderEmailTitle);
|
||||
txtSenderEmail = CreateInput(24, 84, 500, "例如:yunzer_cn@163.com");
|
||||
emailCard.Controls.Add(txtSenderEmail);
|
||||
|
||||
lblSmtpHostTitle = CreateTitleLabel("SMTP 主机", 24, 130);
|
||||
emailCard.Controls.Add(lblSmtpHostTitle);
|
||||
txtSmtpHost = CreateInput(24, 158, 500, "例如:smtp.163.com");
|
||||
emailCard.Controls.Add(txtSmtpHost);
|
||||
|
||||
lblSmtpPortTitle = CreateTitleLabel("SMTP 端口", 24, 204);
|
||||
emailCard.Controls.Add(lblSmtpPortTitle);
|
||||
txtSmtpPort = CreateInput(24, 232, 220, "例如:465");
|
||||
emailCard.Controls.Add(txtSmtpPort);
|
||||
|
||||
lblNotifyEmailTitle = CreateTitleLabel("通知邮箱", 24, 278);
|
||||
emailCard.Controls.Add(lblNotifyEmailTitle);
|
||||
txtNotifyEmail = CreateInput(24, 306, 500, "用于接收测试邮件");
|
||||
emailCard.Controls.Add(txtNotifyEmail);
|
||||
|
||||
lblEmailAuthCodeTitle = CreateTitleLabel("授权码", 560, 278);
|
||||
emailCard.Controls.Add(lblEmailAuthCodeTitle);
|
||||
txtEmailAuthCode = CreateInput(560, 306, 320, "用于发送测试邮件");
|
||||
emailCard.Controls.Add(txtEmailAuthCode);
|
||||
|
||||
btnEmailSave = new AntdUI.Button
|
||||
{
|
||||
Text = "保存配置",
|
||||
Type = TTypeMini.Primary,
|
||||
Location = new Point(24, 350),
|
||||
Size = new Size(110, 36)
|
||||
};
|
||||
btnEmailSave.Click += btnEmailSave_Click;
|
||||
emailCard.Controls.Add(btnEmailSave);
|
||||
|
||||
btnEmailTest = new AntdUI.Button
|
||||
{
|
||||
Text = "邮箱测试",
|
||||
Type = TTypeMini.Primary,
|
||||
Ghost = true,
|
||||
Location = new Point(146, 350),
|
||||
Size = new Size(110, 36)
|
||||
};
|
||||
btnEmailTest.Click += btnEmailTest_Click;
|
||||
emailCard.Controls.Add(btnEmailTest);
|
||||
|
||||
pageSettings.Controls.Add(listenCard);
|
||||
pageSettings.Controls.Add(emailCard);
|
||||
}
|
||||
|
||||
private WinPanel CreateCardPanel(Rectangle bounds)
|
||||
{
|
||||
return new WinPanel
|
||||
{
|
||||
Bounds = bounds,
|
||||
BackColor = Color.White,
|
||||
BorderStyle = BorderStyle.None
|
||||
};
|
||||
}
|
||||
|
||||
private AntdUI.Label CreateTitleLabel(string text, int x, int y)
|
||||
{
|
||||
return new AntdUI.Label
|
||||
@ -961,7 +450,7 @@ namespace Vmianqian
|
||||
return new AntdUI.Input
|
||||
{
|
||||
Location = new Point(x, y),
|
||||
Size = new Size(width, 36),
|
||||
Size = new Size(width, 55),
|
||||
PlaceholderText = placeholder
|
||||
};
|
||||
}
|
||||
@ -1271,6 +760,16 @@ namespace Vmianqian
|
||||
Log($"微信安装路径已保存:{dialog.FileName}");
|
||||
}
|
||||
|
||||
private void btnClearLog_Click(object? sender, EventArgs e)
|
||||
{
|
||||
txtLog.Clear();
|
||||
}
|
||||
|
||||
private void btnClearWechatLog_Click(object? sender, EventArgs e)
|
||||
{
|
||||
gridWechatLogs.Rows.Clear();
|
||||
}
|
||||
|
||||
private async void btnWechatSidAuto_Click(object? sender, EventArgs e)
|
||||
{
|
||||
if (_wechatSidCaptureCts != null)
|
||||
@ -1292,11 +791,39 @@ namespace Vmianqian
|
||||
}
|
||||
}
|
||||
|
||||
private void LaunchWechatForSidCapture()
|
||||
{
|
||||
var path = txtWechatPath?.Text?.Trim() ?? string.Empty;
|
||||
if (string.IsNullOrWhiteSpace(path) || !File.Exists(path))
|
||||
{
|
||||
throw new InvalidOperationException("请先选择正确的微信程序路径(WeChat.exe/Weixin.exe/WeChatAppEx.exe)。");
|
||||
}
|
||||
|
||||
var processName = Path.GetFileNameWithoutExtension(path);
|
||||
var alreadyRunning = !string.IsNullOrWhiteSpace(processName) && Process.GetProcessesByName(processName).Length > 0;
|
||||
if (alreadyRunning)
|
||||
{
|
||||
Log($"检测到微信已运行:{processName},开始直接捕获 SID。");
|
||||
return;
|
||||
}
|
||||
|
||||
var startInfo = new ProcessStartInfo
|
||||
{
|
||||
FileName = path,
|
||||
WorkingDirectory = Path.GetDirectoryName(path) ?? AppContext.BaseDirectory,
|
||||
UseShellExecute = true
|
||||
};
|
||||
|
||||
Process.Start(startInfo);
|
||||
Log($"已启动微信:{path}");
|
||||
}
|
||||
|
||||
private void StartWechatSidCapture()
|
||||
{
|
||||
StopWechatSidCapture();
|
||||
_wechatSidCaptureCts = new CancellationTokenSource();
|
||||
var token = _wechatSidCaptureCts.Token;
|
||||
UpdateWechatMonitorButtons();
|
||||
btnWechatSidAuto.Text = "停止捕获";
|
||||
btnWechatSidAuto.Type = TTypeMini.Error;
|
||||
btnWechatSidAuto.Loading = true;
|
||||
@ -1307,12 +834,6 @@ namespace Vmianqian
|
||||
{
|
||||
try
|
||||
{
|
||||
if (TryExtractSidFromClipboard(out var clipSid, out var clipVersion))
|
||||
{
|
||||
BeginInvoke(() => ApplyCapturedSid(clipSid, clipVersion, "剪贴板"));
|
||||
return;
|
||||
}
|
||||
|
||||
var result = TryExtractSidFromWechatLocalFiles();
|
||||
if (!string.IsNullOrWhiteSpace(result.Sid))
|
||||
{
|
||||
@ -1340,6 +861,7 @@ namespace Vmianqian
|
||||
try { _wechatSidCaptureCts?.Cancel(); } catch { }
|
||||
try { _wechatSidCaptureCts?.Dispose(); } catch { }
|
||||
_wechatSidCaptureCts = null;
|
||||
UpdateWechatMonitorButtons();
|
||||
|
||||
if (btnWechatSidAuto != null)
|
||||
{
|
||||
@ -1363,13 +885,11 @@ namespace Vmianqian
|
||||
|
||||
private void btnWechatHookStart_Click(object? sender, EventArgs e)
|
||||
{
|
||||
if (string.Equals(_wechatMonitorMode, "hook", StringComparison.Ordinal))
|
||||
if (_wechatSidCaptureCts != null)
|
||||
{
|
||||
StopWechatHook();
|
||||
_wechatMonitorMode = string.Empty;
|
||||
StopWechatSidCapture();
|
||||
UpdateWechatMonitorButtons();
|
||||
UpdateWechatStatusUi();
|
||||
Log("Hook 监听已停止。");
|
||||
Log("SID 获取已停止。");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1377,25 +897,14 @@ namespace Vmianqian
|
||||
{
|
||||
SaveUiToConfig();
|
||||
SaveConfig();
|
||||
if (!string.IsNullOrWhiteSpace(_wechatMonitorMode))
|
||||
{
|
||||
StopWechatMonitoring();
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(txtWechatPath?.Text) || !File.Exists(txtWechatPath.Text.Trim()))
|
||||
{
|
||||
throw new InvalidOperationException("请先选择正确的微信程序路径(WeChat.exe/Weixin.exe/WeChatAppEx.exe)。");
|
||||
}
|
||||
|
||||
StartWechatHook();
|
||||
_wechatMonitorMode = "hook";
|
||||
LaunchWechatForSidCapture();
|
||||
Log("SID 捕获已启动:请等待微信打开,并进入微信收款助手/收款小账本页面。");
|
||||
StartWechatSidCapture();
|
||||
UpdateWechatMonitorButtons();
|
||||
UpdateWechatStatusUi();
|
||||
Log("Hook 监听已启动(将用于监听微信通知/收款小账本)。");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log($"Hook 监听启动失败:{ex.Message}");
|
||||
Log($"启动微信并获取 SID 失败:{ex.Message}");
|
||||
MessageBox.Show(ex.Message, "启动失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
}
|
||||
@ -1446,12 +955,12 @@ namespace Vmianqian
|
||||
return;
|
||||
}
|
||||
|
||||
var hookActive = string.Equals(_wechatMonitorMode, "hook", StringComparison.Ordinal);
|
||||
var sidCaptureActive = _wechatSidCaptureCts != null;
|
||||
var protocolActive = string.Equals(_wechatMonitorMode, "protocol", StringComparison.Ordinal);
|
||||
|
||||
btnWechatHookStart.Text = hookActive ? "停止监听" : "开始监听";
|
||||
btnWechatHookStart.Type = hookActive ? TTypeMini.Error : TTypeMini.Primary;
|
||||
btnWechatProtocolStart.Text = protocolActive ? "停止监听" : "开始监听";
|
||||
btnWechatHookStart.Text = sidCaptureActive ? "停止获取SID" : "1. 启动微信";
|
||||
btnWechatHookStart.Type = sidCaptureActive ? TTypeMini.Error : TTypeMini.Primary;
|
||||
btnWechatProtocolStart.Text = protocolActive ? "停止监听" : "2. 开始监听";
|
||||
btnWechatProtocolStart.Type = protocolActive ? TTypeMini.Error : TTypeMini.Primary;
|
||||
}
|
||||
|
||||
@ -3060,26 +2569,6 @@ namespace Vmianqian
|
||||
};
|
||||
}
|
||||
|
||||
private static bool TryExtractSidFromClipboard(out string sid, out string version)
|
||||
{
|
||||
sid = string.Empty;
|
||||
version = string.Empty;
|
||||
try
|
||||
{
|
||||
if (!Clipboard.ContainsText())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var text = Clipboard.GetText();
|
||||
return TryExtractSidFromText(text, out sid, out version);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static (string Sid, string Version, string Source) TryExtractSidFromWechatLocalFiles()
|
||||
{
|
||||
foreach (var root in GetWechatDataRoots())
|
||||
|
||||
@ -5,6 +5,7 @@
|
||||
<TargetFramework>net10.0-windows</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<UseWindowsForms>true</UseWindowsForms>
|
||||
<UseWPF>true</UseWPF>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<GitRepositoryConfigurationScope>local</GitRepositoryConfigurationScope>
|
||||
</PropertyGroup>
|
||||
@ -14,15 +15,6 @@
|
||||
<PackageReference Include="MailKit" Version="4.16.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="UIAutomationClient">
|
||||
<HintPath>C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\10.0.5\UIAutomationClient.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UIAutomationTypes">
|
||||
<HintPath>C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\10.0.5\UIAutomationTypes.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Remove="antdui-demo\**\*.cs" />
|
||||
<EmbeddedResource Remove="antdui-demo\**\*" />
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -7,7 +7,7 @@
|
||||
"NotifyEmail": "1066960883@qq.com",
|
||||
"EmailAuthCode": "TPPMKSMvCadyzu3m",
|
||||
"WechatPath": "D:\\Softwares\\Tencent\\Weixin\\Weixin.exe",
|
||||
"WechatSid": "AAHRxMH-4RkRMiXVf7NSJGhBKBwThd_tfDct27hXjkv0Ag",
|
||||
"WechatSid": "",
|
||||
"WechatApiVersion": "7.10.1",
|
||||
"AlipayPath": "",
|
||||
"AlipayAppId": "",
|
||||
|
||||
BIN
build-temp/AntdUI.dll
Normal file
BIN
build-temp/AntdUI.dll
Normal file
Binary file not shown.
BIN
build-temp/BouncyCastle.Cryptography.dll
Normal file
BIN
build-temp/BouncyCastle.Cryptography.dll
Normal file
Binary file not shown.
BIN
build-temp/MailKit.dll
Normal file
BIN
build-temp/MailKit.dll
Normal file
Binary file not shown.
BIN
build-temp/MimeKit.dll
Normal file
BIN
build-temp/MimeKit.dll
Normal file
Binary file not shown.
93
build-temp/Vmianqian.deps.json
Normal file
93
build-temp/Vmianqian.deps.json
Normal file
@ -0,0 +1,93 @@
|
||||
{
|
||||
"runtimeTarget": {
|
||||
"name": ".NETCoreApp,Version=v10.0",
|
||||
"signature": ""
|
||||
},
|
||||
"compilationOptions": {},
|
||||
"targets": {
|
||||
".NETCoreApp,Version=v10.0": {
|
||||
"Vmianqian/1.0.0": {
|
||||
"dependencies": {
|
||||
"AntdUI": "2.3.10",
|
||||
"MailKit": "4.16.0"
|
||||
},
|
||||
"runtime": {
|
||||
"Vmianqian.dll": {}
|
||||
}
|
||||
},
|
||||
"AntdUI/2.3.10": {
|
||||
"runtime": {
|
||||
"lib/net10.0-windows7.0/AntdUI.dll": {
|
||||
"assemblyVersion": "2.3.10.0",
|
||||
"fileVersion": "2.3.10.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"BouncyCastle.Cryptography/2.6.2": {
|
||||
"runtime": {
|
||||
"lib/net6.0/BouncyCastle.Cryptography.dll": {
|
||||
"assemblyVersion": "2.0.0.0",
|
||||
"fileVersion": "2.6.2.46322"
|
||||
}
|
||||
}
|
||||
},
|
||||
"MailKit/4.16.0": {
|
||||
"dependencies": {
|
||||
"MimeKit": "4.16.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net10.0/MailKit.dll": {
|
||||
"assemblyVersion": "4.16.0.0",
|
||||
"fileVersion": "4.16.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"MimeKit/4.16.0": {
|
||||
"dependencies": {
|
||||
"BouncyCastle.Cryptography": "2.6.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net10.0/MimeKit.dll": {
|
||||
"assemblyVersion": "4.16.0.0",
|
||||
"fileVersion": "4.16.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"Vmianqian/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"AntdUI/2.3.10": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-twjNYhVIw08ydcQsBC5c7/59WBXVqba4kulN48ejxUz2i37xJU6ukYqUtxEFhiQtVzmu8cmGYAjZ4HM6BOKZwg==",
|
||||
"path": "antdui/2.3.10",
|
||||
"hashPath": "antdui.2.3.10.nupkg.sha512"
|
||||
},
|
||||
"BouncyCastle.Cryptography/2.6.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-7oWOcvnntmMKNzDLsdxAYqApt+AjpRpP2CShjMfIa3umZ42UQMvH0tl1qAliYPNYO6vTdcGMqnRrCPmsfzTI1w==",
|
||||
"path": "bouncycastle.cryptography/2.6.2",
|
||||
"hashPath": "bouncycastle.cryptography.2.6.2.nupkg.sha512"
|
||||
},
|
||||
"MailKit/4.16.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-trJ82DOpAmo8i1jO1vNE+dGn4mPRyeYfy4swRcAGgMJhPoI1Kohf4OFJJf0+YIj4iUxgxPn8W+ht7e7KiYzSjg==",
|
||||
"path": "mailkit/4.16.0",
|
||||
"hashPath": "mailkit.4.16.0.nupkg.sha512"
|
||||
},
|
||||
"MimeKit/4.16.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-X0LFxeM4gPRIhODyY/HYS9b+zRZ7y//v59rFzgS6wLxcPuZThnMtNZHtrr0fjLyRRkg3gqJBtvW36XfUzZ7Djw==",
|
||||
"path": "mimekit/4.16.0",
|
||||
"hashPath": "mimekit.4.16.0.nupkg.sha512"
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
build-temp/Vmianqian.dll
Normal file
BIN
build-temp/Vmianqian.dll
Normal file
Binary file not shown.
BIN
build-temp/Vmianqian.exe
Normal file
BIN
build-temp/Vmianqian.exe
Normal file
Binary file not shown.
BIN
build-temp/Vmianqian.pdb
Normal file
BIN
build-temp/Vmianqian.pdb
Normal file
Binary file not shown.
19
build-temp/Vmianqian.runtimeconfig.json
Normal file
19
build-temp/Vmianqian.runtimeconfig.json
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"runtimeOptions": {
|
||||
"tfm": "net10.0",
|
||||
"frameworks": [
|
||||
{
|
||||
"name": "Microsoft.NETCore.App",
|
||||
"version": "10.0.0"
|
||||
},
|
||||
{
|
||||
"name": "Microsoft.WindowsDesktop.App",
|
||||
"version": "10.0.0"
|
||||
}
|
||||
],
|
||||
"configProperties": {
|
||||
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false,
|
||||
"CSWINRT_USE_WINDOWS_UI_XAML_PROJECTIONS": false
|
||||
}
|
||||
}
|
||||
}
|
||||
13
dotnet-tools.json
Normal file
13
dotnet-tools.json
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
"version": 1,
|
||||
"isRoot": true,
|
||||
"tools": {
|
||||
"csharpier": {
|
||||
"version": "1.2.6",
|
||||
"commands": [
|
||||
"csharpier"
|
||||
],
|
||||
"rollForward": false
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,9 +1,10 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// 此代码由工具生成。
|
||||
// 运行时版本:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// 对此文件的更改可能会导致不正确的行为,并且如果
|
||||
// 重新生成代码,这些更改将会丢失。
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
@ -13,7 +14,7 @@ using System.Reflection;
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("Vmianqian")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+82b3bc2cf0c49cfa7245d5fdd65ef87ea19892fc")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+b8577139b743128e6d1f7535c4e26f8b9f8ae07e")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("Vmianqian")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("Vmianqian")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
@ -1 +1 @@
|
||||
ebd5591aa83e3ce6dc8b4661368f70755a868c935951ae1bef6bc75ef5c3797f
|
||||
2bf683a342db48dd63c7773755779041e948fbfa65b1232aa9ccc9ab7062c89c
|
||||
|
||||
@ -2,9 +2,7 @@
|
||||
global using System;
|
||||
global using System.Collections.Generic;
|
||||
global using System.Drawing;
|
||||
global using System.IO;
|
||||
global using System.Linq;
|
||||
global using System.Net.Http;
|
||||
global using System.Threading;
|
||||
global using System.Threading.Tasks;
|
||||
global using System.Windows.Forms;
|
||||
|
||||
Binary file not shown.
@ -1 +1 @@
|
||||
7239ca1570e58a84bff4ce01bdd3920794f5c0a911cc1d186c71d7544994c98a
|
||||
a7b3445afcbd56fec3c73f3a521fa72c62329fb7fbf05cdc5a48d209a06f572f
|
||||
|
||||
@ -22,24 +22,6 @@ E:\Demo\C\Vmianqian\build_verify\Vmianqian.runtimeconfig.json
|
||||
E:\Demo\C\Vmianqian\build_verify\Vmianqian.dll
|
||||
E:\Demo\C\Vmianqian\build_verify\Vmianqian.pdb
|
||||
E:\Demo\C\Vmianqian\build_verify\AntdUI.dll
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\Vmianqian.csproj.AssemblyReference.cache
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\Vmianqian.Form1.resources
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\Vmianqian.csproj.GenerateResource.cache
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\Vmianqian.GeneratedMSBuildEditorConfig.editorconfig
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\Vmianqian.AssemblyInfoInputs.cache
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\Vmianqian.AssemblyInfo.cs
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\Vmianqian.csproj.CoreCompileInputs.cache
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\Vmianqian.dll
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\refint\Vmianqian.dll
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\Vmianqian.pdb
|
||||
E:\Demos\DemoOwns\C\VmianqianC\bin\Debug\net10.0-windows\Vmianqian.deps.json
|
||||
E:\Demos\DemoOwns\C\VmianqianC\bin\Debug\net10.0-windows\Vmianqian.runtimeconfig.json
|
||||
E:\Demos\DemoOwns\C\VmianqianC\bin\Debug\net10.0-windows\Vmianqian.dll
|
||||
E:\Demos\DemoOwns\C\VmianqianC\bin\Debug\net10.0-windows\Vmianqian.pdb
|
||||
E:\Demos\DemoOwns\C\VmianqianC\bin\Debug\net10.0-windows\AntdUI.dll
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\Vmianqian.csproj.Up2Date
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\Vmianqian.genruntimeconfig.cache
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\ref\Vmianqian.dll
|
||||
E:\Demos\DemoOwns\C\VmianqianC\bin_temp\Vmianqian.exe
|
||||
E:\Demos\DemoOwns\C\VmianqianC\bin_temp\Vmianqian.deps.json
|
||||
E:\Demos\DemoOwns\C\VmianqianC\bin_temp\Vmianqian.runtimeconfig.json
|
||||
@ -49,7 +31,34 @@ E:\Demos\DemoOwns\C\VmianqianC\bin_temp\AntdUI.dll
|
||||
E:\Demos\DemoOwns\C\VmianqianC\bin_temp\BouncyCastle.Cryptography.dll
|
||||
E:\Demos\DemoOwns\C\VmianqianC\bin_temp\MailKit.dll
|
||||
E:\Demos\DemoOwns\C\VmianqianC\bin_temp\MimeKit.dll
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\Vmianqian.csproj.AssemblyReference.cache
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\Vmianqian.Form1.resources
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\Vmianqian.csproj.GenerateResource.cache
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\Vmianqian.GeneratedMSBuildEditorConfig.editorconfig
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\Vmianqian.AssemblyInfoInputs.cache
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\Vmianqian.AssemblyInfo.cs
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\Vmianqian.csproj.CoreCompileInputs.cache
|
||||
E:\Demos\DemoOwns\C\VmianqianC\bin\Debug\net10.0-windows\Vmianqian.exe
|
||||
E:\Demos\DemoOwns\C\VmianqianC\bin\Debug\net10.0-windows\Vmianqian.deps.json
|
||||
E:\Demos\DemoOwns\C\VmianqianC\bin\Debug\net10.0-windows\Vmianqian.runtimeconfig.json
|
||||
E:\Demos\DemoOwns\C\VmianqianC\bin\Debug\net10.0-windows\Vmianqian.dll
|
||||
E:\Demos\DemoOwns\C\VmianqianC\bin\Debug\net10.0-windows\Vmianqian.pdb
|
||||
E:\Demos\DemoOwns\C\VmianqianC\bin\Debug\net10.0-windows\AntdUI.dll
|
||||
E:\Demos\DemoOwns\C\VmianqianC\bin\Debug\net10.0-windows\BouncyCastle.Cryptography.dll
|
||||
E:\Demos\DemoOwns\C\VmianqianC\bin\Debug\net10.0-windows\MailKit.dll
|
||||
E:\Demos\DemoOwns\C\VmianqianC\bin\Debug\net10.0-windows\MimeKit.dll
|
||||
E:\Demos\DemoOwns\C\VmianqianC\bin\Debug\net10.0-windows\Vmianqian.exe
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\Vmianqian.csproj.Up2Date
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\Vmianqian.dll
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\refint\Vmianqian.dll
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\Vmianqian.pdb
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\Vmianqian.genruntimeconfig.cache
|
||||
E:\Demos\DemoOwns\C\VmianqianC\obj\Debug\net10.0-windows\ref\Vmianqian.dll
|
||||
E:\Demos\DemoOwns\C\VmianqianC\build-temp\Vmianqian.exe
|
||||
E:\Demos\DemoOwns\C\VmianqianC\build-temp\Vmianqian.deps.json
|
||||
E:\Demos\DemoOwns\C\VmianqianC\build-temp\Vmianqian.runtimeconfig.json
|
||||
E:\Demos\DemoOwns\C\VmianqianC\build-temp\Vmianqian.dll
|
||||
E:\Demos\DemoOwns\C\VmianqianC\build-temp\Vmianqian.pdb
|
||||
E:\Demos\DemoOwns\C\VmianqianC\build-temp\AntdUI.dll
|
||||
E:\Demos\DemoOwns\C\VmianqianC\build-temp\BouncyCastle.Cryptography.dll
|
||||
E:\Demos\DemoOwns\C\VmianqianC\build-temp\MailKit.dll
|
||||
E:\Demos\DemoOwns\C\VmianqianC\build-temp\MimeKit.dll
|
||||
|
||||
Binary file not shown.
@ -13,6 +13,36 @@
|
||||
"fileVersion": "2.3.10.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"BouncyCastle.Cryptography/2.6.2": {
|
||||
"runtime": {
|
||||
"lib/net6.0/BouncyCastle.Cryptography.dll": {
|
||||
"assemblyVersion": "2.0.0.0",
|
||||
"fileVersion": "2.6.2.46322"
|
||||
}
|
||||
}
|
||||
},
|
||||
"MailKit/4.16.0": {
|
||||
"dependencies": {
|
||||
"MimeKit": "4.16.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net10.0/MailKit.dll": {
|
||||
"assemblyVersion": "4.16.0.0",
|
||||
"fileVersion": "4.16.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"MimeKit/4.16.0": {
|
||||
"dependencies": {
|
||||
"BouncyCastle.Cryptography": "2.6.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net10.0/MimeKit.dll": {
|
||||
"assemblyVersion": "4.16.0.0",
|
||||
"fileVersion": "4.16.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -23,6 +53,27 @@
|
||||
"sha512": "sha512-twjNYhVIw08ydcQsBC5c7/59WBXVqba4kulN48ejxUz2i37xJU6ukYqUtxEFhiQtVzmu8cmGYAjZ4HM6BOKZwg==",
|
||||
"path": "antdui/2.3.10",
|
||||
"hashPath": "antdui.2.3.10.nupkg.sha512"
|
||||
},
|
||||
"BouncyCastle.Cryptography/2.6.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-7oWOcvnntmMKNzDLsdxAYqApt+AjpRpP2CShjMfIa3umZ42UQMvH0tl1qAliYPNYO6vTdcGMqnRrCPmsfzTI1w==",
|
||||
"path": "bouncycastle.cryptography/2.6.2",
|
||||
"hashPath": "bouncycastle.cryptography.2.6.2.nupkg.sha512"
|
||||
},
|
||||
"MailKit/4.16.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-trJ82DOpAmo8i1jO1vNE+dGn4mPRyeYfy4swRcAGgMJhPoI1Kohf4OFJJf0+YIj4iUxgxPn8W+ht7e7KiYzSjg==",
|
||||
"path": "mailkit/4.16.0",
|
||||
"hashPath": "mailkit.4.16.0.nupkg.sha512"
|
||||
},
|
||||
"MimeKit/4.16.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-X0LFxeM4gPRIhODyY/HYS9b+zRZ7y//v59rFzgS6wLxcPuZThnMtNZHtrr0fjLyRRkg3gqJBtvW36XfUzZ7Djw==",
|
||||
"path": "mimekit/4.16.0",
|
||||
"hashPath": "mimekit.4.16.0.nupkg.sha512"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -12,9 +12,9 @@
|
||||
}
|
||||
],
|
||||
"additionalProbingPaths": [
|
||||
"C:\\Users\\Administrator\\.dotnet\\store\\|arch|\\|tfm|",
|
||||
"C:\\Users\\Administrator\\.nuget\\packages",
|
||||
"C:\\Softwares\\Microsoft Visual Studio\\Shared\\NuGetPackages"
|
||||
"C:\\Users\\heros\\.dotnet\\store\\|arch|\\|tfm|",
|
||||
"C:\\Users\\heros\\.nuget\\packages",
|
||||
"D:\\Softwares\\Microsoft\\VisualStudio\\Shared\\NuGetPackages"
|
||||
],
|
||||
"configProperties": {
|
||||
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false,
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -74,7 +74,7 @@
|
||||
"Microsoft.NETCore.App": {
|
||||
"privateAssets": "all"
|
||||
},
|
||||
"Microsoft.WindowsDesktop.App.WindowsForms": {
|
||||
"Microsoft.WindowsDesktop.App": {
|
||||
"privateAssets": "none"
|
||||
}
|
||||
},
|
||||
|
||||
@ -210,11 +210,11 @@
|
||||
"project": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "E:\\Demos\\DemoOwns\\C\\VmianqianC\\Vmianqian.csproj",
|
||||
"projectUniqueName": "e:\\Demos\\DemoOwns\\C\\VmianqianC\\Vmianqian.csproj",
|
||||
"projectName": "Vmianqian",
|
||||
"projectPath": "E:\\Demos\\DemoOwns\\C\\VmianqianC\\Vmianqian.csproj",
|
||||
"projectPath": "e:\\Demos\\DemoOwns\\C\\VmianqianC\\Vmianqian.csproj",
|
||||
"packagesPath": "C:\\Users\\heros\\.nuget\\packages\\",
|
||||
"outputPath": "E:\\Demos\\DemoOwns\\C\\VmianqianC\\obj\\",
|
||||
"outputPath": "e:\\Demos\\DemoOwns\\C\\VmianqianC\\obj\\",
|
||||
"projectStyle": "PackageReference",
|
||||
"fallbackFolders": [
|
||||
"D:\\Softwares\\Microsoft\\VisualStudio\\Shared\\NuGetPackages"
|
||||
@ -277,7 +277,7 @@
|
||||
"Microsoft.NETCore.App": {
|
||||
"privateAssets": "all"
|
||||
},
|
||||
"Microsoft.WindowsDesktop.App.WindowsForms": {
|
||||
"Microsoft.WindowsDesktop.App": {
|
||||
"privateAssets": "none"
|
||||
}
|
||||
},
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"version": 2,
|
||||
"dgSpecHash": "JL2C2PQV5/Y=",
|
||||
"dgSpecHash": "DphbmbH3VSw=",
|
||||
"success": true,
|
||||
"projectFilePath": "E:\\Demos\\DemoOwns\\C\\VmianqianC\\Vmianqian.csproj",
|
||||
"expectedPackageFiles": [
|
||||
|
||||
1
obj/project.packagespec.json
Normal file
1
obj/project.packagespec.json
Normal file
File diff suppressed because one or more lines are too long
1
obj/rider.project.restore.info
Normal file
1
obj/rider.project.restore.info
Normal file
@ -0,0 +1 @@
|
||||
17773696795904908
|
||||
Loading…
Reference in New Issue
Block a user