FindWindow和SetForegroundWindow的替代品?

时间:2012-07-16 20:52:31

标签: c# .net process

我正在搜索使用User32.dllFindWindow()切换到其他应用程序的旧SetForegroundWindow()版本的替代方法。

我确实找到了第一个使用Process.GetProcessesByName()的替代方法,但我没有看到相应的方法切换(设置活动/前台)到该应用程序。

有没有办法在不使用方法的情况下使用User32.dll

感谢您的帮助。

修改

我接受了@Sorceri的回答,虽然这不是我想要的答案。

4 个答案:

答案 0 :(得分:32)

答案:不。

但是,为了帮助下一个想要找到窗口并从C#激活它的想法者,这就是你要做的事情:

[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);

void ActivateApp(string processName)
{
    Process[] p = Process.GetProcessesByName(processName);

    // Activate the first application we find with this name
    if (p.Count() > 0)
        SetForegroundWindow(p[0].MainWindowHandle);
}

例如,要将记事本放在前面,您可以拨打:

ActivateApp("notepad");

作为旁注 - 对于那些试图将在你的应用程序中的窗口带到前台的人,只需拨打Activate() method

答案 1 :(得分:3)

您可以使用SetActiveWindow替代SetForeGroundWindow。我说你应该浏览所有Windows Manipulation Api Functions,看看是否有你错过的东西。

另请注意,您可以通过System.Diagnostics.Process属性获取Process.Handle对象的句柄。

答案 2 :(得分:2)

SetForeGroundWindow的替代方案是VisualBasic的AppActivate

像这样称呼

Microsoft.VisualBasic.Interaction.AppActivate("WindowTitle")

仅仅因为它在VisualBasic命名空间中并不意味着你不能在C#中使用它。

完整文档here

答案 3 :(得分:1)

您可以将System.Diagnostics.Process Object用于FindWindow等效项。目前没有SetForegroundWindow的等价物。您将需要使用Pinvoke和SetForgroundWindow。

[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);