using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Net; using System.Runtime.Serialization.Formatters.Binary; using System.Text; using System.Windows.Forms; using System.Data; using AR; namespace Project { public static class Util { public static void SaveBugReport(string content, string subdirName = "BugReport") { try { var path = CurrentPath + subdirName; if (!System.IO.Directory.Exists(path)) System.IO.Directory.CreateDirectory(path); var file = path + "\\" + DateTime.Now.ToString("yyyyMMdd_HHmmss_fff") + ".txt"; System.IO.File.WriteAllText(file, content, System.Text.Encoding.UTF8); } catch { //nothing } } /// /// Returns the currently executing folder. /// public static string CurrentPath { get { return AppDomain.CurrentDomain.BaseDirectory; } } #region "convert" public static string RectToStr(Rectangle rect) { return string.Format("{0};{1};{2};{3}", rect.X, rect.Y, rect.Width, rect.Height); } public static string RectToStr(RectangleF rect) { return string.Format("{0};{1};{2};{3}", rect.X, rect.Y, rect.Width, rect.Height); } public static string PointToStr(Point pt) { return string.Format("{0};{1}", pt.X, pt.Y); } public static string PointToStr(PointF pt) { return string.Format("{0};{1}", pt.X, pt.Y); } public static Rectangle StrToRect(string str) { if (str.isEmpty() || str.Split(';').Length != 4) str = "0;0;0;0"; var roibuf1 = str.Split(';'); return new System.Drawing.Rectangle( int.Parse(roibuf1[0]), int.Parse(roibuf1[1]), int.Parse(roibuf1[2]), int.Parse(roibuf1[3])); } public static RectangleF StrToRectF(string str) { if (str.isEmpty() || str.Split(';').Length != 4) str = "0;0;0;0"; var roibuf1 = str.Split(';'); return new System.Drawing.RectangleF( float.Parse(roibuf1[0]), float.Parse(roibuf1[1]), float.Parse(roibuf1[2]), float.Parse(roibuf1[3])); } public static Point StrToPoint(string str) { if (str.isEmpty() || str.Split(';').Length != 2) str = "0;0"; var roibuf1 = str.Split(';'); return new System.Drawing.Point( int.Parse(roibuf1[0]), int.Parse(roibuf1[1])); } public static PointF StrToPointF(string str) { if (str.isEmpty() || str.Split(';').Length != 2) str = "0;0"; var roibuf1 = str.Split(';'); return new System.Drawing.PointF( float.Parse(roibuf1[0]), float.Parse(roibuf1[1])); } #endregion #region "NIC" /// /// Checks if the specified NIC card exists in the current list. /// /// public static Boolean ExistNIC(string NICName) { if (string.IsNullOrEmpty(NICName)) return false; foreach (string NetName in NICCardList()) { if (NetName.ToLower() == NICName.ToLower()) { return true; } } return false; } /// /// Sets the Ethernet Card to disabled. (Administrator privileges required) /// /// public static Boolean NICDisable(string NICName) { //해당 nic 가 현재 목록에 존재하는지 확인한다. string cmd = "interface set interface " + NICName + " disable"; Process prc = new Process(); ProcessStartInfo si = new ProcessStartInfo("netsh", cmd); si.WindowStyle = ProcessWindowStyle.Hidden; prc.StartInfo = si; prc.Start(); ////목록에서 사라질때까지 기다린다. DateTime SD = DateTime.Now; Boolean timeout = false; while ((true)) { bool FindNetwork = false; foreach (string NetName in NICCardList()) { if (NetName == NICName.ToLower()) { FindNetwork = true; break; // TODO: might not be correct. Was : Exit For } } if (!FindNetwork) break; // TODO: might not be correct. Was : Exit While System.Threading.Thread.Sleep(1000); TimeSpan ts = DateTime.Now - SD; if (ts.TotalSeconds > 10) { timeout = true; break; // TODO: might not be correct. Was : Exit While } } return !timeout; } public static List NICCardList() { List Retval = new List(); foreach (System.Net.NetworkInformation.NetworkInterface Net in System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()) { if (Net.NetworkInterfaceType == System.Net.NetworkInformation.NetworkInterfaceType.Ethernet) { Retval.Add(Net.Name.ToUpper()); } } return Retval; } /// /// Sets the Ethernet card to enabled. /// /// public static Boolean NICEnable(string NICName) { string cmd = "interface set interface " + NICName + " enable"; System.Diagnostics.Process prc = new System.Diagnostics.Process(); System.Diagnostics.ProcessStartInfo si = new System.Diagnostics.ProcessStartInfo("netsh", cmd); si.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; prc.StartInfo = si; prc.Start(); ////목록에생길떄까지 대기 DateTime SD = DateTime.Now; while ((true)) { bool FindNetwork = false; foreach (string NetName in NICCardList()) { if (NetName.ToLower() == NICName.ToLower()) { FindNetwork = true; break; // TODO: might not be correct. Was : Exit For } } if (FindNetwork) break; // TODO: might not be correct. Was : Exit While System.Threading.Thread.Sleep(1000); TimeSpan ts = DateTime.Now - SD; if (ts.TotalSeconds > 10) { return false; } } ////결이 완료될떄까지 기다린다. SD = DateTime.Now; while ((true)) { bool FindNetwork = false; foreach (System.Net.NetworkInformation.NetworkInterface Net in System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()) { if (Net.NetworkInterfaceType != System.Net.NetworkInformation.NetworkInterfaceType.GigabitEthernet && Net.NetworkInterfaceType != System.Net.NetworkInformation.NetworkInterfaceType.Ethernet) continue; if (Net.Name.ToLower() == NICName.ToLower()) { //string data = Net.GetIPProperties().GatewayAddresses[0].ToString(); if (Net.OperationalStatus == System.Net.NetworkInformation.OperationalStatus.Up) { FindNetwork = true; break; // TODO: might not be correct. Was : Exit For } } } if (FindNetwork) return true; System.Threading.Thread.Sleep(1000); TimeSpan ts = DateTime.Now - SD; if (ts.TotalSeconds > 10) { return false; } } } #endregion public static void RunExplorer(string arg) { System.Diagnostics.ProcessStartInfo si = new ProcessStartInfo("explorer"); si.Arguments = arg; System.Diagnostics.Process.Start(si); } #region "web function" /// /// Receives a string from URL. /// /// /// /// public static string GetStrfromurl(string url, out Boolean isError) { isError = false; string result = ""; try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(url)); request.Timeout = 60000; request.ReadWriteTimeout = 60000; request.MaximumAutomaticRedirections = 4; request.MaximumResponseHeadersLength = 4; request.Credentials = CredentialCache.DefaultCredentials; var response = request.GetResponse() as HttpWebResponse; var txtReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); result = txtReader.ReadToEnd(); } catch (Exception ex) { isError = true; result = ex.Message.ToString(); } return result; } #endregion } }