我一直试图在我的Process的主窗口中引用一段时间。我经历了许多寻找解决方案的网站。但看起来每个人都提供了一个解决方案来获取Window句柄而不是窗口本身。
获取进程的Mainwindow句柄非常简单。我似乎也按预期获得了Window标题。
我浏览了User32.dll提供的大部分API,但无法找到我想要的内容。
我需要对窗口的引用,因为我想访问窗口类的几个成员来完成我的工作。我指的窗口是WPF窗口。
在这方面的任何帮助将受到高度赞赏:)
提前致谢。
答案 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;
}
}