我正在尝试创建一个函数来激发一些简单的用户输入,比如输入我的应用程序。 当更新过程正在运行时,该功能实际上在后台工作者后面运行。 但是,当我最小化应用程序并前往浏览器进行一些搜索时,sendkey“enter”将在搜索栏上执行输入。
我的问题是如何才能在应用程序中执行按键刺激,而不是在应用程序之外?
以下是一些摘录。
foreach (TextBox tb in this.panel2.Controls.OfType<TextBox>())
{
if (tb.ReadOnly == false)
{
tb.Focus();
SendKeys.SendWait("{Enter}");
}
}
提前致谢。
答案 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();
}