【问题标题】:When using SendKeys.SendWait in backgroundworker why I can hear ever 3 seconds kind of beep?在后台工作人员中使用 SendKeys.SendWait 时,为什么我能听到 3 秒的哔哔声?
【发布时间】:2019-02-27 05:42:54
【问题描述】:

就像 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)
        {

        }
    }
}

【问题讨论】:

  • 您无法获得有关 SendKeys 代码的帮助,只有您可能知道哪个窗口获得了击键。好吧,当它发出哔哔声时可能是错误的。不要这样做。

标签: c# winforms


【解决方案1】:

SetForeGroundWindow

您可以在调用 SendKeys.SendWait() 之前使用它,这样您就可以确定已将 Ctrl+S 发送到正确的窗口,如果我没记错名称,您可以将 SetForeGroundWindow 与 FindWindow 一起使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    相关资源
    最近更新 更多