3

我创建了一个程序,它将通过使用 SendKeys 命令自动为我键入文本。当我按下开始按钮时,文本将按原样输入,当我按下开始按钮时,文本将停止输入。键入是通过使用间隔计时器完成的,该计时器将决定何时开始键入并在键入 2 行之间有一个简短的空间。

问题是,当我开始键入并键入部分消息然后在程序可以键入整个消息然后再次开始键入之前按停止时,消息将从停止的位置继续键入。例如,我想输入消息“123456789”。我开始输入,然后程序输入“1234”,然后按停止,这样程序就不会再输入了。然后,当我再次按开始时,程序应该从 1 开始输入,但我的程序输入的是“56789”。

停止时如何重置线路,然后重新开始?我试图将消息作为“消息”变量,当我按下停止按钮时它会被重置,但它不起作用。

这就是我设置输入每个间隔刻度的方式:

    private void Space(object sender, EventArgs e)
    {
        if (cbRandomLine.Checked || tickCount < lbMessage.Items.Count)
        {
            var index = cbRandomLine.Checked ? randomLine : tickCount;
            var item = lbMessage.Items[index].ToString();

            SendKeys.Send(item.Substring(currentChar++, 1));

            if (currentChar == item.Length)
            {
                SendKeys.Send("{enter}");
                tmrSpace.Enabled = false;
                currentChar = 0;
            }
        }

        tmrSpace.Interval = random.Next(10, 100);
    }

    private void Delay(object sender, EventArgs e)
    {
        if (delayCount == 0)
        {
            tmrDelay.Stop();
            tmrInterval.Start();
            lblDelay.Text = "Typing...";
        }
        else lblDelay.Text = "Typing in: " + delayCount;

        delayCount--;
    }

    // METHODS

    private void WhenStarted()
    {
        tickCount = 0;
        delayCount = 2;
        lbMessage.Enabled = false;
        txtMessage.Enabled = false;
        if (cbDelay.Checked)
        {
            lblDelay.Text = "Typing...";
            tmrInterval.Enabled = true;
        }
        else
        {
            lblDelay.Text = "Typing in: 3";
            tmrDelay.Enabled = true;
        }
        cbPause.Enabled = false;
        cbDelay.Enabled = false;
        cbRandomLine.Enabled = false;
        btnStart.Enabled = false;
        btnStop.Enabled = true;
        btnStop.Focus();
    }

    private void WhenStopped()
    {
        lblDelay.Text = string.Empty;
        whenStart = false;
        tickCount = 0;
        txtMessage.Text = string.Empty;
        lbMessage.Enabled = true;
        txtMessage.Enabled = true;
        cbPause.Enabled = true;
        cbDelay.Enabled = true;
        cbRandomLine.Enabled = true;
        btnStart.Enabled = true;
        btnStop.Enabled = false;
        btnStart.Focus();
        tmrDelay.Enabled = false;
        tmrInterval.Enabled = false;
        tmrSpace.Enabled = false;
    }

    private void SetInterval()
    {
        if (nudPlusMinus.Value == 0)
        {
            tmrInterval.Interval = int.Parse(nudInterval.Value.ToString());
        }
        else
        {
            tmrInterval.Interval = random.Next(int.Parse(nudInterval.Value.ToString()) - int.Parse(nudPlusMinus.Value.ToString()), int.Parse(nudInterval.Value.ToString()) + int.Parse(nudPlusMinus.Value.ToString()));
        }
    }

    private void ListBoxContentCheck()
    {
        if (lbMessage.Items.Count > 0)
        {
            btnStart.Enabled = true;
        }
        else
        {
            btnStart.Enabled = false;
        }
    }
4

1 回答 1

5

您需要重置currentChar变量。

于 2013-05-17T01:43:06.647 回答