0

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

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

下面是一些片段。

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

提前致谢。

4

2 回答 2

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();
    }
于 2013-08-30T11:04:05.053 回答
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();
}
于 2013-08-30T10:50:14.223 回答