public static void PressKey(Char chChar, int nDelay) { try { String[] astrSplit = SplitHangle(chChar, true); if (astrSplit != null) { bool bHangle = astrSplit.Length == 3; // 한글 설정 if (bHangle) { if (GetKeyState(VK_HANGUL) != 1) { int nHangleKey = (int)Keys.HangulMode; // (int)Keys.HangulMode; // (int)Keys.ProcessKey keybd_event(nHangleKey, 0x00, KEYEVENTF_KEYDOWN, 0); Thread.Sleep(nDelay); keybd_event(nHangleKey, 0x00, KEYEVENTF_KEYUP, 0); Thread.Sleep(nDelay); } } foreach (String strSplit in astrSplit) { if (strSplit != String.Empty) { foreach (Char chSplit in strSplit) { bool bUpper = ('A' <= chSplit) & (chSplit <= 'Z'); bool bLower = ('a' <= chSplit) & (chSplit <= 'z'); int nValue; bool bShift; if (bUpper | bLower) { if (bHangle) { bShift = false; } else { bool bCapsLock = Control.IsKeyLocked(Keys.CapsLock); // true인 경우 대문자 입력 상태 bShift = bCapsLock != bUpper; } if (bUpper) { nValue = (int)chSplit; } else { nValue = (int)(chSplit.ToString().ToUpper()[0]); } } else { switch (chSplit) { case '~': bShift = true; nValue = (int)Keys.Oemtilde; break; case '_': bShift = true; nValue = (int)Keys.OemMinus; break; case '+': bShift = true; nValue = (int)Keys.Oemplus; break; case '{': bShift = true; nValue = (int)Keys.OemOpenBrackets; break; case '}': bShift = true; nValue = (int)Keys.OemCloseBrackets; break; case '|': bShift = true; nValue = (int)Keys.OemPipe; break; case ':': bShift = true; nValue = (int)Keys.OemSemicolon; break; case '"': bShift = true; nValue = (int)Keys.OemQuotes; break; case '<': bShift = true; nValue = (int)Keys.Oemcomma; break; case '>': bShift = true; nValue = (int)Keys.OemPeriod; break; case '?': bShift = true; nValue = (int)Keys.OemQuestion; break; case '!': bShift = true; nValue = (int)Keys.D1; break; case '@': bShift = true; nValue = (int)Keys.D2; break; case '#': bShift = true; nValue = (int)Keys.D3; break; case '$': bShift = true; nValue = (int)Keys.D4; break; case '%': bShift = true; nValue = (int)Keys.D5; break; case '^': bShift = true; nValue = (int)Keys.D6; break; case '&': bShift = true; nValue = (int)Keys.D7; break; case '*': bShift = true; nValue = (int)Keys.D8; break; case '(': bShift = true; nValue = (int)Keys.D9; break; case ')': bShift = true; nValue = (int)Keys.D0; break; case '`': bShift = false; nValue = (int)Keys.Oemtilde; break; case '-': bShift = false; nValue = (int)Keys.OemMinus; break; case '=': bShift = false; nValue = (int)Keys.Oemplus; break; case '[': bShift = false; nValue = (int)Keys.OemOpenBrackets; break; case ']': bShift = false; nValue = (int)Keys.OemCloseBrackets; break; case '\\': bShift = false; nValue = (int)Keys.OemPipe; break; case ';': bShift = false; nValue = (int)Keys.OemSemicolon; break; case '\'': bShift = false; nValue = (int)Keys.OemQuotes; break; case ',': bShift = false; nValue = (int)Keys.Oemcomma; break; case '.': bShift = false; nValue = (int)Keys.OemPeriod; break; case '/': bShift = false; nValue = (int)Keys.OemQuestion; break; case '1': bShift = false; nValue = (int)Keys.D1; break; case '2': bShift = false; nValue = (int)Keys.D2; break; case '3': bShift = false; nValue = (int)Keys.D3; break; case '4': bShift = false; nValue = (int)Keys.D4; break; case '5': bShift = false; nValue = (int)Keys.D5; break; case '6': bShift = false; nValue = (int)Keys.D6; break; case '7': bShift = false; nValue = (int)Keys.D7; break; case '8': bShift = false; nValue = (int)Keys.D8; break; case '9': bShift = false; nValue = (int)Keys.D9; break; case '0': bShift = false; nValue = (int)Keys.D0; break; case ' ': bShift = false; nValue = (int)Keys.Space; break; case '\x1b': bShift = false; nValue = (int)Keys.Escape; break; case '\b': bShift = false; nValue = (int)Keys.Back; break; case '\t': bShift = false; nValue = (int)Keys.Tab; break; case '\a': bShift = false; nValue = (int)Keys.LineFeed; break; case '\r': bShift = false; nValue = (int)Keys.Enter; break; default: bShift = false; nValue = 0; break; } } if (nValue != 0) { // Caps Lock의 상태에 따른 대/소문자 처리 if (bShift) { keybd_event((int)Keys.LShiftKey, 0x00, KEYEVENTF_KEYDOWN, 0); Thread.Sleep(nDelay); } // Key 눌림 처리함. //int nValue = Convert.ToInt32(chValue); //int nValue = (int)Keys.Oemtilde; keybd_event(nValue, 0x00, KEYEVENTF_KEYDOWN, 0); Thread.Sleep(nDelay); keybd_event(nValue, 0x00, KEYEVENTF_KEYUP, 0); Thread.Sleep(nDelay); // Caps Lock 상태를 회복함. if (bShift) { keybd_event((int)Keys.LShiftKey, 0x00, KEYEVENTF_KEYUP, 0); Thread.Sleep(nDelay); } } } } } // 한글 해제 if (bHangle) { CommonUtil.keybd_event((int)Keys.HangulMode, 0x00, CommonUtil.KEYEVENTF_KEYDOWN, 0); Thread.Sleep(nDelay); CommonUtil.keybd_event((int)Keys.HangulMode, 0x00, CommonUtil.KEYEVENTF_KEYUP, 0); Thread.Sleep(nDelay); } } } catch (Exception ex) { ex.ToString(); } }
protected override void Execute(CodeActivityContext context) { // Obtain the runtime value of the Text input argument string text = context.GetValue(this.Text); Rectangle detectPosition = new Rectangle(0, 0, 0, 0); this.ResultBool.Set(context, false); // 이미지 검색 Mat mat = CvInvoke.Imread(ImageFileName, Emgu.CV.CvEnum.ImreadModes.AnyColor); Image <Bgr, byte> source = new Image <Bgr, byte>(CaptureScreen()); Image <Bgr, byte> template = mat.ToImage <Bgr, Byte>(); int nRetry = 0; //이미지 검색 재시도 횟수 do { using (Image <Gray, float> result = source.MatchTemplate(template, Emgu.CV.CvEnum.TemplateMatchingType.CcoeffNormed)) { double[] minValues, maxValues; Point[] minLocations, maxLocations; result.MinMax(out minValues, out maxValues, out minLocations, out maxLocations); if (maxValues[0] > (double)Capacity / 100) //0.9 { detectPosition = new Rectangle(maxLocations[0], template.Size); this.OutImagePosLeft.Set(context, detectPosition.Left); this.OutImagePosTop.Set(context, detectPosition.Top); this.OutImagePosWidth.Set(context, detectPosition.Width); this.OutImagePosHeight.Set(context, detectPosition.Height); Debug.WriteLine(detectPosition.ToString()); //MessageBox.Show(detectPosition.ToString()); if (msActionType != "None" && msActionType != "") { //MessageBox.Show(String.Format("X : {0}, Y : {1}", detectPosition.Left + OffsetX, detectPosition.Top + OffsetY)); int nMousePosX = detectPosition.Left + OffsetX; int nMousePosY = detectPosition.Top + OffsetY; CommonUtil.MoveCursor(nMousePosX, nMousePosY); if (msActionType == "LButtonClick") { CommonUtil.DoMouseClickEvent(CommonUtil.MouseButtonType.Left, nMousePosX, nMousePosY); } if (msActionType == "RButtonClick") { CommonUtil.DoMouseClickEvent(CommonUtil.MouseButtonType.Right, nMousePosX, nMousePosY); } if (msActionType == "MButtonClick") { CommonUtil.DoMouseClickEvent(CommonUtil.MouseButtonType.Middle, nMousePosX, nMousePosY); } } break; } } nRetry++; Thread.Sleep(100); } while (nRetry < Retry); //nRetry 값이 Retry 값보다 크면 Image 찾기 실패 if (nRetry >= Retry) { return; } //Delay After 처리 if (mnDelayAfter > 0) { Thread.Sleep(mnDelayAfter); } this.ResultBool.Set(context, true); /* * Assign<bool> assign = new Assign<bool> * { * To = new ArgumentReference<bool>("ResultBool"), * Value = new InArgument<bool>(true) * }; * * Sequence sequence = new Sequence(); * sequence.Activities.Add(assign); * * this.Implementation = () => sequence; */ }