//180624 chi isLocalApplication 추가 //180618 chi GetCSVBuffer 추가 //180614 chi map 명령어 추가 using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Windows.Forms; namespace Project { public static class Util { /// /// 현재 프로그램이 개인용위치에서 실행중인가(클릭원스의경우) /// /// public static Boolean isLocalApplication() { var localpath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); return Util.CurrentPath.StartsWith(localpath); } /// /// CSV데이터포맷으로 버퍼를 반환합니다. 문자열내에 , 가 있는 데이터는 쌍따옴표로 구분합니다. /// /// /// public static string[] GetCSVBuffer(string line) { List buffer = new List(); if (line.Trim() == "") return buffer.ToArray(); System.Text.StringBuilder sb = new StringBuilder(); bool findsig = false; var charbuf = line.ToCharArray(); char pchar = '\0'; foreach (var c in charbuf) { if (c == ',') { if (findsig) sb.Append(c); //대상에 콤마가 잇으므로 게소 누적한다. else { //데이터를 분리해줘야함 buffer.Add(sb.ToString()); sb.Clear(); findsig = false; } } else if (c == '\"') { if (pchar == ',') { if (!findsig) findsig = true; else findsig = false; //완료된 경우이다. } else if (!findsig) sb.Append(c); //if (!findsig) findsig = true; //else sb.Append(c); } else { sb.Append(c); } pchar = c; } //if(sb.Length > 0) //{ buffer.Add(sb.ToString()); //} return buffer.ToArray(); } public static double map(double source, int in_min, int in_max, int out_min, int out_max) { return (source - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } #region "MessageBox" public static void MsgI(string m) { MessageBox.Show(m, "확인", MessageBoxButtons.OK, MessageBoxIcon.Information); } public static void MsgE(string m) { MessageBox.Show(m, "오류", MessageBoxButtons.OK, MessageBoxIcon.Error); } public static DialogResult MsgQ(string m) { DialogResult dlg = MessageBox.Show(m, "확인", MessageBoxButtons.YesNo, MessageBoxIcon.Question); return dlg; } #endregion public static object getTagFromContextMenu(object sender) { ToolStripMenuItem menuItem = sender as ToolStripMenuItem; if (menuItem != null) { ContextMenuStrip calendarMenu = menuItem.Owner as ContextMenuStrip; if (calendarMenu != null) { var controlSelected = calendarMenu.SourceControl as Control; return controlSelected.Tag; } } return string.Empty; } 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 } } /// /// 현재실행중인폴더를 반환합니다. /// public static string CurrentPath { get { return AppDomain.CurrentDomain.BaseDirectory; } } /// /// 콤마와 줄바꿈등을 제거합니다. /// /// public static string ToCSVString(string src) { string strdata = src.Replace("\r", "").Replace("\n", ""); if (strdata.IndexOf(',') != -1) { strdata = "\"" + strdata + "\""; //180618 콤마가들어가는 csv 처리 } return strdata; } public static Boolean RunProcess(string file, string arg = "") { var fi = new System.IO.FileInfo(file); if (!fi.Exists) { Pub.log.AddE("Run Error : " + file); return false; } System.Diagnostics.Process prc = new System.Diagnostics.Process(); System.Diagnostics.ProcessStartInfo si = new System.Diagnostics.ProcessStartInfo(file); si.Arguments = arg; prc.StartInfo = si; prc.Start(); return true; } #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" /// /// 지정된 nic카드가 현재 목록에 존재하는지 확인한다. /// /// 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; } /// /// Ehternet Card 를 사용안함으로 설정합니다.(관리자권한필요) /// /// 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; } /// /// 이더넷카드를 사용함으로 설정합니다. /// /// 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 "watchdog" public static void WatchDog_Run() { System.IO.FileInfo fi = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "WatchCat.exe"); if (!fi.Exists) return; var Exist = CheckExistProcess("watchcat"); if (Exist) return; RunProcess(fi.FullName); } public static Boolean CheckExistProcess(string ProcessName) { foreach (var prc in System.Diagnostics.Process.GetProcesses()) { if (prc.ProcessName.StartsWith("svchost")) continue; if (prc.ProcessName.ToUpper() == ProcessName.ToUpper()) return true; } return false; } #endregion #region "web function" /// /// 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 } }