diff --git a/WifiScan/Form1.Designer.cs b/WifiScan/Form1.Designer.cs
index 415103e..6157a67 100644
--- a/WifiScan/Form1.Designer.cs
+++ b/WifiScan/Form1.Designer.cs
@@ -31,9 +31,10 @@
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
this.tvTree = new System.Windows.Forms.TreeView();
- this.scMain = new System.Windows.Forms.SplitContainer();
this.imageListDevices = new System.Windows.Forms.ImageList(this.components);
+ this.scMain = new System.Windows.Forms.SplitContainer();
this.WifiTimer = new System.Windows.Forms.Timer(this.components);
+ this.panel1 = new System.Windows.Forms.Panel();
((System.ComponentModel.ISupportInitialize)(this.scMain)).BeginInit();
this.scMain.Panel1.SuspendLayout();
this.scMain.SuspendLayout();
@@ -47,9 +48,16 @@
this.tvTree.Location = new System.Drawing.Point(0, 0);
this.tvTree.Name = "tvTree";
this.tvTree.SelectedImageIndex = 0;
- this.tvTree.Size = new System.Drawing.Size(491, 567);
+ this.tvTree.Size = new System.Drawing.Size(491, 467);
this.tvTree.TabIndex = 0;
//
+ // imageListDevices
+ //
+ this.imageListDevices.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListDevices.ImageStream")));
+ this.imageListDevices.TransparentColor = System.Drawing.Color.Transparent;
+ this.imageListDevices.Images.SetKeyName(0, "iconfinder_network_card_82824.png");
+ this.imageListDevices.Images.SetKeyName(1, "iconfinder_wifi_2639756.ico");
+ //
// scMain
//
this.scMain.Dock = System.Windows.Forms.DockStyle.Fill;
@@ -59,6 +67,7 @@
// scMain.Panel1
//
this.scMain.Panel1.Controls.Add(this.tvTree);
+ this.scMain.Panel1.Controls.Add(this.panel1);
//
// scMain.Panel2
//
@@ -67,19 +76,20 @@
this.scMain.SplitterDistance = 491;
this.scMain.TabIndex = 1;
//
- // imageListDevices
- //
- this.imageListDevices.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListDevices.ImageStream")));
- this.imageListDevices.TransparentColor = System.Drawing.Color.Transparent;
- this.imageListDevices.Images.SetKeyName(0, "iconfinder_network_card_82824.png");
- this.imageListDevices.Images.SetKeyName(1, "iconfinder_wifi_2639756.ico");
- //
// WifiTimer
//
this.WifiTimer.Enabled = true;
this.WifiTimer.Interval = 1000;
this.WifiTimer.Tick += new System.EventHandler(this.WifiTimer_Tick);
//
+ // panel1
+ //
+ this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.panel1.Location = new System.Drawing.Point(0, 467);
+ this.panel1.Name = "panel1";
+ this.panel1.Size = new System.Drawing.Size(491, 100);
+ this.panel1.TabIndex = 2;
+ //
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
@@ -102,6 +112,7 @@
private System.Windows.Forms.SplitContainer scMain;
private System.Windows.Forms.ImageList imageListDevices;
private System.Windows.Forms.Timer WifiTimer;
+ private System.Windows.Forms.Panel panel1;
}
}
diff --git a/WifiScan/Form1.cs b/WifiScan/Form1.cs
index 1aeba93..b5e05e9 100644
--- a/WifiScan/Form1.cs
+++ b/WifiScan/Form1.cs
@@ -5,6 +5,7 @@
using System.Data;
using System.Drawing;
using System.Linq;
+using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
@@ -13,13 +14,25 @@
{
public partial class Form1 : Form
{
-
public Form1()
{
InitializeComponent();
AutoScaleDimensions = new SizeF(96F, 96F);
AutoScaleMode = AutoScaleMode.Dpi;
PopulateTree();
+ DblBuf();
+ }
+
+ private void DblBuf()
+ {
+ var objMethodInfo = typeof(Control).GetMethod("SetStyle", BindingFlags.NonPublic | BindingFlags.Instance);
+
+ var objArgs = new object[] { ControlStyles.AllPaintingInWmPaint |
+ ControlStyles.UserPaint |
+ ControlStyles.OptimizedDoubleBuffer, true };
+
+ objMethodInfo.Invoke(scMain.Panel1, objArgs);
+ objMethodInfo.Invoke(scMain.Panel2, objArgs);
}
#region Tree Management
@@ -55,6 +68,7 @@
foreach (WifiDevice dev in WifiDevice.List())
{
TreeNode node = GetNodeFor(dev);
+ bool empty = node.Nodes.Count == 0;
nodes.Remove(node);
Wifi[] wifis = dev.Networks;
ArrayList netnodes = new ArrayList(node.Nodes);
@@ -65,12 +79,12 @@
}
foreach (TreeNode nwdel in netnodes)
node.Nodes.Remove(nwdel);
+ if (empty && node.Nodes.Count > 0)
+ node.Expand();
}
// remove old
foreach (TreeNode ndel in nodes)
tvTree.Nodes.Remove(ndel);
- tvTree.ExpandAll();
- // Take snapshoot of current wifi status and deletes registrations
}
#endregion
diff --git a/WifiScan/Form1.resx b/WifiScan/Form1.resx
index 69f5af6..853786e 100644
--- a/WifiScan/Form1.resx
+++ b/WifiScan/Form1.resx
@@ -124,53 +124,53 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
- ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACK
- CgAAAk1TRnQBSQFMAgEBAgEAAQgBAAEIAQABGgEAARoBAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFo
- AwABGgMAAQEBAAEgBQABQAEqIgADMgH/AzIB//8AmQADMgH/AzIB/xQAAzIB/wMyAf8DMgH/AzIB/wMy
- Af8DMgH/AzIB/wMyAf8DMgH/AzIB/wMyAf//AFkAAzIB/wMyAf8UAAMyAf8EAAMyAf8EAAMyAf8EAAMy
- Af8EAAMyAf8EAAMyAf//AFkAAzIB/wMyAf8UAAMyAf8EAAMyAf8EAAMyAf8EAAMyAf8EAAMyAf8EAAMy
- Af//AFkAAzIB/wMyAf8DMgH/AzIB/wMyAf8DMgH/AzIB/wMyAf8EAAMyAf8EAAMyAf8EAAMyAf8EAAMy
- Af8EAAMyAf8DMgH/AzgB7wNCAYA0AAMhATIDMQGeAwQBBf8ADQADMgH/AzIB/wMyAf8DMgH/AzIB/wMy
- Af8DMgH/AzIB/wMyAf8DMgH/AzIB/wMyAf8DMgH/AzIB/wMyAf8DMgH/AzIB/wMyAf8DMgH/AzIB/wMy
- Af8DQgGALAADIAExAwAB/wMAAf8DMQGcAwIBA/8ACQADMgH/AzIB/0AAAysBQANFAa8DMgH/AzIB/ygA
- AyMBNwMFAfgDAAH/AwAB/wMAAf8DMQGe/wAJAAMyAf8DMgH/RAADGAEgAzIB/wMyAf8kAAMjATYDDAHv
- AwAB/wMAAf8DAAH/AwAB/wMAAf8DMgGY/wAFAAMyAf8DMgH/JAADOAHvAzIB/wMyAf8DMgH/AzIB/wMy
- Af8DOAHvCAADMgH/AzIB/yQAAwUBBwM0AXgDBwH1AwAB/wMAAf8DAAH/AygBvAMdASv/AAUAAzIB/wMy
- Af8kAAMyAf8DMgH/AzIB/wMyAf8DMgH/AzIB/wMyAf8IAAMyAf8DMgH/HAADIwE3AygBuwMaASUEAAMI
- AQsDJwFAAysBSwMZASQDAAEBAwQBBQM0AXoDMQGe/AADMgH/AzIB/wgAA0EBzwMyAf8DQQHPEAADMgH/
- AzIB/wMyAf8DMgH/AzIB/wMyAf8DMgH/CAADMgH/AzIB/xgAAyABMQMFAfgDAAH/AwQB+QM0AYEDIgE0
- AxMBGgMPARQDGQEjAy0BUAMfAdADAAH/AwAB/wMxAZ4DAgED9AADMgH/AzIB/wgAAzIB/wMyAf8DMgH/
- AzIB/wMyAf8DMgH/AzIB/wMyAf8DMgH/AzIB/wMyAf8DMgH/AzIB/wMyAf8IAAMyAf8DMgH/FAADHwEv
- AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DMQGc
- AwMBBPAAAzIB/wMyAf8IAANBAc8DMgH/A0EBzxAAAzIB/wMyAf8DMgH/AzIB/wMyAf8DMgH/AzIB/wgA
- AzIB/wMyAf8UAAMhATIDAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
- Af8DAAH/AwAB/wMqAbYDAgED8AADMgH/AzIB/yQAAzIB/wMyAf8DMgH/AzIB/wMyAf8DMgH/AzIB/wgA
- AzIB/wMyAf8MAAMlAToDLwFYBAADFAEbAx0B1QMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
- AwAB/wMAAf8DBgH3AzIBYQMBAQIDBAEFAzQBeOwAAzIB/wMyAf8kAAM4Ae8DMgH/AzIB/wMyAf8DMgH/
- AzIB/wM4Ae8IAAMyAf8DMgH/CAADJgE+Aw0B7QMEAfkDNAGKBwABAQMoAUIDLQGtAwQB+QMAAf8DAAH/
- AwAB/wMAAf8DAAH/AxoB2gM0AXMDEgEYBAADGQEkAxcB3gMAAf8DMQGd6AADMgH/AzIB/0QAAxgBIAMy
- Af8DMgH/BAADJQE6Aw0B7QMAAf8DAAH/AwAB/wMgAc0DLAFOAwEBAgQAAw0BEQMmAT4DLwFWAzABWwMs
- AUwDGwEoAwABAQQAAxEBFwMyAZYDAgH7AwAB/wMAAf8DAAH/AzEBneQAAzIB/wMyAf9AAAMYASADRAGf
- AzIB/wMyAf8EAAMmAcMDAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DHwHQAzQBdwMkATkDEgEYAwUBBwMB
- AQIDCgENAxoBJgMvAVYDLwGnAwUB+AMAAf8DAAH/AwAB/wMAAf8DAAH/AwgB9AMgATDgAAMyAf8DMgH/
- AzIB/wMyAf8DMgH/AzIB/wMyAf8DMgH/AzIB/wMyAf8DMgH/AzIB/wMyAf8DMgH/AzIB/wMyAf8DMgH/
- AzIB/wMyAf8DMgH/AzIB/wNEAZ8HAAEBAyoBtgMBAf0DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
- AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/Aw8B6wMrAUvkAAMy
- Af8DMgH/AzIB/wMyAf8DMgH/AzIB/wMyAf8DMgH/AzIB/wMyAf8DMgH/AzIB/wMyAf8DMgH/AzIB/wMy
- Af8DMgH/AzIB/wMyAf8DMgH/A0QBnwMMARAMAAMzAXADBgH3AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
- AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf4DIQHMAw0BEegAAzIB/wMy
- Af9gAAMNARIDMQGhAwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
- AwAB/wMAAf8DCwHwAyUBOgMCAQPsAAMyAf8DMgH/ZwABAQMUARwDMQFfAx8B0AMAAf8DAAH/AwAB/wMA
- Af8DAAH/AwAB/wMAAf8DAAH/AwsB8QMyAZcDHwEvAwQBBfQAAzIB/wMyAf90AAMQARYDIwE3Ay0BUAMw
- AVsDMQFfAy8BVgMpAUMDGwEnAwQBBfwAAxgBIAMyAf8DMgH//wCRAAMMARADRAGfAzIB/wNFAa//AIkA
- AzIB/wMyAf8DMgH/AzIB/wMyAf8DKwFA/wCJAAMyAf8DMgH/AzIB/wNBAc8DKwFA/wCNAAFCAU0BPgcA
- AT4DAAEoAwABaAMAARoDAAEBAQABAQUAAaABARYAA/8BAAHzBf8B8AkAAfMB4AEDA/8B8AkAAfMB6gGr
- A/8B8AkAAfMB6gGrA/8B8AkAAfABCgGoAX8B/AF/AfAJAAHwAgABPwH4AT8B8AkAAfMB/wH8AT8B8AE/
- AfAJAAHzAf8B/gE/AeABHwHwCQAB8wH+AQMBPwHgAR8B8AkAAfMB/gEDAT8BiAEHAfAJAAHzAR4BAwE/
- AQABAQHwCQAB8wEAAQMBPgIAAfAJAAHzAR4BAwE+AgAB8AkAAfMB/gEDATkCAAFwCQAB8wH+AQMBMAGA
- AQQBMAkAAfMB/wH+ASADEAkAAfMB/wH8ASAMAAHwAgABIAIAARAJAAHwAgABOAIAATAJAAHzAv8B/AIA
- AXAJAAHzAv8B/gEAAQEB8AkAAfMD/wHgAQ8B8AkAAeMF/wHwCQABwwX/AfAJAAEDBf8B8AkAAQcF/wHw
- CQAL
+ ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACI
+ CgAAAk1TRnQBSQFMAgEBAgEAARABAAEQAQABGgEAARoBAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFo
+ AwABGgMAAQEBAAEgBQABQAEqIgADMQH/AzEB//8AmQADMQH/AzEB/xQAAzEB/wMxAf8DMQH/AzEB/wMx
+ Af8DMQH/AzEB/wMxAf8DMQH/AzEB/wMxAf//AFkAAzEB/wMxAf8UAAMxAf8EAAMxAf8EAAMxAf8EAAMx
+ Af8EAAMxAf8EAAMxAf//AFkAAzEB/wMxAf8UAAMxAf8EAAMxAf8EAAMxAf8EAAMxAf8EAAMxAf8EAAMx
+ Af//AFkAAzEB/wMxAf8DMQH/AzEB/wMxAf8DMQH/AzEB/wMxAf8EAAMxAf8EAAMxAf8EAAMxAf8EAAMx
+ Af8EAAMxAf8DMQH/AzwB7wNFAYA0AAMiATIDQwGeAwQBBf8ADQADMQH/AzEB/wMxAf8DMQH/AzEB/wMx
+ Af8DMQH/AzEB/wMxAf8DMQH/AzEB/wMxAf8DMQH/AzEB/wMxAf8DMQH/AzEB/wMxAf8DMQH/AzEB/wMx
+ Af8DRQGALAADIQExAwAB/wMAAf8DRAGcAwIBA/8ACQADMQH/AzEB/0AAAyoBQANNAa8DMQH/AzEB/ygA
+ AyUBNwMKAfgDAAH/AwAB/wMAAf8DQwGe/wAJAAMxAf8DMQH/RAADFwEgAzEB/wMxAf8kAAMkATYDFQHv
+ AwAB/wMAAf8DAAH/AwAB/wMAAf8DRAGY/wAFAAMxAf8DMQH/JAADPAHvAzEB/wMxAf8DMQH/AzEB/wMx
+ Af8DPAHvCAADMQH/AzEB/yQAAwUBBwNAAXgDDgH1AwAB/wMAAf8DAAH/Az0BvAMeASv/AAUAAzEB/wMx
+ Af8kAAMxAf8DMQH/AzEB/wMxAf8DMQH/AzEB/wMxAf8IAAMxAf8DMQH/HAADJQE3Az4BuwMaASUEAAMI
+ AQsDKgFAAy8BSwMaASQDAAEBAwQBBQNAAXoDQwGe/AADMQH/AzEB/wgAA0sBzwMxAf8DSwHPEAADMQH/
+ AzEB/wMxAf8DMQH/AzEB/wMxAf8DMQH/CAADMQH/AzEB/xgAAyEBMQMKAfgDAAH/AwgB+QNCAYEDIwE0
+ AxMBGgMPARQDGQEjAzIBUAMzAdADAAH/AwAB/wNDAZ4DAgED9AADMQH/AzEB/wgAAzEB/wMxAf8DMQH/
+ AzEB/wMxAf8DMQH/AzEB/wMxAf8DMQH/AzEB/wMxAf8DMQH/AzEB/wMxAf8IAAMxAf8DMQH/FAADIAEv
+ AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DRAGc
+ AwMBBPAAAzEB/wMxAf8IAANLAc8DMQH/A0sBzxAAAzEB/wMxAf8DMQH/AzEB/wMxAf8DMQH/AzEB/wgA
+ AzEB/wMxAf8UAAMiATIDAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
+ Af8DAAH/AwAB/wM/AbYDAgED8AADMQH/AzEB/yQAAzEB/wMxAf8DMQH/AzEB/wMxAf8DMQH/AzEB/wgA
+ AzEB/wMxAf8MAAMmAToDNQFYBAADFAEbAzAB1QMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
+ AwAB/wMAAf8DDAH3AzkBYQMBAQIDBAEFA0ABeOwAAzEB/wMxAf8kAAM8Ae8DMQH/AzEB/wMxAf8DMQH/
+ AzEB/wM8Ae8IAAMxAf8DMQH/CAADKQE+AxgB7QMIAfkDQwGKBwABAQMrBEIBrQMIAfkDAAH/AwAB/wMA
+ Af8DAAH/AwAB/wMsAdoDPgFzAxIBGAQAAxoBJAMnAd4DAAH/A0QBnegAAzEB/wMxAf9EAAMXASADMQH/
+ AzEB/wQAAyYBOgMYAe0DAAH/AwAB/wMAAf8DNQHNAzABTgMBAQIEAAMNAREDKQE+AzQBVgM2AVsDMAFM
+ AxwBKAMAAQEEAAMRARcDQwGWAwQB+wMAAf8DAAH/AwAB/wNEAZ3kAAMxAf8DMQH/QAADFwEgA0sBnwMx
+ Af8DMQH/BAADOwHDAwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AzMB0ANAAXcDJgE5AxIBGAMFAQcDAQEC
+ AwoBDQMbASYDNAFWA0MBpwMKAfgDAAH/AwAB/wMAAf8DAAH/AwAB/wMQAfQDIQEw4AADMQH/AzEB/wMx
+ Af8DMQH/AzEB/wMxAf8DMQH/AzEB/wMxAf8DMQH/AzEB/wMxAf8DMQH/AzEB/wMxAf8DMQH/AzEB/wMx
+ Af8DMQH/AzEB/wMxAf8DSwGfBwABAQM/AbYDAgH9AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
+ Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMcAesDLwFL5AADMQH/
+ AzEB/wMxAf8DMQH/AzEB/wMxAf8DMQH/AzEB/wMxAf8DMQH/AzEB/wMxAf8DMQH/AzEB/wMxAf8DMQH/
+ AzEB/wMxAf8DMQH/AzEB/wNLAZ8DDAEQDAADPQFwAwwB9wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
+ Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH+AzYBzAMNARHoAAMxAf8DMQH/
+ YAADDQESA0QBoQMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
+ Af8DAAH/AxMB8AMmAToDAgED7AADMQH/AzEB/2cAAQEDFAEcAzgBXwMzAdADAAH/AwAB/wMAAf8DAAH/
+ AwAB/wMAAf8DAAH/AwAB/wMTAfEDRAGXAyABLwMEAQX0AAMxAf8DMQH/dAADEAEWAyUBNwMyAVADNgFb
+ AzgBXwM0AVYDKwFDAxwBJwMEAQX8AAMXASADMQH/AzEB//8AkQADDAEQA0sBnwMxAf8DTQGv/wCJAAMx
+ Af8DMQH/AzEB/wMxAf8DMQH/AyoBQP8AiQADMQH/AzEB/wMxAf8DSwHPAyoBQP8AjQABQgFNAT4HAAE+
+ AwABKAMAAWgDAAEaAwABAQEAAQEFAAGgAQEWAAP/AQAB8wX/AfAJAAHzAeABAwP/AfAJAAHzAeoBqwP/
+ AfAJAAHzAeoBqwP/AfAJAAHwAQoBqAF/AfwBfwHwCQAB8AIAAT8B+AE/AfAJAAHzAf8B/AE/AfABPwHw
+ CQAB8wH/Af4BPwHgAR8B8AkAAfMB/gEDAT8B4AEfAfAJAAHzAf4BAwE/AYgBBwHwCQAB8wEeAQMBPwEA
+ AQEB8AkAAfMBAAEDAT4CAAHwCQAB8wEeAQMBPgIAAfAJAAHzAf4BAwE5AgABcAkAAfMB/gEDATABgAEE
+ ATAJAAHzAf8B/gEgAxAJAAHzAf8B/AEgDAAB8AIAASACAAEQCQAB8AIAATgCAAEwCQAB8wL/AfwCAAFw
+ CQAB8wL/Af4BAAEBAfAJAAHzA/8B4AEPAfAJAAHjBf8B8AkAAcMF/wHwCQABAwX/AfAJAAEHBf8B8AkA
+ Cw==
diff --git a/WifiScan/Wifi.cs b/WifiScan/Wifi.cs
index f507fe1..6f43500 100644
--- a/WifiScan/Wifi.cs
+++ b/WifiScan/Wifi.cs
@@ -16,13 +16,14 @@
private string ssid;
private string bssid;
private DateTime lastSeen;
- private Color color = Color.FromArgb(WifiApi.rnd.Next(200) + 56, WifiApi.rnd.Next(200) + 56, WifiApi.rnd.Next(200) + 56);
+ private Color color;
public Wifi(Wlan.WlanBssEntry network)
{
this.network = network;
bssid = network.GetBSSIDHex();
ssid = network.GetSSID();
+ color = WifiApi.ColorForBSSID(bssid);
Notify();
}
@@ -36,6 +37,11 @@
return new WifiInfo(this);
}
+ public void Update(Wlan.WlanBssEntry network)
+ {
+ this.network = network;
+ }
+
public string BSSID => bssid;
public string SSID => ssid;
public bool Active => (DateTime.Now - lastSeen).Seconds < 10;
diff --git a/WifiScan/WifiDevice.cs b/WifiScan/WifiDevice.cs
index 80d3392..fbe334d 100644
--- a/WifiScan/WifiDevice.cs
+++ b/WifiScan/WifiDevice.cs
@@ -33,6 +33,7 @@
foreach (WlanClient.WlanInterface wlanIface in client.Interfaces)
{
WifiDevice dev = GetFor(wlanIface);
+ dev.iface = wlanIface;
del.Remove(dev);
}
return new List(devices);
@@ -80,6 +81,7 @@
foreach (Wlan.WlanBssEntry network in wlanBssEntries)
{
Wifi wifi = GetFor(network);
+ wifi.Update(network);
wifi.Notify();
}
Wifi[] all = networks.ToArray();
diff --git a/WifiScan/WifiInfo.cs b/WifiScan/WifiInfo.cs
index 74f49e1..e359f7f 100644
--- a/WifiScan/WifiInfo.cs
+++ b/WifiScan/WifiInfo.cs
@@ -11,12 +11,14 @@
{
public WifiInfo(Wifi wifi)
{
+ BSSID = wifi.BSSID;
SSID = wifi.SSID;
Signal = wifi.Signal;
Channel = wifi.Channel;
Color = wifi.Color;
}
+ public string BSSID { get; }
public string SSID { get; }
public uint Signal { get; }
public uint Channel { get; }
diff --git a/WifiScan/WifiaPI.cs b/WifiScan/WifiaPI.cs
index a788660..8e83317 100644
--- a/WifiScan/WifiaPI.cs
+++ b/WifiScan/WifiaPI.cs
@@ -21,6 +21,7 @@
private static Brush bText = new SolidBrush(Color.Silver);
static List> snap = new List>();
+ static Dictionary colors = new Dictionary();
#region Network Extensions
public static string GetBSSIDHex(this Wlan.WlanBssEntry network)
@@ -48,10 +49,18 @@
#endregion
+ public static Color ColorForBSSID(string bssid)
+ {
+ Color c;
+ if (colors.TryGetValue(bssid, out c))
+ return c;
+ return colors[bssid] = Color.FromArgb(rnd.Next(220) + 36, rnd.Next(220) + 36, rnd.Next(220) + 36);
+ }
+
public static void Snapshoot()
{
List step = new List();
- foreach(Wifi wifi in WifiDevice.FetchAllNetworks())
+ foreach (Wifi wifi in WifiDevice.FetchAllNetworks())
{
step.Add(wifi.GetInfo());
}
@@ -95,11 +104,10 @@
}
//Draw Channels
float chw6 = (sz.Width * 4) / 16f;
-
for (int i = 1; i <= 14; i++)
{
int x = (int)((sz.Width * (i + 1)) / 16f);
- g.DrawString("" + i, font, bText, new PointF(x-10, sz.Height - (CHART_FOOT * scale)));
+ g.DrawString("" + i, font, bText, new PointF(x - 10, sz.Height - (CHART_FOOT * scale)));
g.DrawLine(pLineDark2, new PointF(x, sz.Height), new PointF(x, hh2));
List chw = GetNetworksInChannel(i);
foreach (WifiInfo wii in chw)
@@ -109,6 +117,34 @@
g.DrawEllipse(pw, new RectangleF(x - (chw6 / 2), sz.Height - (he / 2f), chw6, he));
}
}
+ //Signal History
+ if (snap.Count < 2)
+ return;
+ int ii = snap.Count - 1;
+ int xx = sz.Width;
+ while (ii > 0 && xx > 0)
+ {
+ List wiis = snap[ii];
+ foreach (WifiInfo wii in wiis)
+ {
+ List wolds = snap[ii - 1];
+ WifiInfo wold = null;
+ foreach (WifiInfo woldc in wolds)
+ if (woldc.BSSID == wii.BSSID)
+ {
+ wold = woldc;
+ break;
+ }
+ if (wold == null)
+ continue;
+ float he = hh2 - ((hh2 * wii.Signal) / 100f);
+ float heo = hh2 - ((hh2 * wold.Signal) / 100f);
+ Pen pw = new Pen(wii.Color, 2f);
+ g.DrawLine(pw, new PointF(xx, he), new PointF(xx - 10, heo));
+ }
+ ii--;
+ xx -= 10;
+ }
}
#endregion
}