2015-07-19 56 views
2

我認爲標題解釋了我所要求的。C#等待SendKeys在執行下一行代碼之前完成發送?

我需要SendKeysDoMouseClick方法或我的整個程序無用之前完成發送密鑰。

// 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'在另一個線程和'加入()'這個線程。 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

相關問題