假设notepad.exe正在打开,并且它的窗口处于非活动状态。我将编写一个应用程序来激活它。怎么做?
更新:窗口标题未定义。所以,我不喜欢使用基于窗口标题的FindWindow。
我的应用程序是Winform C#2.0。感谢。
答案 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中的更多选项。