我一直试图让我的过程的主窗口的引用相当长一段时间。我经历了很多网站寻找解决方案。但它看起来像每个人都提供了一个解决方案来获得窗口句柄,而不是窗口本身。如何获取进程的主窗口(而不是窗口句柄)?
获得进程的主窗口句柄非常简单。我似乎也像预期的那样获得了Window标题。
我经历了User32.dll提供的大部分API,但找不到我在找的东西。
我需要对窗口的引用,因为我想访问窗口类的几个成员来完成我的工作。我所指的窗口是一个WPF窗口。
在这方面的任何帮助将不胜感激:)
在此先感谢。
我一直试图让我的过程的主窗口的引用相当长一段时间。我经历了很多网站寻找解决方案。但它看起来像每个人都提供了一个解决方案来获得窗口句柄,而不是窗口本身。如何获取进程的主窗口(而不是窗口句柄)?
获得进程的主窗口句柄非常简单。我似乎也像预期的那样获得了Window标题。
我经历了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;
}
}
你试图从在同一应用程序中获得的主窗口,或从其他应用程序? – dognose
您从句柄中获取窗口:http://stackoverflow.com/questions/5822026/get-wpf-window-by-hwnd – CKII
您无法获取对驻留在不同窗口类中的窗口类的实例的引用处理。您只能获取通过Windows API公开的窗口数据。任何更多需要IPC,例如通过Windows Communication Foundation。 –