更新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 AntdUI;
|
||||||
using System.Net.Http.Json;
|
using MailKit.Net.Smtp;
|
||||||
|
using MailKit.Security;
|
||||||
|
using MimeKit;
|
||||||
|
using System.ComponentModel;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Text.RegularExpressions;
|
using System.IO;
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.Http;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using AntdUI;
|
using System.Text.RegularExpressions;
|
||||||
using MailKit.Net.Smtp;
|
|
||||||
using MailKit.Security;
|
|
||||||
using MimeKit;
|
|
||||||
using System.Windows.Automation;
|
using System.Windows.Automation;
|
||||||
using WinLabel = System.Windows.Forms.Label;
|
using WinLabel = System.Windows.Forms.Label;
|
||||||
using WinPanel = System.Windows.Forms.Panel;
|
using WinPanel = System.Windows.Forms.Panel;
|
||||||
@ -129,75 +131,43 @@ namespace Vmianqian
|
|||||||
public Form1()
|
public Form1()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
BuildAntdDemoStyleUi();
|
InitializeDesignerLayout();
|
||||||
|
ReloadMenuItems();
|
||||||
|
SelectPage("home");
|
||||||
|
|
||||||
|
if (IsInDesigner()) return;
|
||||||
|
|
||||||
Load += Form1_Load;
|
Load += Form1_Load;
|
||||||
FormClosing += Form1_FormClosing;
|
FormClosing += Form1_FormClosing;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BuildAntdDemoStyleUi()
|
private static bool IsInDesigner()
|
||||||
{
|
{
|
||||||
BackColor = Color.White;
|
return LicenseManager.UsageMode == LicenseUsageMode.Designtime;
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BuildTitlebar()
|
private void InitializeDesignerLayout()
|
||||||
{
|
{
|
||||||
titlebar = new AntdUI.PageHeader
|
pageHome.Resize += (_, _) => LayoutHomePage();
|
||||||
{
|
pageWechat.Resize += (_, _) => LayoutWechatPage();
|
||||||
Dock = DockStyle.Top,
|
pageAlipay.Resize += (_, _) => LayoutAlipayPage();
|
||||||
Height = 44,
|
pageSettings.Resize += (_, _) => LayoutSettingsPage();
|
||||||
DividerShow = true,
|
|
||||||
ShowButton = true,
|
|
||||||
ShowIcon = true,
|
|
||||||
Text = "V免签PC客户端",
|
|
||||||
SubText = "V0.0.1"
|
|
||||||
};
|
|
||||||
|
|
||||||
lblTopNotice = new AntdUI.Label
|
pageHome.HorizontalScroll.Enabled = false;
|
||||||
{
|
pageHome.HorizontalScroll.Visible = false;
|
||||||
Dock = DockStyle.Fill,
|
pageWechat.HorizontalScroll.Enabled = false;
|
||||||
Text = "监听未启动",
|
pageWechat.HorizontalScroll.Visible = false;
|
||||||
TextAlign = ContentAlignment.MiddleRight,
|
pageAlipay.HorizontalScroll.Enabled = false;
|
||||||
ForeColor = Color.DimGray
|
pageAlipay.HorizontalScroll.Visible = false;
|
||||||
};
|
pageSettings.HorizontalScroll.Enabled = false;
|
||||||
|
pageSettings.HorizontalScroll.Visible = false;
|
||||||
|
|
||||||
lblAlipayStatusValue = new AntdUI.Label
|
LayoutHomePage();
|
||||||
{
|
LayoutWechatPage();
|
||||||
Dock = DockStyle.Right,
|
LayoutAlipayPage();
|
||||||
Width = 120,
|
LayoutSettingsPage();
|
||||||
Text = "支付宝: 离线",
|
|
||||||
TextAlign = ContentAlignment.MiddleRight,
|
|
||||||
ForeColor = Color.Red
|
|
||||||
};
|
|
||||||
|
|
||||||
lblWechatStatusValue = new AntdUI.Label
|
if (IsInDesigner()) return;
|
||||||
{
|
|
||||||
Dock = DockStyle.Right,
|
|
||||||
Width = 120,
|
|
||||||
Text = "微信: 离线",
|
|
||||||
TextAlign = ContentAlignment.MiddleRight,
|
|
||||||
ForeColor = Color.Red
|
|
||||||
};
|
|
||||||
|
|
||||||
titlebar.Controls.Add(lblTopNotice);
|
|
||||||
titlebar.Controls.Add(lblAlipayStatusValue);
|
|
||||||
titlebar.Controls.Add(lblWechatStatusValue);
|
|
||||||
|
|
||||||
EnableWindowDrag(titlebar);
|
EnableWindowDrag(titlebar);
|
||||||
EnableWindowDrag(lblTopNotice);
|
EnableWindowDrag(lblTopNotice);
|
||||||
@ -205,61 +175,6 @@ namespace Vmianqian
|
|||||||
EnableWindowDrag(lblAlipayStatusValue);
|
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()
|
private void ReloadMenuItems()
|
||||||
{
|
{
|
||||||
menu.Items.Clear();
|
menu.Items.Clear();
|
||||||
@ -269,58 +184,10 @@ namespace Vmianqian
|
|||||||
menu.Items.Add(new AntdUI.MenuItem { Text = "软件设置", IconSvg = "SettingOutlined", Tag = "settings" });
|
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()
|
private void LayoutHomePage()
|
||||||
{
|
{
|
||||||
const int margin = 20;
|
const int margin = 20;
|
||||||
const int gap = 16;
|
const int gap = 16;
|
||||||
const int cardHeight = 420;
|
|
||||||
var pageAvailableWidth = Math.Max(0, pageHome.ClientSize.Width - margin * 2);
|
var pageAvailableWidth = Math.Max(0, pageHome.ClientSize.Width - margin * 2);
|
||||||
pageHome.SuspendLayout();
|
pageHome.SuspendLayout();
|
||||||
|
|
||||||
@ -356,13 +223,14 @@ namespace Vmianqian
|
|||||||
memberCard.SuspendLayout();
|
memberCard.SuspendLayout();
|
||||||
|
|
||||||
var availableWidth = Math.Max(0, pageAvailableWidth);
|
var availableWidth = Math.Max(0, pageAvailableWidth);
|
||||||
var rowBottom = top + cardHeight;
|
|
||||||
var rowWidth = Math.Max(0, availableWidth - gap);
|
var rowWidth = Math.Max(0, availableWidth - gap);
|
||||||
var leftWidth = rowWidth / 2;
|
var leftWidth = rowWidth / 2;
|
||||||
var rightWidth = rowWidth - leftWidth;
|
var rightWidth = rowWidth - leftWidth;
|
||||||
|
var configHeight = 390;
|
||||||
|
var memberHeight = 128;
|
||||||
|
|
||||||
configCard.Bounds = new Rectangle(margin, top, leftWidth, cardHeight);
|
configCard.Bounds = new Rectangle(margin, top, leftWidth, configHeight);
|
||||||
memberCard.Bounds = new Rectangle(margin + leftWidth + gap, top, rightWidth, cardHeight);
|
memberCard.Bounds = new Rectangle(margin + leftWidth + gap, top, rightWidth, memberHeight);
|
||||||
|
|
||||||
const int contentLeft = 24;
|
const int contentLeft = 24;
|
||||||
const int contentRight = 24;
|
const int contentRight = 24;
|
||||||
@ -371,25 +239,24 @@ namespace Vmianqian
|
|||||||
lblServerUrlTitle.Location = new Point(contentLeft, 20);
|
lblServerUrlTitle.Location = new Point(contentLeft, 20);
|
||||||
txtServerUrl.Location = new Point(contentLeft, 48);
|
txtServerUrl.Location = new Point(contentLeft, 48);
|
||||||
txtServerUrl.Width = inputWidth;
|
txtServerUrl.Width = inputWidth;
|
||||||
lblApiKeyTitle.Location = new Point(contentLeft, 94);
|
lblApiKeyTitle.Location = new Point(contentLeft, 118);
|
||||||
txtApiKey.Location = new Point(contentLeft, 122);
|
txtApiKey.Location = new Point(contentLeft, 146);
|
||||||
txtApiKey.Width = inputWidth;
|
txtApiKey.Width = inputWidth;
|
||||||
|
|
||||||
const int actionTop = 252;
|
const int actionTop = 236;
|
||||||
const int buttonGap = 12;
|
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.Location = new Point(24, actionTop);
|
||||||
btnSaveConfig.Size = new Size(actionButtonWidth, 36);
|
btnSaveConfig.Size = new Size(actionButtonWidth, 55);
|
||||||
btnToggleService.Location = new Point(btnSaveConfig.Right + buttonGap, actionTop);
|
btnHeartbeatCheck.Location = new Point(btnSaveConfig.Right + buttonGap, actionTop);
|
||||||
btnToggleService.Size = new Size(actionButtonWidth, 36);
|
btnHeartbeatCheck.Size = new Size(actionButtonWidth, 55);
|
||||||
btnHeartbeatCheck.Location = new Point(btnToggleService.Right + buttonGap, actionTop);
|
|
||||||
btnHeartbeatCheck.Size = new Size(actionButtonWidth, 34);
|
|
||||||
|
|
||||||
const int heartbeatTop = 300;
|
const int heartbeatTop = 310;
|
||||||
chkHeartbeatEnabled.Location = new Point(contentLeft, heartbeatTop - 4);
|
chkHeartbeatEnabled.Location = new Point(contentLeft, heartbeatTop - 4);
|
||||||
lblHeartbeatDesc.Location = new Point(chkHeartbeatEnabled.Right + 4, heartbeatTop + 1);
|
lblHeartbeatDesc.Location = new Point(chkHeartbeatEnabled.Right + 4, heartbeatTop + 1);
|
||||||
lblMemberPlaceholder.Size = new Size(Math.Max(220, memberCard.ClientSize.Width - 48), 52);
|
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 logCardTop = rowBottom + margin;
|
||||||
var homeLogCard = FindCard(pageHome, "home-log");
|
var homeLogCard = FindCard(pageHome, "home-log");
|
||||||
if (homeLogCard != null)
|
if (homeLogCard != null)
|
||||||
@ -417,7 +284,11 @@ namespace Vmianqian
|
|||||||
}
|
}
|
||||||
if (btnClearLog != null)
|
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);
|
logCard.ResumeLayout(false);
|
||||||
}
|
}
|
||||||
@ -441,27 +312,30 @@ namespace Vmianqian
|
|||||||
var totalWidth = Math.Max(0, pageWechat.ClientSize.Width - margin * 2 - gap);
|
var totalWidth = Math.Max(0, pageWechat.ClientSize.Width - margin * 2 - gap);
|
||||||
var hookWidth = totalWidth / 2;
|
var hookWidth = totalWidth / 2;
|
||||||
var protocolWidth = totalWidth - hookWidth;
|
var protocolWidth = totalWidth - hookWidth;
|
||||||
hookCard.Bounds = new Rectangle(margin, 20, hookWidth, 240);
|
hookCard.Bounds = new Rectangle(margin, 20, hookWidth, 280);
|
||||||
protocolCard.Bounds = new Rectangle(hookCard.Right + gap, 20, protocolWidth, 240);
|
protocolCard.Bounds = new Rectangle(hookCard.Right + gap, 20, protocolWidth, 280);
|
||||||
|
|
||||||
var hookPathWidth = Math.Max(140, hookCard.ClientSize.Width - 24 - 24 - btnSelectWechatPath.Width - 12);
|
var hookPathWidth = Math.Max(140, hookCard.ClientSize.Width - 24 - 24 - btnSelectWechatPath.Width - 12);
|
||||||
txtWechatPath.Width = hookPathWidth;
|
txtWechatPath.Width = hookPathWidth;
|
||||||
|
btnSelectWechatPath.Size = new Size(92, 36);
|
||||||
btnSelectWechatPath.Location = new Point(txtWechatPath.Left + txtWechatPath.Width + 12, txtWechatPath.Top);
|
btnSelectWechatPath.Location = new Point(txtWechatPath.Left + txtWechatPath.Width + 12, txtWechatPath.Top);
|
||||||
btnWechatHookStart.Size = new Size(120, 36);
|
btnWechatHookStart.Size = new Size(168, 42);
|
||||||
btnWechatHookStart.Location = new Point(24, hookCard.ClientSize.Height - btnWechatHookStart.Height - 16);
|
btnWechatHookStart.Location = new Point(24, 182);
|
||||||
|
|
||||||
lblWechatSidTitle.Location = new Point(24, 54);
|
lblWechatSidTitle.Location = new Point(24, 54);
|
||||||
|
btnWechatSidAuto.Size = new Size(92, 36);
|
||||||
var sidWidth = Math.Max(180, protocolCard.ClientSize.Width - 48 - btnWechatSidAuto.Width - 12);
|
var sidWidth = Math.Max(180, protocolCard.ClientSize.Width - 48 - btnWechatSidAuto.Width - 12);
|
||||||
txtWechatId.Width = sidWidth;
|
txtWechatId.Width = sidWidth;
|
||||||
btnWechatSidAuto.Location = new Point(txtWechatId.Left + txtWechatId.Width + 12, txtWechatId.Top);
|
btnWechatSidAuto.Location = new Point(txtWechatId.Left + txtWechatId.Width + 12, txtWechatId.Top);
|
||||||
var halfWidth = Math.Max(160, (sidWidth - 12) / 2);
|
var halfWidth = Math.Max(160, (sidWidth - 12) / 2);
|
||||||
var rightColX = 24 + halfWidth + 12;
|
var rightColX = 24 + halfWidth + 12;
|
||||||
lblWechatFrequencyTitle.Location = new Point(24, 122);
|
lblWechatFrequencyTitle.Location = new Point(24, 146);
|
||||||
numWechatInterval.Location = new Point(24, 150);
|
numWechatInterval.Location = new Point(24, 182);
|
||||||
lblWechatPollingTitle.Location = new Point(rightColX, 122);
|
numWechatInterval.Size = new Size(96, 30);
|
||||||
chkWheel.Location = new Point(rightColX, 150);
|
lblWechatPollingTitle.Location = new Point(rightColX, 146);
|
||||||
btnWechatProtocolStart.Size = new Size(120, 36);
|
chkWheel.Location = new Point(rightColX, 198);
|
||||||
btnWechatProtocolStart.Location = new Point(24, protocolCard.ClientSize.Height - btnWechatProtocolStart.Height - 16);
|
btnWechatProtocolStart.Size = new Size(120, 42);
|
||||||
|
btnWechatProtocolStart.Location = new Point(24, btnWechatHookStart.Bottom - btnWechatProtocolStart.Height);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gridCard != null && hookCard != null)
|
if (gridCard != null && hookCard != null)
|
||||||
@ -479,6 +353,7 @@ namespace Vmianqian
|
|||||||
|
|
||||||
if (btnClearWechatLog != null)
|
if (btnClearWechatLog != null)
|
||||||
{
|
{
|
||||||
|
btnClearWechatLog.Size = new Size(92, 36);
|
||||||
btnClearWechatLog.Location = new Point(Math.Max(24, gridCard.ClientSize.Width - btnClearWechatLog.Width - 24), 14);
|
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;
|
var bottom = pageAlipay.ClientSize.Height - 20;
|
||||||
gridCard.Height = Math.Max(260, bottom - gridCard.Top);
|
gridCard.Height = Math.Max(260, bottom - gridCard.Top);
|
||||||
|
numAlipayInterval.Size = new Size(96, 30);
|
||||||
|
|
||||||
if (gridAlipayLogs != null)
|
if (gridAlipayLogs != null)
|
||||||
{
|
{
|
||||||
@ -529,6 +405,8 @@ namespace Vmianqian
|
|||||||
lblEmailAuthCodeTitle.Location = new Point(authCodeLeft, 278);
|
lblEmailAuthCodeTitle.Location = new Point(authCodeLeft, 278);
|
||||||
txtEmailAuthCode.Location = new Point(authCodeLeft, 306);
|
txtEmailAuthCode.Location = new Point(authCodeLeft, 306);
|
||||||
txtEmailAuthCode.Width = authCodeWidth;
|
txtEmailAuthCode.Width = authCodeWidth;
|
||||||
|
btnEmailSave.Size = new Size(110, 42);
|
||||||
|
btnEmailTest.Size = new Size(110, 42);
|
||||||
btnEmailSave.Location = new Point(24, 350);
|
btnEmailSave.Location = new Point(24, 350);
|
||||||
btnEmailTest.Location = new Point(btnEmailSave.Right + 12, 350);
|
btnEmailTest.Location = new Point(btnEmailSave.Right + 12, 350);
|
||||||
}
|
}
|
||||||
@ -557,395 +435,6 @@ namespace Vmianqian
|
|||||||
return null;
|
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)
|
private AntdUI.Label CreateTitleLabel(string text, int x, int y)
|
||||||
{
|
{
|
||||||
return new AntdUI.Label
|
return new AntdUI.Label
|
||||||
@ -961,7 +450,7 @@ namespace Vmianqian
|
|||||||
return new AntdUI.Input
|
return new AntdUI.Input
|
||||||
{
|
{
|
||||||
Location = new Point(x, y),
|
Location = new Point(x, y),
|
||||||
Size = new Size(width, 36),
|
Size = new Size(width, 55),
|
||||||
PlaceholderText = placeholder
|
PlaceholderText = placeholder
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -1271,6 +760,16 @@ namespace Vmianqian
|
|||||||
Log($"微信安装路径已保存:{dialog.FileName}");
|
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)
|
private async void btnWechatSidAuto_Click(object? sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (_wechatSidCaptureCts != null)
|
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()
|
private void StartWechatSidCapture()
|
||||||
{
|
{
|
||||||
StopWechatSidCapture();
|
StopWechatSidCapture();
|
||||||
_wechatSidCaptureCts = new CancellationTokenSource();
|
_wechatSidCaptureCts = new CancellationTokenSource();
|
||||||
var token = _wechatSidCaptureCts.Token;
|
var token = _wechatSidCaptureCts.Token;
|
||||||
|
UpdateWechatMonitorButtons();
|
||||||
btnWechatSidAuto.Text = "停止捕获";
|
btnWechatSidAuto.Text = "停止捕获";
|
||||||
btnWechatSidAuto.Type = TTypeMini.Error;
|
btnWechatSidAuto.Type = TTypeMini.Error;
|
||||||
btnWechatSidAuto.Loading = true;
|
btnWechatSidAuto.Loading = true;
|
||||||
@ -1307,12 +834,6 @@ namespace Vmianqian
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (TryExtractSidFromClipboard(out var clipSid, out var clipVersion))
|
|
||||||
{
|
|
||||||
BeginInvoke(() => ApplyCapturedSid(clipSid, clipVersion, "剪贴板"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var result = TryExtractSidFromWechatLocalFiles();
|
var result = TryExtractSidFromWechatLocalFiles();
|
||||||
if (!string.IsNullOrWhiteSpace(result.Sid))
|
if (!string.IsNullOrWhiteSpace(result.Sid))
|
||||||
{
|
{
|
||||||
@ -1340,6 +861,7 @@ namespace Vmianqian
|
|||||||
try { _wechatSidCaptureCts?.Cancel(); } catch { }
|
try { _wechatSidCaptureCts?.Cancel(); } catch { }
|
||||||
try { _wechatSidCaptureCts?.Dispose(); } catch { }
|
try { _wechatSidCaptureCts?.Dispose(); } catch { }
|
||||||
_wechatSidCaptureCts = null;
|
_wechatSidCaptureCts = null;
|
||||||
|
UpdateWechatMonitorButtons();
|
||||||
|
|
||||||
if (btnWechatSidAuto != null)
|
if (btnWechatSidAuto != null)
|
||||||
{
|
{
|
||||||
@ -1363,13 +885,11 @@ namespace Vmianqian
|
|||||||
|
|
||||||
private void btnWechatHookStart_Click(object? sender, EventArgs e)
|
private void btnWechatHookStart_Click(object? sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (string.Equals(_wechatMonitorMode, "hook", StringComparison.Ordinal))
|
if (_wechatSidCaptureCts != null)
|
||||||
{
|
{
|
||||||
StopWechatHook();
|
StopWechatSidCapture();
|
||||||
_wechatMonitorMode = string.Empty;
|
|
||||||
UpdateWechatMonitorButtons();
|
UpdateWechatMonitorButtons();
|
||||||
UpdateWechatStatusUi();
|
Log("SID 获取已停止。");
|
||||||
Log("Hook 监听已停止。");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1377,25 +897,14 @@ namespace Vmianqian
|
|||||||
{
|
{
|
||||||
SaveUiToConfig();
|
SaveUiToConfig();
|
||||||
SaveConfig();
|
SaveConfig();
|
||||||
if (!string.IsNullOrWhiteSpace(_wechatMonitorMode))
|
LaunchWechatForSidCapture();
|
||||||
{
|
Log("SID 捕获已启动:请等待微信打开,并进入微信收款助手/收款小账本页面。");
|
||||||
StopWechatMonitoring();
|
StartWechatSidCapture();
|
||||||
}
|
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(txtWechatPath?.Text) || !File.Exists(txtWechatPath.Text.Trim()))
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException("请先选择正确的微信程序路径(WeChat.exe/Weixin.exe/WeChatAppEx.exe)。");
|
|
||||||
}
|
|
||||||
|
|
||||||
StartWechatHook();
|
|
||||||
_wechatMonitorMode = "hook";
|
|
||||||
UpdateWechatMonitorButtons();
|
UpdateWechatMonitorButtons();
|
||||||
UpdateWechatStatusUi();
|
|
||||||
Log("Hook 监听已启动(将用于监听微信通知/收款小账本)。");
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Log($"Hook 监听启动失败:{ex.Message}");
|
Log($"启动微信并获取 SID 失败:{ex.Message}");
|
||||||
MessageBox.Show(ex.Message, "启动失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
MessageBox.Show(ex.Message, "启动失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1446,12 +955,12 @@ namespace Vmianqian
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var hookActive = string.Equals(_wechatMonitorMode, "hook", StringComparison.Ordinal);
|
var sidCaptureActive = _wechatSidCaptureCts != null;
|
||||||
var protocolActive = string.Equals(_wechatMonitorMode, "protocol", StringComparison.Ordinal);
|
var protocolActive = string.Equals(_wechatMonitorMode, "protocol", StringComparison.Ordinal);
|
||||||
|
|
||||||
btnWechatHookStart.Text = hookActive ? "停止监听" : "开始监听";
|
btnWechatHookStart.Text = sidCaptureActive ? "停止获取SID" : "1. 启动微信";
|
||||||
btnWechatHookStart.Type = hookActive ? TTypeMini.Error : TTypeMini.Primary;
|
btnWechatHookStart.Type = sidCaptureActive ? TTypeMini.Error : TTypeMini.Primary;
|
||||||
btnWechatProtocolStart.Text = protocolActive ? "停止监听" : "开始监听";
|
btnWechatProtocolStart.Text = protocolActive ? "停止监听" : "2. 开始监听";
|
||||||
btnWechatProtocolStart.Type = protocolActive ? TTypeMini.Error : TTypeMini.Primary;
|
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()
|
private static (string Sid, string Version, string Source) TryExtractSidFromWechatLocalFiles()
|
||||||
{
|
{
|
||||||
foreach (var root in GetWechatDataRoots())
|
foreach (var root in GetWechatDataRoots())
|
||||||
|
|||||||
@ -5,6 +5,7 @@
|
|||||||
<TargetFramework>net10.0-windows</TargetFramework>
|
<TargetFramework>net10.0-windows</TargetFramework>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<UseWindowsForms>true</UseWindowsForms>
|
<UseWindowsForms>true</UseWindowsForms>
|
||||||
|
<UseWPF>true</UseWPF>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<GitRepositoryConfigurationScope>local</GitRepositoryConfigurationScope>
|
<GitRepositoryConfigurationScope>local</GitRepositoryConfigurationScope>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
@ -14,15 +15,6 @@
|
|||||||
<PackageReference Include="MailKit" Version="4.16.0" />
|
<PackageReference Include="MailKit" Version="4.16.0" />
|
||||||
</ItemGroup>
|
</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>
|
<ItemGroup>
|
||||||
<Compile Remove="antdui-demo\**\*.cs" />
|
<Compile Remove="antdui-demo\**\*.cs" />
|
||||||
<EmbeddedResource Remove="antdui-demo\**\*" />
|
<EmbeddedResource Remove="antdui-demo\**\*" />
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -7,7 +7,7 @@
|
|||||||
"NotifyEmail": "1066960883@qq.com",
|
"NotifyEmail": "1066960883@qq.com",
|
||||||
"EmailAuthCode": "TPPMKSMvCadyzu3m",
|
"EmailAuthCode": "TPPMKSMvCadyzu3m",
|
||||||
"WechatPath": "D:\\Softwares\\Tencent\\Weixin\\Weixin.exe",
|
"WechatPath": "D:\\Softwares\\Tencent\\Weixin\\Weixin.exe",
|
||||||
"WechatSid": "AAHRxMH-4RkRMiXVf7NSJGhBKBwThd_tfDct27hXjkv0Ag",
|
"WechatSid": "",
|
||||||
"WechatApiVersion": "7.10.1",
|
"WechatApiVersion": "7.10.1",
|
||||||
"AlipayPath": "",
|
"AlipayPath": "",
|
||||||
"AlipayAppId": "",
|
"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>
|
// <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>
|
// </auto-generated>
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -13,7 +14,7 @@ using System.Reflection;
|
|||||||
[assembly: System.Reflection.AssemblyCompanyAttribute("Vmianqian")]
|
[assembly: System.Reflection.AssemblyCompanyAttribute("Vmianqian")]
|
||||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
[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.AssemblyProductAttribute("Vmianqian")]
|
||||||
[assembly: System.Reflection.AssemblyTitleAttribute("Vmianqian")]
|
[assembly: System.Reflection.AssemblyTitleAttribute("Vmianqian")]
|
||||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
ebd5591aa83e3ce6dc8b4661368f70755a868c935951ae1bef6bc75ef5c3797f
|
2bf683a342db48dd63c7773755779041e948fbfa65b1232aa9ccc9ab7062c89c
|
||||||
|
|||||||
@ -2,9 +2,7 @@
|
|||||||
global using System;
|
global using System;
|
||||||
global using System.Collections.Generic;
|
global using System.Collections.Generic;
|
||||||
global using System.Drawing;
|
global using System.Drawing;
|
||||||
global using System.IO;
|
|
||||||
global using System.Linq;
|
global using System.Linq;
|
||||||
global using System.Net.Http;
|
|
||||||
global using System.Threading;
|
global using System.Threading;
|
||||||
global using System.Threading.Tasks;
|
global using System.Threading.Tasks;
|
||||||
global using System.Windows.Forms;
|
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.dll
|
||||||
E:\Demo\C\Vmianqian\build_verify\Vmianqian.pdb
|
E:\Demo\C\Vmianqian\build_verify\Vmianqian.pdb
|
||||||
E:\Demo\C\Vmianqian\build_verify\AntdUI.dll
|
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.exe
|
||||||
E:\Demos\DemoOwns\C\VmianqianC\bin_temp\Vmianqian.deps.json
|
E:\Demos\DemoOwns\C\VmianqianC\bin_temp\Vmianqian.deps.json
|
||||||
E:\Demos\DemoOwns\C\VmianqianC\bin_temp\Vmianqian.runtimeconfig.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\BouncyCastle.Cryptography.dll
|
||||||
E:\Demos\DemoOwns\C\VmianqianC\bin_temp\MailKit.dll
|
E:\Demos\DemoOwns\C\VmianqianC\bin_temp\MailKit.dll
|
||||||
E:\Demos\DemoOwns\C\VmianqianC\bin_temp\MimeKit.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\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\MailKit.dll
|
||||||
E:\Demos\DemoOwns\C\VmianqianC\bin\Debug\net10.0-windows\MimeKit.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"
|
"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==",
|
"sha512": "sha512-twjNYhVIw08ydcQsBC5c7/59WBXVqba4kulN48ejxUz2i37xJU6ukYqUtxEFhiQtVzmu8cmGYAjZ4HM6BOKZwg==",
|
||||||
"path": "antdui/2.3.10",
|
"path": "antdui/2.3.10",
|
||||||
"hashPath": "antdui.2.3.10.nupkg.sha512"
|
"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": [
|
"additionalProbingPaths": [
|
||||||
"C:\\Users\\Administrator\\.dotnet\\store\\|arch|\\|tfm|",
|
"C:\\Users\\heros\\.dotnet\\store\\|arch|\\|tfm|",
|
||||||
"C:\\Users\\Administrator\\.nuget\\packages",
|
"C:\\Users\\heros\\.nuget\\packages",
|
||||||
"C:\\Softwares\\Microsoft Visual Studio\\Shared\\NuGetPackages"
|
"D:\\Softwares\\Microsoft\\VisualStudio\\Shared\\NuGetPackages"
|
||||||
],
|
],
|
||||||
"configProperties": {
|
"configProperties": {
|
||||||
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false,
|
"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": {
|
"Microsoft.NETCore.App": {
|
||||||
"privateAssets": "all"
|
"privateAssets": "all"
|
||||||
},
|
},
|
||||||
"Microsoft.WindowsDesktop.App.WindowsForms": {
|
"Microsoft.WindowsDesktop.App": {
|
||||||
"privateAssets": "none"
|
"privateAssets": "none"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -210,11 +210,11 @@
|
|||||||
"project": {
|
"project": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"restore": {
|
"restore": {
|
||||||
"projectUniqueName": "E:\\Demos\\DemoOwns\\C\\VmianqianC\\Vmianqian.csproj",
|
"projectUniqueName": "e:\\Demos\\DemoOwns\\C\\VmianqianC\\Vmianqian.csproj",
|
||||||
"projectName": "Vmianqian",
|
"projectName": "Vmianqian",
|
||||||
"projectPath": "E:\\Demos\\DemoOwns\\C\\VmianqianC\\Vmianqian.csproj",
|
"projectPath": "e:\\Demos\\DemoOwns\\C\\VmianqianC\\Vmianqian.csproj",
|
||||||
"packagesPath": "C:\\Users\\heros\\.nuget\\packages\\",
|
"packagesPath": "C:\\Users\\heros\\.nuget\\packages\\",
|
||||||
"outputPath": "E:\\Demos\\DemoOwns\\C\\VmianqianC\\obj\\",
|
"outputPath": "e:\\Demos\\DemoOwns\\C\\VmianqianC\\obj\\",
|
||||||
"projectStyle": "PackageReference",
|
"projectStyle": "PackageReference",
|
||||||
"fallbackFolders": [
|
"fallbackFolders": [
|
||||||
"D:\\Softwares\\Microsoft\\VisualStudio\\Shared\\NuGetPackages"
|
"D:\\Softwares\\Microsoft\\VisualStudio\\Shared\\NuGetPackages"
|
||||||
@ -277,7 +277,7 @@
|
|||||||
"Microsoft.NETCore.App": {
|
"Microsoft.NETCore.App": {
|
||||||
"privateAssets": "all"
|
"privateAssets": "all"
|
||||||
},
|
},
|
||||||
"Microsoft.WindowsDesktop.App.WindowsForms": {
|
"Microsoft.WindowsDesktop.App": {
|
||||||
"privateAssets": "none"
|
"privateAssets": "none"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"version": 2,
|
"version": 2,
|
||||||
"dgSpecHash": "JL2C2PQV5/Y=",
|
"dgSpecHash": "DphbmbH3VSw=",
|
||||||
"success": true,
|
"success": true,
|
||||||
"projectFilePath": "E:\\Demos\\DemoOwns\\C\\VmianqianC\\Vmianqian.csproj",
|
"projectFilePath": "E:\\Demos\\DemoOwns\\C\\VmianqianC\\Vmianqian.csproj",
|
||||||
"expectedPackageFiles": [
|
"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