如何在C#窗口窗体中重新获得已打开窗口的焦点
本文关键字:新获得 开窗口 焦点 窗口 窗体 | 更新日期: 2023-09-27 18:00:45
我有一个windows应用程序。当我点击一个按钮时,另一个过程开始,弹出帮助窗口。我只想打开一扇窗户。因此,如果我点击按钮,我会检查流程是否已经启动。我面临的问题是如何获得我打开的窗口的焦点。
if (processes.Length == 0)
{
Process.Start();
}
else
{
// Need to focus on the window already opened.
}
在一篇被删除的帖子中,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);
}
}
}
}