我正在搜索使用User32.dll
和FindWindow()
切换到其他应用程序的旧SetForegroundWindow()
版本的替代方法。
我确实找到了第一个使用Process.GetProcessesByName()
的替代方法,但我没有看到相应的方法切换(设置活动/前台)到该应用程序。
有没有办法在不使用旧方法的情况下使用User32.dll
?
感谢您的帮助。
修改
我接受了@Sorceri的回答,虽然这不是我想要的答案。
答案 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);