如何获取进程的主窗口(而不是窗口句柄)?

我一直在试图把我的过程的主窗口引用到相当一段时间。 我经历了很多网站寻找解决scheme。 但它看起来像每个人都提供了一个解决scheme来获得窗口句柄,而不是窗口本身。

获得一个进程的主窗口句柄是非常简单的。 我似乎也如预期的那样获得了窗口标题。

我经历了User32.dll提供的大部分API,但找不到我在找什么。

我需要对窗口的引用,因为我想访问窗口类的几个成员来完成我的工作。 我所指的窗口是一个WPF窗口。

在这方面的任何帮助将不胜感激:)

提前致谢。

您可以使用HwndSource.FromHwnd方法。

这里有一个简单的LinqPad就绪例子:

 void Main() { var mw = new MainW(); mw.Show(); var hWnd = FindWindowByCaption(IntPtr.Zero, "testwindow"); var rootVisual = System.Windows.Interop.HwndSource.FromHwnd(hWnd).RootVisual; MainW m2 = (MainW)rootVisual; Thread.Sleep(500); m2.Title="is going"; Thread.Sleep(500); m2.Title="to close..."; Thread.Sleep(500); m2.Close(); } [System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint="FindWindow", SetLastError = true)] static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName); class MainW: System.Windows.Window { public MainW() { Title = "testwindow"; Width = 230; Height = 100; Background = System.Windows.Media.Brushes.AliceBlue; } }