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

时间:2013-08-26 10:56:10

标签: c# wpf windows

我一直试图在我的Process的主窗口中引用一段时间。我经历了许多寻找解决方案的网站。但看起来每个人都提供了一个解决方案来获取Window句柄而不是窗口本身。

获取进程的Mainwindow句柄非常简单。我似乎也按预期获得了Window标题。

我浏览了User32.dll提供的大部分API,但无法找到我想要的内容。

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

在这方面的任何帮助将受到高度赞赏:)

提前致谢。

1 个答案:

答案 0 :(得分:2)

您可以使用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;
    }
}
相关问题