2

一段时间以来,我一直在尝试获取对我的进程主窗口的引用。我浏览了许多网站寻找解决方案。但看起来每个人都提供了一种解决方案来获取窗口句柄而不是窗口本身。

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

我浏览了 User32.dll 提供的大部分 API,但找不到我要找的东西。

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

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

提前致谢。

4

1 回答 1

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;
    }
}
于 2013-08-26T11:45:21.113 回答