2013-10-21 56 views
0

我最近做了這個小Windows窗體應用程序:的SendKeys與Windows發生衝突窗體應用程序按鈕

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Threading; 

namespace Spammer 
{ 
    public partial class Form1 : Form 
    { 
     Thread t1; 
     int delay, y = 1; 
     public Form1() 
     { 
      t1 = new Thread(send); 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      delay = int.Parse(textBox2.Text); 
      t1.Start(); 
     } 

     private void textBox1_TextChanged(object sender, EventArgs e) 
     { 

     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      y = 0; 
     } 
     private void send() 
     { 
      while (y == 1) 
      { 
       String textt = textBox1.Text; 
       Thread.Sleep(delay); 
       SendKeys.SendWait(textt); 
      } 
     } 

     private void label1_Click(object sender, EventArgs e) 
     { 

     } 

     private void textBox2_TextChanged(object sender, EventArgs e) 
     { 

     } 
    } 
} 

現在,它看起來像這樣:

它有一個延遲的文本框,文本發送文本,和2個按鈕:開始和停止。

現在,我試過運行它並將延遲設置爲1000ms。

當我按下「停止」按鈕時,它完全停止並且不再發送消息。

但是,當我輸入延遲非常小的延遲,如100毫秒,例如,按「停止」不會做任何事情。 它甚至很難點擊它,甚至當我點擊它時也不會停止發送消息。

這是爲什麼?我能以某種方式解決它嗎?

+0

這是因爲將表單放入等待模式導致它忽略輸入的持續時間。對於一個人來說,100ms幾乎是一直處於等待模式。 – Logarr

+0

嗯,當然,切換到另一個窗口並不容易,所以擊鍵最終會放在正確的位置。然後點擊停止按鈕。所有在100毫秒內,你必須非常敏捷。你需要重新考慮這個,它不是很實用。 –

+0

從文檔(http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.sendwait.aspx):「* SendKeys類易受計時問題的影響,一些開發人員曾經解決。*「。 – RBarryYoung

回答

0

好的,謝謝大家,幫忙!

我現在使用GUI定時器,它的工作原理完美無瑕。

相關問題