vb.net sendkeys到任何活动的应用程序

时间:2013-03-27 23:48:18

标签: vb.net sendkeys

我试图制作一个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

所以我的想法是,如果按下按钮1,文本将变为“停止”,然后它将聚焦于textbox1,然后它将执行循环和发送键,直到我按下停止。但我没有运气。希望有人可以帮助我,并添加一些即使我更改活动窗口并继续发送键或按键的代码。 THX

2 个答案:

答案 0 :(得分: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

这正在改为使用两个不同的事件处理程序,一个用于按钮单击,另一个用于每次定时触发,每个事件在适当的事情发生时被调用。其余的时间,你的程序什么都不做,这是一件好事,因为它不会浪费资源。

这有意义吗?

答案 1 :(得分:0)

question有一个答案,其中包含指向MSDN文章的链接以及一些示例代码。它应该做你想要的(长期)。在短期内回答你的'为什么是悬挂问题',你是“悬挂”,因为你在一个线程上循环检查文本字段的值。