我已经尝试获取对我的进程的主窗口的引用已有相当一段时间了。我浏览了很多网站寻找解决方案。但看起来每个人都提供了一种解决方案来获取窗口句柄而不是窗口本身。
获取进程的主窗口句柄非常简单。我似乎也如预期得到了窗口标题。
我浏览了 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;
}
}
关于c# - 如何获取进程的主窗口(而不是窗口句柄)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18442454/