在应用程序中刺激SendKey输入?

时间:2013-08-30 09:53:38

标签: c# winforms sendkeys

我正在尝试创建一个函数来激发一些简单的用户输入,比如输入我的应用程序。 当更新过程正在运行时,该功能实际上在后台工作者后面运行。 但是,当我最小化应用程序并前往浏览器进行一些搜索时,sendkey“enter”将在搜索栏上执行输入。

我的问题是如何才能在应用程序中执行按键刺激,而不是在应用程序之外?

以下是一些摘录。

foreach (TextBox tb in this.panel2.Controls.OfType<TextBox>())
{
  if (tb.ReadOnly == false)
  {
     tb.Focus();
     SendKeys.SendWait("{Enter}");
  }                 
}                  

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以使用静态属性Form.ActiveForm来了解您的应用temporarily goes away from screen或您的表单是否处于有效状态,无法正确处理SendKey

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();
}

答案 1 :(得分:1)

我用过这个

    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();
    }