C# 在一个应用程序中刺激SendKey输入?

C# 在一个应用程序中刺激SendKey输入?,c#,winforms,sendkeys,C#,Winforms,Sendkeys,我正在尝试创建一个函数来刺激一些简单的用户输入,比如我的应用程序中的enter。 当更新进程正在运行时,该函数实际上正在backgroundworker后面运行。 但是,当我最小化应用程序并转到浏览器进行搜索时,例如,sendkey“enter”将在搜索栏上执行enter 我的问题是,如何仅在应用程序内部而不是在应用程序外部执行按键按下刺激 下面是一些片段 foreach (TextBox tb in this.panel2.Controls.OfType<TextBox>()) {

我正在尝试创建一个函数来刺激一些简单的用户输入,比如我的应用程序中的enter。 当更新进程正在运行时,该函数实际上正在backgroundworker后面运行。 但是,当我最小化应用程序并转到浏览器进行搜索时,例如,sendkey“enter”将在搜索栏上执行enter

我的问题是,如何仅在应用程序内部而不是在应用程序外部执行按键按下刺激

下面是一些片段

foreach (TextBox tb in this.panel2.Controls.OfType<TextBox>())
{
  if (tb.ReadOnly == false)
  {
     tb.Focus();
     SendKeys.SendWait("{Enter}");
  }                 
}                  
foreach(此.panel2.Controls.OfType()中的文本框tb)
{
if(tb.ReadOnly==false)
{
tb.Focus();
SendKeys.SendWait(“{Enter}”);
}                 
}                  

提前感谢。

您可以使用静态属性
Form.ActiveForm
来了解您的应用程序
是否暂时离开屏幕
,或者您的表单是否处于非活动状态,以便正确处理
发送键

Control lastControl;
public void StartSendingKey(){
  foreach (TextBox tb in this.panel2.Controls.OfType<TextBox>()) {
    if(lastControl != null && tb != lastControl) continue;//Skip the textBoxes receiving SendKeys
    if(Form.ActiveForm == null) {
       lastControl = tb;
       return;//check if your application is not active then exit method
    }
    //if(Form.ActiveForm != yourForm) return;//check if your form is not active then exit method
    if (!tb.ReadOnly) {
      tb.Focus();
      SendKeys.SendWait("{Enter}");
    }                 
  } 
  lastControl = null;//Set this if you want SendKeys many times repeatedly.
}
//Activated event handler for your Form1
private void Form1_Activated(object sender, EventArgs e){
   StartSendingKey();
}
Control-lastControl;
public void StartSendingKey(){
foreach(此.panel2.Controls.OfType()中的文本框tb){
如果(lastControl!=null&&tb!=lastControl)继续;//跳过接收发送键的文本框
if(Form.ActiveForm==null){
lastControl=tb;
return;//检查应用程序是否处于非活动状态,然后退出方法
}
//if(Form.ActiveForm!=yourForm)return;//检查表单是否处于非活动状态,然后退出方法
如果(!tb.ReadOnly){
tb.Focus();
SendKeys.SendWait(“{Enter}”);
}                 
} 
lastControl=null;//如果要多次重复发送密钥,请设置此选项。
}
//已激活窗体1的事件处理程序
私有void Form1\u已激活(对象发送方,事件参数e){
StartSendingKey();
}
我用过这个

    Timer tmr = new Timer();
    public Form1()
    {
        InitializeComponent();
        tmr.Tick += new EventHandler(tmr_Tick);
    }

    void tmr_Tick(object sender, EventArgs e)
    {
        if (ActiveForm == this)
            SendKeys.Send("{A}");
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        tmr.Start();
    }

您想在应用程序处于焦点时继续发送密钥吗?您好。谢谢你的回复。是的,我希望在应用程序处于焦点时继续发送密钥,并在我离开应用程序时阻止发送密钥。我怎样才能做到这一点?这就是为什么你不应该使用SendKeys。使用tb.AppendText()是没有意义的。这会降低发生意外的几率,但不会使其为零。嗨..谢谢你的回复..你提供的代码似乎有效,但我真正想要的是在表单未激活时保留它,在表单重新激活时恢复,而不是破坏它。@Therenho我不太明白你的意思。什么时候执行foreach循环?应该执行多少次?每个文本框1次。我的想法很直截了当。聚焦文本框并刺激回车键。当窗体处于非活动状态时,enter键将按住该键,并在窗体处于活动状态时恢复。有可能吗?@Therenho看到我的更新,如果它现在对你有帮助的话,尽管我仍然不明白你为什么想要这样的东西。