2015-07-19 2 views
2

Я думаю, что название объясняет то, что я прошу.C# Ждать отправки SendKeys для завершения отправки перед выполнением следующей строки кода?

Мне нужен SendKeys, чтобы закончить отправку ключей до DoMouseClick, или вся моя программа бесполезна.

// Simulate the keyboard typing the value of 'i' 
SendKeys.SendWait(i.ToString()); 

// Simulate mouse click so the Accept button in-game is clicked 
DoMouseClick(); 

Я попытался с помощью Thread.Sleep, но я надеялся, что вы, ребята, были некоторые лучшие предложения о том, как исправить мою проблему.

+0

Мы можем вычислить 'SendKeys' в другом потоке и' Join() 'эту тему. http://stackoverflow.com/questions/1584062/how-to-wait-for-thread-to-finish-with-net –

+0

Я думал, что 'SendKeys' подождал, прежде чем вернуться? MSDN: _ «Использовать SendWait для отправки нажатий клавиш или комбинаций нажатий клавиш в активном приложении ** и дождаться обработки сообщений нажатия клавиши **. Вы можете использовать этот метод для отправки нажатий клавиш в приложение и ожидания любых процессов, которые начиная с нажатия клавиш, которые должны быть завершены. Это может быть важно, если другое приложение должно завершиться до того, как ваше приложение сможет продолжить.] (https://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys. sendwait (v = vs.110) .aspx) "_ – MickyD

+0

Примерно в половине пути вниз по документации:' Кроме того, когда класс SendKeys использует новую реализацию, метод SendWait не будет ждать обработки сообщений, когда они будут отправлены другому обработать. ' – Xenolightning

ответ

3

Использование Input Simulator. Это намного лучше, чем SendKeys, и обрабатывает краевые случаи внутри.

Install-Package InputSimulator

var simulator = new InputSimulator(); 

//simulate what you need 
simulator.Keyboard.KeyPress(VirtualKeyCode.VK_I); 
simulator.Keyboard.TextEntry(i.ToString()); 

simulator.Mouse.LeftButtonDoubleClick(); 
-1

Я не уверен, что это помогает, но если не критиковать это сообщение, я могу попытаться помочь в вашей ситуации.

private void Form1_DoubleClick(object sender, MouseEventArgs e) 
    { 
     // Send the enter key; since the tab stop of Button1 is 0, this 
     // will trigger the click event. 
     SendKeys.SendWait("{ENTER}"); 
     CallAfterSend(); 
    } 

    private void CallAfterSend() 
    { 
     MessageBox.Show("Had to hit enter first"); 
    } 

    private void button1_Click_1(object sender, EventArgs e) 
    { 
     MessageBox.Show("Click here!"); 
    } 
+1

Спасибо за сообщение! но я не понимаю, какая разница, это в основном уже то, что мой код выглядит. – DooMLaZyPro

+0

Итак, вы проголосовали за меня за это. Это дешево. В любом случае, возможно, вам стоит попробовать опубликовать, почему это не работает. Этот вопрос кажется мне расплывчатым. Он работает так, как должен. Как вы пытаетесь его использовать? –

+0

Для записи я не тот, кто проголосовал за вас. – DooMLaZyPro

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