2009-11-23 3 views
0

im пытается создать автоматизированный инструмент для ввода текстовых полей с именами пользователей для приложения диспетчера на работе.проблема с клавиатурой имитировать событие пресса

Im возникли некоторые проблемы при попытке simultate нажатия клавиши, если inputArrayX [я] массив содержит, б, в

keyboardsim нажмет а, но если массив содержит а, Ь, Ь, с, c он по-прежнему выводит только abc, а не abbcc, как я этого хочу.

Кто-нибудь знает, что я здесь делаю неправильно?

private void MouseMacroChangeUser() 
    { 

     //move form to 0,0 
     this.Location = new Point(0, 0); 
     //set xy to mouse current pos 
     userMousePos(); 
     //inputBlocker(); 
     xX = int.Parse(this.Location.X.ToString()); 
     yY = int.Parse(this.Location.Y.ToString()); 
     defaultMousePos(); 
     //Thread.Sleep(600); 

     Cursor.Position = new Point(Cursor.Position.X + 739, Cursor.Position.Y + 162); 
     //Thread.Sleep(100); 
     MouseSimulator.DoubleClick(MouseButton.Left); 
     for (int i = 0; i < inputArrayX.Length; i++) 
     { 
      string tempX = inputArrayX[i].ToString(); 
      Keys keys = mapToKeyboardMacro(tempX); 
      KeyboardSimulator.KeyDown(keys); 
     } 
     KeyboardSimulator.KeyPress(Keys.Enter); 
     MouseSimulator.Click(MouseButton.Left); 

     //reset mouse to user pos. 
     Cursor.Position = new Point(x, y); 

     needUnblock = true; 

     //inputBlocker(); 
    } 

    private Keys mapToKeyboardMacro(string key) 
    { 
     if (key == "space") 
     { 
      return Keys.Space; 
     } 
     else if (key == "a") 
     { 
      return Keys.A; 
     } 
     else if (key == "b") 
     { 
      return Keys.B; 
     } 
     else if (key == "c") 
     { 
      return Keys.C; 
     } 
     else if (key == "d") 
     { 
      return Keys.D; 
     } 
    } 

ответ

2

Вы никогда не стреляете из команды KeyUp с вашего KeyboardSimulator. Когда клавиша опущена, ее нельзя снова нажать. Вы должны позволить KeyUp запускать новое событие KeyDown.

+0

ах OFC, благодаря спариванию за указание на это. – Darkmage

+0

Jeff у вас есть +1 от меня за то, что я первый. Не знаю, почему мой ответ принят, но я чувствовал, что это был хороший ответ, как у меня. –

+0

Спасибо, но я действительно думаю, что ваш ответ был немного яснее, потому что у него есть только один звонок, чтобы сделать с вашим и двумя, чтобы сделать с моим решением. В любом случае кошка получает кожу и день делается. Так что +1 от меня прямо у тебя. – Jeff

2

Попробуйте changing KeyboardSimulator.KeyDown(keys); использовать KeyboardSimulator.KeyPress(keys);

Я не уверен, если KeyDown события будут проверять состояние ключа, если это уже вниз ..

+0

очень хорошо, только то, что я был после. как я не понял этого. – Darkmage

Смежные вопросы