我正在寻找使用和User32.dll
切换到不同应用程序的旧版本的替代方案。FindWindow()
SetForegroundWindow()
我确实找到了第一个使用的替代方法,Process.GetProcessesByName()
但我没有看到相应的方法来切换(设置活动/前台)到该应用程序。
有没有办法在不使用旧方法的情况下做到这一点User32.dll
?
感谢您的帮助。
编辑
我接受了@Sorceri 的答案,尽管这不是我想要的答案。
回答:没有。
但是,为了帮助下一个想找到一个窗口并从 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() 方法。
您可以SetActiveWindow
用作SetForeGroundWindow
. 我想说你应该检查所有的Windows Manipulation Api Functions,看看你是否遗漏了一些东西。
另外请注意,您可以System.Diagnostics.Process
通过Process.Handle
属性获取对象的句柄。
SetForeGroundWindow 的替代方法是 VisualBasic 的 AppActivate
像这样称呼它
Microsoft.VisualBasic.Interaction.AppActivate("WindowTitle")
Just because it is in the VisualBasic namespace doesn't mean you can't use it in C#.
Full Documentation here
您可以使用System.Diagnostics.Process Object
FindWindow 等效项。目前没有 SetForegroundWindow 的等效项。您将希望将 Pinvoke 与 SetForgroundWindow 一起使用。
[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);