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

标签 c# wpf windows

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

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

我浏览了 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/

相关文章:

c# - 如何使用 XmlSerializer 序列化对象类型的属性

c# - 在 MVC4 分部 View 中使用 PagedList 时的不良行为

c# - 从设置中将文本 block 内容设置为字符串

windows - Rust,Windows 10 : Diesel doesn't work, diesel setup 没有输出

c# - 免费安装程序是否可以轻松地将应用程序安装为 Windows 服务?

php - 当在Windows服务器上运行PHP的exec()函数时,它会将ASCII控制字符传递给shell吗?

从 system.object 派生的 C# 类型

C# aspx 带逗号的十进制千位和带点的小数点

wpf - 当其他列子项折叠时调整 WPF 网格列的大小?

c# - 来自 Binding ElementName 的值生成空字符串