在backgroundworker中使用SendKeys.SendWait时,为什么我能听到3秒钟的哔哔声?

时间:2018-09-23 14:16:30

标签: c# winforms

像form1一样,在执行SendKeys时可能不会聚焦?

最后的主要目标是当特定过程窗口位于焦点的前面时,模拟组合键Ctrl + S。

问题是当进程窗口现在位于最前面并且我正在使用它的菜单时,每次计时器发送诸如Form1之类的键或我正在使用其菜单的进程时,都会发出蜂鸣声。不确定。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Process_Window
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();

            timer1.Enabled = true;
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            System.ComponentModel.BackgroundWorker worker = new System.ComponentModel.BackgroundWorker();

            worker.DoWork += Worker_DoWork;
            worker.ProgressChanged += Worker_ProgressChanged;
            worker.RunWorkerCompleted += Worker_RunWorkerCompleted; ;
            worker.RunWorkerAsync();
        }

        private void Worker_DoWork(object sender, DoWorkEventArgs e)
        {
            SendKeys.SendWait("^s");
        }

        private void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {

        }

        private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {

        }
    }
}

1 个答案:

答案 0 :(得分:2)

SetForeGroundWindow

您可以在调用SendKeys.SendWait()之前使用此功能,因此可以确定将Ctrl + S发送到了良好的窗口,如果我没记错名字的话,可以将SetForeGroundWindow与FindWindow一起使用。