查找并激活应用程序窗口

时间:2010-05-12 10:01:27

标签: c# .net

假设notepad.exe正在打开,并且它的窗口处于非活动状态。我将编写一个应用程序来激活它。怎么做?

更新:窗口标题未定义。所以,我不喜欢使用基于窗口标题的FindWindow。

我的应用程序是Winform C#2.0。感谢。

3 个答案:

答案 0 :(得分:25)

你需要P /调用SetForegroundWindow()。 Process.MainWindowHandle可以为您提供所需的句柄。例如:

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

class Program {
    static void Main(string[] args) {
        var prc = Process.GetProcessesByName("notepad");
        if (prc.Length > 0) {
            SetForegroundWindow(prc[0].MainWindowHandle);
        }
    }
    [DllImport("user32.dll")]
    private static extern bool SetForegroundWindow(IntPtr hWnd);
}

如果您有多个记事本副本正在运行,请注意歧义。

答案 1 :(得分:0)

您需要PInvoke Windows API调用,例如FindWindow和/或EnumWindows和GetWindowText(用于标题)。理想情况下,您可能还想使用GeWindowThreadProcessId,以便将其与实际过程联系起来。

答案 2 :(得分:0)

你必须使用这些的组合 -

Toggle Process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden at runtime

Bring another processes Window to foreground when it has ShowInTaskbar = false

您需要找到窗口的类并对其进行搜索。 Read more about it here

仅供参考,记事本的类名是“记事本”(没有引号)。您可以使用Spy ++验证它。

注意:如果使用无窗口运行应用程序的窗口,则无法激活它。阅读API here中的更多选项。