实例介绍
【实例简介】
【实例截图】

【核心代码】
using Microsoft.VisualBasic;
using System;
using System.Linq;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using VirtualRouter.Extensions;
using VirtualRouter.ICS;
using VirtualRouter.Properties;
using VirtualRouter.WinApi;
using VirtualRouter.Wlan;
namespace VirtualRouter.Client
{
public partial class FrmMain : Form
{
static Regex RegexIP = new Regex(@"^(\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4]\d|25[0-5])$", RegexOptions.Compiled);
private WlanManager _wlnMgr;
private IcsManager _icsMgr;
private FrmSharingManager _frmSharing;
public FrmMain()
{
InitializeComponent();
dgvClients.AutoGenerateColumns = false;
_wlnMgr = new WlanManager();
_icsMgr = new IcsManager();
_frmSharing = new FrmSharingManager();
//监听虚拟路由状态的改变
_wlnMgr.StationJoin = StationChanged;
_wlnMgr.StationJoin = (_s, _e) => {
ntfyDock.ShowBalloonTip(500, "", "发现客户端加入连接", ToolTipIcon.Info);
};
_wlnMgr.StationLeave = StationChanged;
_wlnMgr.StationStateChange = StationChanged;
_wlnMgr.HostedNetworkStarted = HostedNetworkStateChanged;
_wlnMgr.HostedNetworkStarted = StationChanged;
_wlnMgr.HostedNetworkStopped = HostedNetworkStateChanged;
_wlnMgr.HostedNetworkStopped = StationChanged;
}
private void RefreshConnections()
{
var cons = _icsMgr.Connections.Where(_ => !_.IsMatch(_wlnMgr.HostedNetworkInterfaceGuid)).ToList();
cmbSharings.DataSource = cons;
cmbSharings.AdjustDropDownWidth();
cmbSharings.SelectedItem = cons.FirstOrDefault(_ => _.SharingEnabled);
}
private void HostedNetworkStateChanged(object sender, EventArgs e)
{
this.Invoke(new Action(() => {
var captions = ((string)btnSwitch.Tag).Split('|');
if (_wlnMgr.IsHostedNetworkStarted) {
btnSwitch.Text = captions[1];
ntfyDock.Icon = Resources.VirtualRouterEnabled;
ntfyDock.ShowBalloonTip(500, "", "虚拟路由已开启", ToolTipIcon.Info);
} else {
btnSwitch.Text = captions[0];
ntfyDock.Icon = Resources.VirtualRouterDisabled;
ntfyDock.ShowBalloonTip(500, "", "虚拟路由已停止", ToolTipIcon.Info);
}
StartToolStripMenuItem.Visible = !(StopToolStripMenuItem.Visible = _wlnMgr.IsHostedNetworkStarted);
}));
}
private void StationChanged(object sender, EventArgs e)
{
RefreshClients();
}
private void RefreshClients()
{
this.Invoke(new Action(() => {
var clients = _wlnMgr.Stations.Values.AsEnumerable().ToList();
grpClients.Text = string.Format((string)grpClients.Tag, clients.Count);
dgvClients.DataSource = clients;
}));
}
void btnSet_Click(object sender, EventArgs e)
{
try {
string err = WlanManager.Validate(txtSSID.Text, txtPwd.Text);
if (err != null) {
this.Err("错误");
return;
}
_wlnMgr.SetConnectionSettings(txtSSID.Text, (int)numMaxClients.Value);
_wlnMgr.SetSecondaryKey(txtPwd.Text);
_wlnMgr.SetEnable(true);
if (cmbSharings.SelectedValue != null) {
if (!_wlnMgr.IsHostedNetworkStarted)
_wlnMgr.StartHostedNetwork();
_icsMgr.EnableIcs((Guid)cmbSharings.SelectedValue, _wlnMgr.HostedNetworkInterfaceGuid);
}
this.Info("设置已生效!");
} catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}
void ChkShowPwdCheckedChanged(object sender, EventArgs e)
{
txtPwd.PasswordChar = ((CheckBox)sender).Checked ? '\0' : '*';
}
private void FrmMain_Load(object sender, EventArgs e)
{
txtSSID.Text = _wlnMgr.SSID;
txtPwd.Text = _wlnMgr.Key;
numMaxClients.Value = _wlnMgr.NumberOfPeers;
RefreshConnections();
RefreshClients();
HostedNetworkStateChanged(null, null);
}
private void btnRefreshSharings_Click(object sender, EventArgs e)
{
RefreshConnections();
}
private void btnSwitch_Click(object sender, EventArgs e)
{
if (_wlnMgr.IsHostedNetworkStarted) {
_wlnMgr.StopHostedNetwork();
} else {
_wlnMgr.StartHostedNetwork();
}
}
private void ntfyDock_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left) {
if (!Visible) {
Visible = true;
WindowState = FormWindowState.Normal;
} else {
Hide();
}
Activate();
}
}
private void FrmMain_SizeChanged(object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized) {
Hide();
}
}
private void ExitToolStripMenuItem_Click(object sender, EventArgs e)
{
Close();
}
private void StartToolStripMenuItem_Click(object sender, EventArgs e)
{
_wlnMgr.StartHostedNetwork();
}
private void StopToolStripMenuItem_Click(object sender, EventArgs e)
{
_wlnMgr.StopHostedNetwork();
}
private void btnIPSet_Click(object sender, EventArgs e)
{
string[] ipaddrs, masks, gateways, dns;
string currentIps = null;
WMIHelper.GetIP(_wlnMgr.HostedNetworkInterfaceGuid, out ipaddrs, out masks, out gateways, out dns);
ipaddrs = (ipaddrs ?? Enumerable.Empty<String>()).Where(_ => RegexIP.IsMatch(_)).ToArray();
if (ipaddrs.Any()) {
currentIps = String.Join(" | ", ipaddrs);
}
bool ok = false;
do {
string ipAddr = Interaction.InputBox("输入IP地址:", currentIps == null ? "设置IP" : "当前IP:" currentIps).Replace(" ", "");
if (ipAddr.Length == 0) {
ok = true;
} else {
if (!RegexIP.IsMatch(ipAddr)) {
this.Warn("IP地址格式不正确!");
ok = false;
} else {
WMIHelper.SetIP(_wlnMgr.HostedNetworkInterfaceGuid, ipAddr, "255.255.255.0", "", "");
this.Info("设置成功!");
ok = true;
}
}
} while (!ok);
}
private void btnSharingMgr_Click(object sender, EventArgs e)
{
_frmSharing.ShowDialog(this);
}
}
}
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论