2013-03-27 20 views
2

即時嘗試使一個vb.net應用程序,它發送到任何應用程序,我激活,但對於我這樣的初學者,我開始在文本框中使用它。但我的問題是我點擊開始按鈕啓動發送鍵後,我的應用程序掛起。所以這裏是我的代碼。vb.net sendkeys到任何活動的應用程序

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     If Button1.Text = "Start" Then 
      Button1.Text = "Stop" 
      TextBox1.Focus() 
      Do While Button1.Text <> "Start" 
       SendKeys.Send("{a}") 
       Thread.Sleep(1000) 
      Loop 
     Else 
      Button1.Text = "Start" 
     End If 
    End Sub 

這樣的想法是,如果我按Button1的,文本將變爲「停止」,那麼它將專注於TextBox1中,然後它會做循環,直到的SendKeys我按下停止。但我沒有運氣。希望有人可以幫助我,並添加一些代碼,即使我更改活動窗口並保持sendkeys或keystroke。 thx

回答

1

它掛起的原因是因爲你正在一個線程中完成所有這些。點擊發生,上面的代碼在單個線程中被觸發。當輸入While循環時,它將發送密鑰,然後休眠整個線程一秒鐘,然後再次循環,因爲循環條件仍然爲真。

我建議你做的,而不是設置一個計時器,每運行1000毫秒,然後在定時器功能,把類似下面的代碼:

If Button1.Text <> "Start" Then 
    SendKeys.Send("{a}") 
End If 

,然後改變你的點擊按鈕的代碼到簡單得多:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     If Button1.Text = "Start" Then 
      Button1.Text = "Stop" 
      TextBox1.Focus() 
     Else 
      Button1.Text = "Start" 
     End If 
End Sub 

這種情況正在改變使用兩個不同的事件處理程序,一個按鈕點擊,和一個定時器,每次發射,其相應的事情發生時,每個被調用。剩下的時間,你的程序什麼都不做,這是一件好事,因爲它不會浪費資源。

這有道理嗎?

0

question有一個鏈接到MSDN文章和一些示例代碼的答案。它應該做你想做的(長期)。在短期內回答你的'爲什麼是懸而未決的問題',你是「掛起」,因爲你在一個單線程循環檢查文本字段的值。

相關問題