using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Microsoft.Win32; using Shell32; using System.Threading; using System.IO; namespace WindowsFormsApplication2 { public partial class MacModifyForm : Tokay.SystemUI.Dialogs.BasicDialog { private const string NETWORKADDRESS_KEY = @"SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\0007"; private const string NETWORKADDRESS_NAME = "NetworkAddress"; private const string discVerb = "禁用(&B)"; private const string connVerb = "启用(&A)"; private readonly string bufferFile = Application.StartupPath + "\\buffer.dat"; private readonly List<string> bufferIp = new List<string>(); public MacModifyForm() { InitializeComponent(); if (File.Exists(bufferFile)) { StreamReader sr = new StreamReader(bufferFile); while (!sr.EndOfStream) { string line = sr.ReadLine(); if (line.Length > 0) { bufferIp.Add(line.Trim()); } } } } private void MacModifyForm_Load(object sender, EventArgs e) { this.textBox1.Text = ReadMac(); this.btnOK.Enabled = false; } private string ReadMac() { RegistryKey HKLM = Registry.LocalMachine; try { RegistryKey Reg = HKLM.OpenSubKey(NETWORKADDRESS_KEY); object o = Reg.GetValue(NETWORKADDRESS_NAME); return o.ToString(); } catch { return string.Empty; } } private void SetMac(string mac) { RegistryKey HKLM = Registry.LocalMachine; RegistryKey Reg = HKLM.OpenSubKey(NETWORKADDRESS_KEY, true); Reg.SetValue(NETWORKADDRESS_NAME, mac); } private void RestartMac() { this.StopMac(); Thread.Sleep(3000); this.StartMac(); } private void StartMac() { Shell sh = new Shell32.Shell(); Folder folder; Folder fd; folder = sh.NameSpace(3); foreach (FolderItem myItem in folder.Items()) { if (myItem.Name == "网络连接") { fd = (Folder)myItem.GetFolder; //禁用网络 foreach (FolderItem fi in fd.Items()) { foreach (FolderItemVerb Fib in fi.Verbs()) { //启用网络 if (Fib.Name == connVerb) { Fib.DoIt(); break; } } } } } } private void StopMac() { Shell sh = new Shell32.Shell(); Folder folder; Folder fd; folder = sh.NameSpace(3); foreach (FolderItem myItem in folder.Items()) { if (myItem.Name == "网络连接") { fd = (Folder)myItem.GetFolder; //禁用网络 foreach (FolderItem fi in fd.Items()) { foreach (FolderItemVerb Fib in fi.Verbs()) { if (Fib.Name == discVerb) { Fib.DoIt(); break; } } } } } } private void btnOK_Click(object sender, EventArgs e) { try { this.btnOK.Enabled = false; this.Cursor = Cursors.WaitCursor; //设置Mac到注册表 this.SetMac(this.textBox1.Text); //重新启用网络 this.RestartMac(); this.Hide(); if (!this.bufferIp.Contains(this.textBox1.Text)) { this.bufferIp.Add(this.textBox1.Text); } } catch (Exception ex) { throw ex; } finally { this.Cursor = Cursors.Default; } } private void btnCancel_Click(object sender, EventArgs e) { this.Hide(); } private void textBox1_TextChanged(object sender, EventArgs e) { this.btnOK.Enabled = this.textBox1.Text.Length == 17; } private void 退出ToolStripMenuItem_Click(object sender, EventArgs e) { this.Close(); } private void 显示主窗体ToolStripMenuItem_Click(object sender, EventArgs e) { this.Visible = true; } private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) { this.显示主窗体ToolStripMenuItem.Enabled = !this.Visible; } private void notifyIcon1_DoubleClick(object sender, EventArgs e) { this.Visible = !this.Visible; } private void timer1_Tick(object sender, EventArgs e) { if (this.Visible) { this.Visible = false; this.timer1.Enabled = false; } } private void MacModifyForm_VisibleChanged(object sender, EventArgs e) { if (this.Visible) { this.textBox1.Items.Clear(); foreach (string s in this.bufferIp) { this.textBox1.Items.Add(s); } } } private void MacModifyForm_FormClosed(object sender, FormClosedEventArgs e) { try { if (File.Exists(this.bufferFile)) { FileInfo fi = new FileInfo(this.bufferFile); fi.Attributes = FileAttributes.Normal; File.Delete(this.bufferFile); } StringBuilder sb = new StringBuilder(); foreach (string s in this.bufferIp) { sb.AppendLine(s); } File.WriteAllText(this.bufferFile, sb.ToString(), Encoding.Default); } catch { } } } }