using System; using System.Collections.Generic; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Management; using System.Net; using System.Net.NetworkInformation; using System.Runtime.Serialization.Formatters.Binary; using System.Text; using System.Windows.Forms; namespace SIDConvInfoEditorII { public static partial class UTIL { public static bool ImportSIDInfo(DataSet1.K4EE_Component_Reel_SID_InformationDataTable Component_Reel_SID_Information, String InputFileName, System.Windows.Forms.ProgressBar progressBar1 = null) { //엑셀을 읽어와서 처리한다. var fi = new System.IO.FileInfo(InputFileName); var ext = fi.Extension.ToLower(); libxl.Book book; if (ext == ".xlsx") book = new libxl.XmlBook(); else if (ext == ".xls") book = new libxl.BinBook(); else return false; var keyinfo = Properties.Settings.Default.libxl.Split('/'); book.setKey(keyinfo[0], keyinfo[1]); book.load(fi.FullName); var sheet = book.getSheet(0); var cs = sheet.firstCol(); var ce = sheet.lastCol(); var rs = sheet.firstRow(); var re = sheet.lastRow(); if (progressBar1 != null) { progressBar1.Minimum = 0; progressBar1.Maximum = re; progressBar1.Value = 0; } if (rs == 0) rs += 1; int cntA = 0; //int cntU = 0; for (int row = rs; row <= re; row++) { //update progress bar if (progressBar1 != null) { if (progressBar1.Value < progressBar1.Maximum) progressBar1.Value += 1; } var cCustCode = sheet.readStr(row, 0); var cSID = sheet.readStr(row, 1); var cPartNo = sheet.readStr(row, 2); if (cCustCode.isEmpty() == false && cCustCode.Length != 4) cCustCode = cCustCode.PadLeft(4, '0'); if (cSID.isEmpty() && cCustCode.isEmpty()) break; // //if (cSID.StartsWith("10")) //{ EnumerableRowCollection plist = null; plist = Component_Reel_SID_Information.Where(t => t.MC == PUB.setting.McName && t.SID == cSID && t.CustCode == cCustCode && t.PartNo == cPartNo); if (plist == null || plist.Any() == false) { //존재하지않으면 추가한다. var newdr = Component_Reel_SID_Information.NewK4EE_Component_Reel_SID_InformationRow(); newdr.CustCode = cCustCode; newdr.SID = cSID; newdr.PartNo = cPartNo; newdr.MC = PUB.setting.McName; newdr.wdate = DateTime.Now; Component_Reel_SID_Information.AddK4EE_Component_Reel_SID_InformationRow(newdr); cntA += 1; } else { //있다면 업데이트 해준다. //foreach (var item in plist) //{ // if (cSID.isEmpty() == false) // { // item.SID = cSID; ; // item.EndEdit(); // cntU += 1; // } //} } //} } PUB.log.Add($"Import SID Information : {cntA}"); return true; } public static bool GetBitState(UInt16 val, int idx) { UInt16 offset = 1; offset = (UInt16)(offset << idx); return (val & offset) > 0; } public static UInt16 SetBitState(UInt16 val, int idx, bool state) { UInt16 offset = 0x01; offset = (UInt16)(offset << idx); if (state == false) offset = (UInt16)~offset; if (state) { return (UInt16)(val | offset); } else { return (UInt16)(val & offset); } } public static Control GetContextOwnerControl(object sender) { if (sender is ToolStripMenuItem menuitem) { if (menuitem.Owner is ContextMenuStrip menu) { return menu.SourceControl; } } return null; } public static double GetFreeSpace(string driveletter) { try { var di = new System.IO.DriveInfo(driveletter); var freespace = di.TotalFreeSpace; var totalspace = di.TotalSize; var freeSpaceRate = (freespace * 1.0 / totalspace) * 100.0; return freeSpaceRate; } catch { return 100.0; } } #region "MessageBox" public static void MsgI(string m, Boolean legacy = false) { MessageBox.Show(m, "확인", MessageBoxButtons.OK, MessageBoxIcon.Information); } public static void MsgE(string m, Boolean legacy = false) { MessageBox.Show(m, "오류", MessageBoxButtons.OK, MessageBoxIcon.Error); } public static DialogResult MsgQ(string m, string btOK = "확인", string btCancel = "아니오") { var dlg = MessageBox.Show(m, "확인", MessageBoxButtons.YesNo, MessageBoxIcon.Question); return dlg; } #endregion // /// 현재위치를 기준으로 폴더명을 구성합니다. /// /// /// public static string MakePath(params string[] subname) { List pathlist = new List(); pathlist.Add(CurrentPath); if (subname.Length > 0) pathlist.AddRange(subname); return System.IO.Path.Combine(pathlist.ToArray()); } public static Boolean SendMail(string title, string body, string from, string[] tolist, string file = "") { //메일을 전송하고 나간다 Chilkat.MailMan mailman = new Chilkat.MailMan(); bool success = mailman.UnlockComponent("BLUPRT.CBX012020_rzDFf7pQAsCS"); if (success != true) { UTIL.MsgE("메일 전송이 실패되었습니다\n잠시 후 다시 시도하세요", true); return false; } else { mailman.SmtpHost = "10.101.10.6"; mailman.SmtpPort = 25; Chilkat.Email email = new Chilkat.Email(); email.Subject = title; //email.Body = this.textBox1.Text; email.SetHtmlBody(body.Replace("\r", "").Replace("\n", "
")); email.From = from; foreach (var to in tolist) email.AddTo(to.Substring(0, to.IndexOf('@')), to); if (System.IO.File.Exists(file)) email.AddFileAttachment(file); success = mailman.SendEmail(email); if (success != true) { UTIL.MsgE("발송 실패", true); return false; } success = mailman.CloseSmtpConnection(); if (success != true) { UTIL.MsgE("Connection to SMTP server not closed cleanly.", true); return false; } } return true; } public static Dictionary ComputerInfo() { string ip = ""; string mac = ""; // string prgmName = Application.ProductName; var nif = NetworkInterface.GetAllNetworkInterfaces(); var host = Dns.GetHostEntry(Dns.GetHostName()); string fullname = System.Net.Dns.GetHostEntry("").HostName; foreach (IPAddress r in host.AddressList) { string str = r.ToString(); if (str != "" && str.Substring(0, 3) == "10.") { ip = str; break; } } string rtn = string.Empty; ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled='TRUE'"); ManagementObjectSearcher query1 = new ManagementObjectSearcher(oq); foreach (ManagementObject mo in query1.Get()) { string[] address = (string[])mo["IPAddress"]; if (address[0] == ip && mo["MACAddress"] != null) { mac = mo["MACAddress"].ToString(); break; } } var username = System.Environment.UserName; var retval = new Dictionary(); retval.Add("IP", ip); retval.Add("MAC", mac); retval.Add("USER", username); retval.Add("HOST", fullname); return retval; } public static string ScreenCaptrue(int _BitmapWidth, int _BitmapHeight, Point ptSouce, Boolean prompt) { try { Bitmap bitmap = new Bitmap(_BitmapWidth, _BitmapHeight); Graphics _graphic = Graphics.FromImage(bitmap); _graphic.CopyFromScreen(ptSouce, new Point(0, 0), new Size(_BitmapWidth, _BitmapHeight)); string savefile = System.IO.Path.Combine(UTIL.CurrentPath, "ScreenShot", DateTime.Now.ToString("yyyyMMddHHmmss") + ".png"); System.IO.FileInfo grpath = new FileInfo(savefile); if (!grpath.Directory.Exists) grpath.Directory.Create(); bitmap.Save(grpath.FullName, System.Drawing.Imaging.ImageFormat.Png); if (prompt) UTIL.MsgI("화면 캡쳐 성공\n" + "위치:" + grpath.Directory.FullName + "\n" + "파일명: " + grpath.Name); return grpath.FullName; } catch (Exception ex) { if (prompt) UTIL.MsgE("화면 캡쳐 실패\n" + ex.Message); return string.Empty; } } //public static bool SendMail(string seqdate, string seqno) //{ // Chilkat.MailMan mailman = new Chilkat.MailMan(); // bool success = mailman.UnlockComponent("BLUPRT.CBX012020_rzDFf7pQAsCS"); // if (success != true) // { // Debug.WriteLine(mailman.LastErrorText); // return false; // } // mailman.SmtpHost = "10.101.10.6"; // mailman.SmtpPort = 25; // Create a new email object // Chilkat.Email email = new Chilkat.Email(); // var mailform = PUB.mailForm.FirstOrDefault(); // if (mailform == null) // return false; // var subject = mailform.subject.Trim(); // subject = subject.Replace("{seqdate}", seqdate); // subject = subject.Replace("{seqno}", seqno); // var buffer = System.IO.File.ReadAllText(Util.CurrentPath + "\\Mailform.html"); // 시드별집계데이터생성 // System.Text.StringBuilder sbFileSID = new StringBuilder(); // System.Text.StringBuilder sbFileREEL = new StringBuilder(); // sbFileSID.AppendLine(string.Format("NO,SID,작업수량,예정수량,UNIT")); // sbFileREEL.AppendLine(string.Format("NO,SID,REEL,QTY,TIME")); // int cntrid = 1; // System.IO.File.WriteAllText(Util.CurrentPath + "\\result_sidsummary.csv", sbFileSID.ToString(), System.Text.Encoding.Default); // System.IO.File.WriteAllText(Util.CurrentPath + "\\result_reelist.csv", sbFileREEL.ToString(), System.Text.Encoding.Default); // 메일본문의 내용 치환 // var contents = buffer.Trim(); // contents = contents.Replace("{seqdate}", seqdate); // contents = contents.Replace("{seqno}", seqno); // email.Subject = subject; // email.SetHtmlBody(contents); // email.From = "ReelSorter"; // email.AddFileAttachment(Util.CurrentPath + "\\result_sidsummary.csv"); // email.AddFileAttachment(Util.CurrentPath + "\\result_reelist.csv"); // System.Text.StringBuilder maillist = new StringBuilder(); // foreach (DataSet1.MailRecipientRow r in PUB.mailList.Rows) // { // success = email.AddTo(r.Name, r.Address); // maillist.Append(string.Format("{0}({1})", r.Name, r.Address)); // } // success = mailman.SendEmail(email); // if (success != true) // { // Debug.WriteLine(mailman.LastErrorText); // return false; // } // success = mailman.CloseSmtpConnection(); // if (success != true) // { // Debug.WriteLine("Connection to SMTP server not closed cleanly."); // PUB.log.AddE("메일 발송 실패(" + maillist.ToString() + ")"); // } // PUB.log.AddI("메일 발송 완료(" + maillist.ToString() + ")"); // return true; //} public static T FileDeSerialize(string file) { T Retval = default(T); if (System.IO.File.Exists(file) == false) return Retval; var xmlSerializer = new BinaryFormatter(); using (FileStream fs = new FileStream(file, FileMode.Open)) { try { var value = xmlSerializer.Deserialize(fs); Retval = (T)Convert.ChangeType(value, typeof(T)); } catch (Exception ex) { PUB.log.AddE("File DeSerialized Error : " + ex.Message); } //Retval = (T)xmlSerializer.Deserialize(fs); } return Retval; } public static void FileSerialize(object data, string file) { if (data == null) return; var xmlSerializer = new BinaryFormatter(); using (FileStream fs = new FileStream(file, FileMode.Create)) { xmlSerializer.Serialize(fs, data); } } public static void splitID(string ID, out string ww, out string seq) { if (ID.Length < 3) { ww = ""; seq = ""; } else { try { ww = ID.Substring(0, 2);// int.Parse(ID.Substring(0, 2)); seq = ID.Substring(2);// int.Parse(ID.Substring(2)); } catch (Exception ex) { PUB.log.AddE("slit id eerr" + ex.Message); ww = ""; seq = "-1"; } } } public static void ScreenCaptrue(int _BitmapWidth, int _BitmapHeight, Point ptSouce) { try { Bitmap bitmap = new Bitmap(_BitmapWidth, _BitmapHeight); Graphics _graphic = Graphics.FromImage(bitmap); _graphic.CopyFromScreen(ptSouce, new Point(0, 0), new Size(_BitmapWidth, _BitmapHeight)); string savefile = System.IO.Path.Combine(UTIL.CurrentPath, "ScreenShot", DateTime.Now.ToString("yyyyMMddHHmmss") + ".png"); System.IO.FileInfo grpath = new FileInfo(savefile); if (!grpath.Directory.Exists) grpath.Directory.Create(); bitmap.Save(grpath.FullName, System.Drawing.Imaging.ImageFormat.Png); UTIL.MsgI("화면 캡쳐 성공\n" + "위치:" + grpath.Directory.FullName + "\n" + "파일명: " + grpath.Name); } catch (Exception ex) { UTIL.MsgE("화면 캡쳐 실패\n" + ex.Message); } } 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 void CopyData(System.Data.DataRow drSrc, System.Data.DataRow drDes) { if (drDes == null || drSrc == null) return; foreach (System.Data.DataColumn col in drSrc.Table.Columns) { if (col.ColumnName.ToUpper() == "IDX") continue; drDes[col.ColumnName] = drSrc[col.ColumnName]; } } /// /// 현재실행중인폴더를 반환합니다. /// public static string CurrentPath { get { return AppDomain.CurrentDomain.BaseDirectory; } } /// /// 콤마와 줄바꿈등을 제거합니다. /// /// public static string ToCSVString(string src) { string retval = src.Replace("\r", "").Replace("\n", "").Replace(",", ""); return retval; } 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 != null) return; RunProcess(fi.FullName); } public static System.Diagnostics.Process CheckExistProcess(string ProcessName) { foreach (var prc in System.Diagnostics.Process.GetProcesses()) { if (prc.ProcessName.StartsWith("svchost")) continue; if (prc.ProcessName.ToUpper() == ProcessName.ToUpper()) return prc; } return null; } #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 } }