This commit is contained in:
李志强 2026-04-28 18:09:09 +08:00
parent b8577139b7
commit a3d8595a50
36 changed files with 1478 additions and 684 deletions

1139
Form1.Designer.cs generated

File diff suppressed because it is too large Load Diff

753
Form1.cs
View File

@ -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())

View File

@ -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\**\*" />

View File

@ -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

Binary file not shown.

Binary file not shown.

BIN
build-temp/MailKit.dll Normal file

Binary file not shown.

BIN
build-temp/MimeKit.dll Normal file

Binary file not shown.

View 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

Binary file not shown.

BIN
build-temp/Vmianqian.exe Normal file

Binary file not shown.

BIN
build-temp/Vmianqian.pdb Normal file

Binary file not shown.

View 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
View File

@ -0,0 +1,13 @@
{
"version": 1,
"isRoot": true,
"tools": {
"csharpier": {
"version": "1.2.6",
"commands": [
"csharpier"
],
"rollForward": false
}
}
}

View File

@ -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")]

View File

@ -1 +1 @@
ebd5591aa83e3ce6dc8b4661368f70755a868c935951ae1bef6bc75ef5c3797f
2bf683a342db48dd63c7773755779041e948fbfa65b1232aa9ccc9ab7062c89c

View File

@ -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;

View File

@ -1 +1 @@
7239ca1570e58a84bff4ce01bdd3920794f5c0a911cc1d186c71d7544994c98a
a7b3445afcbd56fec3c73f3a521fa72c62329fb7fbf05cdc5a48d209a06f572f

View File

@ -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

View File

@ -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"
}
}
}

View File

@ -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,

View File

@ -74,7 +74,7 @@
"Microsoft.NETCore.App": {
"privateAssets": "all"
},
"Microsoft.WindowsDesktop.App.WindowsForms": {
"Microsoft.WindowsDesktop.App": {
"privateAssets": "none"
}
},

View File

@ -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"
}
},

View File

@ -1,6 +1,6 @@
{
"version": 2,
"dgSpecHash": "JL2C2PQV5/Y=",
"dgSpecHash": "DphbmbH3VSw=",
"success": true,
"projectFilePath": "E:\\Demos\\DemoOwns\\C\\VmianqianC\\Vmianqian.csproj",
"expectedPackageFiles": [

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
17773696795904908