private bool GetFields(Image image, out OriginInputFileds focusedField, out OriginInputFileds checkedField) { focusedField = OriginInputFileds.None; checkedField = OriginInputFileds.None; try { #region Get UI Fields State using (var tr = new ImageTraverser(image)) { bool usernameFocused = tr[45, 187] == ColorTranslator.FromHtml("#EDBD69").ToArgb(); bool passwordFocused = tr[45, 237] == ColorTranslator.FromHtml("#EDBD69").ToArgb(); bool keepPasswordFocused = tr[45, 370] == ColorTranslator.FromHtml("#EEBD67").ToArgb(); bool keepPasswordChecked = tr[54, 366] == ColorTranslator.FromHtml("#FF9900").ToArgb(); bool invisibleFocused = tr[45, 367] == ColorTranslator.FromHtml("#EEBD67").ToArgb(); bool invisibleChecked = tr[54, 394] == ColorTranslator.FromHtml("#FF9900").ToArgb(); bool forgotPasswordFocused = tr[200, 271] == ColorTranslator.FromHtml("#000000").ToArgb(); bool createAccountFocused = tr[142, 447] == ColorTranslator.FromHtml("#000000").ToArgb(); if (passwordFocused) { focusedField = OriginInputFileds.Password; } if (usernameFocused) { focusedField = OriginInputFileds.Username; } if (forgotPasswordFocused) { focusedField = OriginInputFileds.ForgotPassword; } if (keepPasswordFocused) { focusedField = OriginInputFileds.StayConnected; } if (invisibleFocused) { focusedField = OriginInputFileds.Invisible; } if (createAccountFocused) { focusedField = OriginInputFileds.CreateAccount; } if (keepPasswordChecked) { checkedField = checkedField ^ OriginInputFileds.StayConnected; } if (invisibleChecked) { checkedField = checkedField ^ OriginInputFileds.Invisible; } return true; } #endregion } catch { return false; } }
private int GetInitialSteps(OriginInputFileds field) { switch (field) { case OriginInputFileds.Password: return 5; case OriginInputFileds.Connect: case OriginInputFileds.ForgotPassword: return 4; case OriginInputFileds.StayConnected: return 3; case OriginInputFileds.Invisible: return 2; case OriginInputFileds.CreateAccount: return 1; case OriginInputFileds.None: return 2; default: return 0; } }
private bool FocusField(Process originProcess, OriginInputFileds field, int tries) { WindowInfo window = new WindowInfo(originProcess.MainWindowHandle); WindowsInput.KeyboardSimulator sim = new WindowsInput.KeyboardSimulator(); for (int i = 0; i < tries; i++) { try { #if !DEBUG User32.BlockInput(true); #endif //reactivate window window.BringToFront(); window.Activate(); //create input variables OriginInputFileds focusedField = OriginInputFileds.None; OriginInputFileds checkedField = OriginInputFileds.None; bool aero_on = false; //check if aero is on if (Environment.OSVersion.Version.Major > 5) Win32API.Modules.DwmApi.DwmIsCompositionEnabled(out aero_on); //grab snapshot var image = aero_on ? Imaging.CaptureScreenRegion(originProcess.MainWindowHandle) : Imaging.CaptureWindowImage(originProcess.MainWindowHandle); if (this.GetFields(image, out focusedField, out checkedField)) { if (focusedField == field) return true; } //send tab sim.KeyPress(WindowsInput.Native.VirtualKeyCode.TAB); //pause System.Threading.Thread.Sleep(250); } catch { throw; } finally { #if !DEBUG User32.BlockInput(false); #endif } } return false; }