我有一个应用程序,使用一个循环来键入文本的时间间隔。现在,我希望输入的文本在每个字符之间留有较小的空格。
我已经尝试过这段代码,但当我启动计时器时,在第二个计时器中输入仍在继续。在我的第一次,没有空格来计时我的行数。
private List<char> charList = new List<char>();
public AutoTyper()
{
InitializeComponent();
tmrInterval.Tick += new EventHandler(Interval);
tmrDelay.Tick += new EventHandler(Delay);
tmrSpace.Tick +=new EventHandler(charSpaces);
txtText.TextChanged += new EventHandler(TextChanged);
tbType.SelectedIndexChanged += new EventHandler(IndexChanged);
}
private void Interval(object sender, EventArgs e)
{
if (cbPause.Checked == false)
{
SendKeys.Send(txtText.Text + "{enter}");
if (tbType.SelectedTab == tbInterval)
{
tmrInterval.Interval = int.Parse(nudInterval.Value.ToString());
}
if (tbType.SelectedTab == tbRange)
{
tmrInterval.Interval = random.Next(int.Parse(nudMin.Value.ToString()), int.Parse(nudMax.Value.ToString()));
}
}
else if (cbPause.Checked == true)
{
tmrSpace.Enabled = true;
}
}
private void charSpaces(object sender, EventArgs e)
{
Random random = new Random();
tmrSpace.Interval = random.Next(200, 400);
foreach (char character in charList)
SendKeys.Send(character.ToString());
SendKeys.Send("{enter}");
}编辑,我已经尝试使用线程睡眠版本,所以我已经删除了次数。我现在所拥有的一切都是跟随,但它停止了我的电脑。
private void Interval(object sender, EventArgs e)
{
if (cbPause.Checked == false)
{
SendKeys.Send(txtText.Text + "{enter}");
if (tbType.SelectedTab == tbInterval)
{
tmrInterval.Interval = int.Parse(nudInterval.Value.ToString());
}
if (tbType.SelectedTab == tbRange)
{
tmrInterval.Interval = random.Next(
int.Parse(nudMin.Value.ToString()),
int.Parse(nudMax.Value.ToString()));
}
}
else if (cbPause.Checked == true)
{
Random random = new Random();
foreach (char character in charList)
{
SendKeys.Send(character.ToString());
Thread.Sleep(random.Next(400, 500));
}
SendKeys.Send("{enter}");
}
}发布于 2012-01-08 11:33:16
使用计时器比暂停线程要好得多。我是这样做的:
private void Space(object sender, EventArgs e)
{
SendKeys.Send(txtText.Text.Substring(b++, 1));
tmrSpace.Interval = random.Next(50, 150);
if (b == txtText.TextLength)
{
tmrSpace.Enabled = false;
SendKeys.Send("{enter}");
}
}
private void Interval(object sender, EventArgs e)
{
if (cbPause.Checked)
{
b = 0;
tmrSpace.Interval = random.Next(50, 150);
tmrSpace.Enabled = true;
}
else
{
SendKeys.Send(txtText.Text + "{enter}");
if (tbType.SelectedTab == tbRange) tmrInterval.Interval = random.Next(int.Parse(nudMin.Value.ToString()), int.Parse(nudMax.Value.ToString()));
}
}发布于 2012-01-07 05:00:50
如果希望每个字符之间有较短的空格,我只需使用Thread.Sleep()即可。
Random r = new Random();
foreach (char character in charList)
{
SendKeys.Send(character.ToString());
// sleep for between 200 and 400 milliseconds
Thread.Sleep(r.Next(200, 400));
}使用计时器来做这样的事情太夸张了。
https://stackoverflow.com/questions/8764338
复制相似问题