|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
using System.Data;
|
|
|
|
|
using System.Drawing;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
using WakeOnLan;
|
|
|
|
|
using System.Configuration;
|
|
|
|
|
using System.Threading;
|
|
|
|
|
|
|
|
|
|
namespace Waker
|
|
|
|
|
{
|
|
|
|
|
public partial class MainForm : Form
|
|
|
|
|
{
|
|
|
|
|
private readonly Color PING_SUCCESS = Color.Green;
|
|
|
|
|
private readonly Color PING_FAIL = Color.Red;
|
|
|
|
|
private readonly Color PING_UNKNOWN = Color.Gray;
|
|
|
|
|
|
|
|
|
|
private string ip;
|
|
|
|
|
private string mac;
|
|
|
|
|
private string ports;
|
|
|
|
|
private string pingPort;
|
|
|
|
|
|
|
|
|
|
private Thread pingThread;
|
|
|
|
|
|
|
|
|
|
public MainForm()
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
InitInstance();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void InitInstance()
|
|
|
|
|
{
|
|
|
|
|
string path = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;
|
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(Settings.Default.ip))
|
|
|
|
|
ip = Settings.Default.ip;
|
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(Settings.Default.mac))
|
|
|
|
|
mac = Settings.Default.mac;
|
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(Settings.Default.ports))
|
|
|
|
|
ports = Settings.Default.ports;
|
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(Settings.Default.pingPort))
|
|
|
|
|
pingPort = Settings.Default.pingPort;
|
|
|
|
|
|
|
|
|
|
FillInformation();
|
|
|
|
|
|
|
|
|
|
AddressTextBox.TextChanged += AddressTextBox_TextChanged;
|
|
|
|
|
|
|
|
|
|
AddressTextBox.KeyUp += TextBox_KeyUp;
|
|
|
|
|
MacTextBox.KeyUp += TextBox_KeyUp;
|
|
|
|
|
PortTextBox.KeyUp += TextBox_KeyUp;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void AddressTextBox_TextChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
SetIp();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private bool SetIp()
|
|
|
|
|
{
|
|
|
|
|
ip = AddressTextBox.Text.Replace(" ", "");
|
|
|
|
|
if (string.IsNullOrEmpty(ip))
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
AddressTextBox.Text = ip;
|
|
|
|
|
Settings.Default.ip = ip;
|
|
|
|
|
Settings.Default.Save();
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private bool SetInformation()
|
|
|
|
|
{
|
|
|
|
|
ip = AddressTextBox.Text.Replace(" ", "");
|
|
|
|
|
mac = MacTextBox.Text.Replace(" ", "");
|
|
|
|
|
ports = PortTextBox.Text.Replace(" ", "");
|
|
|
|
|
|
|
|
|
|
if (string.IsNullOrEmpty(ip) || string.IsNullOrEmpty(mac))
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
AddressTextBox.Text = ip;
|
|
|
|
|
MacTextBox.Text = mac;
|
|
|
|
|
PortTextBox.Text = ports;
|
|
|
|
|
|
|
|
|
|
Settings.Default.ip = ip;
|
|
|
|
|
Settings.Default.mac = mac;
|
|
|
|
|
Settings.Default.ports = ports;
|
|
|
|
|
|
|
|
|
|
Settings.Default.Save();
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void FillInformation()
|
|
|
|
|
{
|
|
|
|
|
if (!string.IsNullOrEmpty(ip))
|
|
|
|
|
AddressTextBox.Text = ip;
|
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(mac))
|
|
|
|
|
MacTextBox.Text = mac;
|
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(ports))
|
|
|
|
|
PortTextBox.Text = ports;
|
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(pingPort))
|
|
|
|
|
PingPortTextBox.Text = pingPort;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void WakeButton_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (!SetInformation())
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show("Invalid information");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
string portsString = ports.Replace(" ", "");
|
|
|
|
|
|
|
|
|
|
if (string.IsNullOrEmpty(portsString))
|
|
|
|
|
{
|
|
|
|
|
WoL.Wake(ip, mac);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
string[] portStringArray = portsString.Split(',');
|
|
|
|
|
if (portStringArray == null || portStringArray.Length < 1 || string.IsNullOrEmpty(portStringArray[0]))
|
|
|
|
|
{
|
|
|
|
|
WoL.Wake(ip, mac);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int[] portArray = portStringArray.Select(int.Parse).ToArray();
|
|
|
|
|
if (portArray == null || portArray.Length< 1)
|
|
|
|
|
{
|
|
|
|
|
WoL.Wake(ip, mac);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WoL.Wake(ip, mac, portArray);
|
|
|
|
|
} catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show(ex.Message);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void TextBox_KeyUp(object sender, KeyEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (e.KeyCode != Keys.Enter)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
WakeButton_Click(sender, e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void PingPortTextBox_TextChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (string.IsNullOrEmpty(PingPortTextBox.Text))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
pingPort = PingPortTextBox.Text;
|
|
|
|
|
|
|
|
|
|
if (!pingTimer.Enabled)
|
|
|
|
|
pingTimer.Enabled = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void pingTimer_Tick(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
int targetPort = 0;
|
|
|
|
|
if (!int.TryParse(pingPort, out targetPort))
|
|
|
|
|
{
|
|
|
|
|
PingStatusPanel.BackColor = PING_UNKNOWN;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (targetPort < 1)
|
|
|
|
|
{
|
|
|
|
|
PingStatusPanel.BackColor = PING_UNKNOWN;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (string.IsNullOrEmpty(ip))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
Settings.Default.pingPort = pingPort;
|
|
|
|
|
Settings.Default.Save();
|
|
|
|
|
|
|
|
|
|
object[] parameters = new object[2] { ip, targetPort };
|
|
|
|
|
pingThread = new Thread(new ParameterizedThreadStart(SendPing));
|
|
|
|
|
pingThread.Start(parameters);
|
|
|
|
|
|
|
|
|
|
} catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
pingTimer.Enabled = false;
|
|
|
|
|
MessageBox.Show(ex.Message);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SendPing(object parameters)
|
|
|
|
|
{
|
|
|
|
|
object[] src = parameters as object[];
|
|
|
|
|
if (src == null || src.Length < 2)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
string ip = src[0] as string;
|
|
|
|
|
int? port = src[1] as int?;
|
|
|
|
|
|
|
|
|
|
if (ip == null || port == null)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (PingCheck.Test(ip, port == null ? default(int) : port.Value))
|
|
|
|
|
{
|
|
|
|
|
PingStatusPanel.BackColor = PING_SUCCESS;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
PingStatusPanel.BackColor = PING_FAIL;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|