如何在C#窗口窗体中重新获得已打开窗口的焦点

本文关键字:新获得 开窗口 焦点 窗口 窗体 | 更新日期: 2023-09-27 18:00:45

我有一个windows应用程序。当我点击一个按钮时,另一个过程开始,弹出帮助窗口。我只想打开一扇窗户。因此,如果我点击按钮,我会检查流程是否已经启动。我面临的问题是如何获得我打开的窗口的焦点。

if (processes.Length == 0)
{
      Process.Start();
}
else
{
  // Need to focus on the window already opened. 
}

如何在C#窗口窗体中重新获得已打开窗口的焦点

在一篇被删除的帖子中,Vinay报告说这对他也有效:

else
{
    foreach (Process process in processes)
    {
        if (process.Id != p.Id)
        {
            SwitchToThisWindow(process.MainWindowHandle, true);
            return;
        }
    }
[System.Runtime.InteropServices.DllImport("user32.dll")] public static extern void SwitchToThisWindow(IntPtr hWnd, bool fAltTab);

您可以使用上一个Q&A在此链接,如下所示:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace ProcessWindows
{
    public partial class Form1 : Form
    {
        [DllImport("user32.dll")]
        static extern bool SetForegroundWindow(IntPtr hWnd);
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process[] p = System.Diagnostics.Process.GetProcessesByName("notepad");
            if (p.Length > 0)
            {
                SetForegroundWindow(p[0].MainWindowHandle);
            }
        }
    }
}