2013-10-21 53 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定时器,它的工作原理完美无瑕。

相关问题