实例介绍
【实例简介】
【实例截图】
【核心代码】
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小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论