vb.net将密钥发送到任何活动应用程序

vb.net将密钥发送到任何活动应用程序,vb.net,sendkeys,Vb.net,Sendkeys,我试图制作一个vb.net应用程序,它可以向我激活的任何应用程序发送密钥,但对于像我这样的初学者,我开始在textbox上使用它。但我的问题是,在我单击开始按钮启动发送键后,我的应用程序挂起。这是我的代码 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If Button1.Text = "Start" Then

我试图制作一个vb.net应用程序,它可以向我激活的任何应用程序发送密钥,但对于像我这样的初学者,我开始在textbox上使用它。但我的问题是,在我单击开始按钮启动发送键后,我的应用程序挂起。这是我的代码

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
Private子按钮1\u单击(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理按钮1。单击
如果按钮1.Text=“开始”,则
按钮1.Text=“停止”
TextBox1.Focus()
执行时按钮1.文本“开始”
SendKeys.Send(“{a}”)
线程。睡眠(1000)
环
其他的
按钮1.Text=“开始”
如果结束
端接头

因此,如果我按下按钮1,文本将变为“停止”,然后它将聚焦于textbox1,然后它将执行循环和发送键,直到我按下停止键。但是我没有运气。希望有人能帮助我,并添加一些代码,即使我改变活动窗口,并保持发送键或击键工作。thx挂起的原因是因为您在一个线程内完成了所有这一切。单击发生,并且在单个线程中触发上面的代码。当进入
While
循环时,它发送键,然后使整个线程休眠一秒钟,然后再次循环,因为循环条件仍然为真

我建议您改为设置一个计时器,每1000毫秒运行一次,然后在该计时器函数中,输入以下代码:

If Button1.Text <> "Start" Then
    SendKeys.Send("{a}")
End If
这将更改为使用两个不同的事件处理程序,一个用于按钮单击,另一个用于每次触发的计时器,当适当的事情发生时,每个事件处理程序都会被调用。剩下的时间里,你的程序什么也不做,这是一件好事,因为它不会浪费资源

这有意义吗?

这有一个答案,带有指向MSDN文章的链接和一些示例代码。它应该做你想做的(长期)。在短期内,为了回答您的“为什么挂起”问题,您是“挂起”的,因为您在单个线程的循环中检查文本字段的值

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