 9a7d1d27c7
			
		
	
	9a7d1d27c7
	
	
	
		
			
			- UIControl 프로젝트 구조 변경 (CapCleaningControl → Sub/UIControl) - arAjinextek 라이브러리 통합 및 구조 개선 - 새로운 arAjinextek_Union 프로젝트 추가 - 솔루션 파일에 README.md 추가 - QR 모드에서 WMS RCV 태그 인식 기능 강화 - 데이터베이스 스키마 업데이트 및 관련 클래스 수정 - 프린터 및 바코드 장치 연동 로직 개선 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			814 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			814 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 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<DataSet1.K4EE_Component_Reel_SID_InformationRow> 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
 | |
| 
 | |
| 		// <summary>
 | |
| 		/// 현재위치를 기준으로 폴더명을 구성합니다.
 | |
| 		/// </summary>
 | |
| 		/// <param name="subname"></param>
 | |
| 		/// <returns></returns>
 | |
| 		public static string MakePath(params string[] subname)
 | |
| 		{
 | |
| 			List<string> pathlist = new List<string>();
 | |
| 			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", "<br/>"));
 | |
| 				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<string, string> 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<string, string>();
 | |
| 			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<T>(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];
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// 현재실행중인폴더를 반환합니다.
 | |
| 		/// </summary>
 | |
| 		public static string CurrentPath
 | |
| 		{
 | |
| 			get
 | |
| 			{
 | |
| 				return AppDomain.CurrentDomain.BaseDirectory;
 | |
| 			}
 | |
| 		}
 | |
| 		/// <summary>
 | |
| 		/// 콤마와 줄바꿈등을 제거합니다.
 | |
| 		/// </summary>
 | |
| 		/// <returns></returns>
 | |
| 		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"
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// 지정된 nic카드가 현재 목록에 존재하는지 확인한다.
 | |
| 		/// </summary>
 | |
| 		/// <returns></returns>
 | |
| 		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;
 | |
| 		}
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// Ehternet Card 를 사용안함으로 설정합니다.(관리자권한필요)
 | |
| 		/// </summary>
 | |
| 		/// <param name="NicName"></param>
 | |
| 		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<String> NICCardList()
 | |
| 		{
 | |
| 			List<String> Retval = new List<string>();
 | |
| 			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;
 | |
| 		}
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// 이더넷카드를 사용함으로 설정합니다.
 | |
| 		/// </summary>
 | |
| 		/// <param name="NicName"></param>
 | |
| 		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"
 | |
| 		/// <summary>
 | |
| 		/// URL로부터 문자열을 수신합니다.
 | |
| 		/// </summary>
 | |
| 		/// <param name="url"></param>
 | |
| 		/// <param name="isError"></param>
 | |
| 		/// <returns></returns>
 | |
| 		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
 | |
| 
 | |
| 	}
 | |
| }
 |