获取 Word 的窗口句柄以用于 WPF 窗口



我的单词加载程序中有许多WPF对话框。对于其中一个(只有一个,奇怪的是),在打开时有时不会集中注意力。我相信我需要设置其父母。

我知道有一种方法可以将WPF窗口的所有者设置为HWND,但是有什么方法可以在Word 2010中获得HWND?我找到了这个HWND属性,但它是Word 2013及以后的。除了使用GetForeGroundWindow()以外,还有其他方法可以获取Word的HWND。

我发现使用Office Interop获取特定窗口句柄有用。但是所有这些答案都是基于获取您新创建的窗口的手柄。我对其进行了一些修改以获取现有窗口,并将其塞入实用方法中。

doc是当前文档。

using System.Windows.Interop;
using System.Diagnostics;
public void SetOwner(System.Windows.Window pd)
{
    var wordProcs = Process.GetProcessesByName("winword").ToList();
    // in read-only mode, this would be e.g. "1.docx [Read-Only] - Microsoft Word"
    var procs = wordProcs.Where(x =>
          x.MainWindowTitle.StartsWith(Path.GetFileName(doc.FullName))
          &&
          x.MainWindowTitle.EndsWith("- Microsoft Word"));
    if (procs.Count() >= 1)
    {
        // would prefer Word 2013's Window.HWND property for this
        var handle = procs.First().MainWindowHandle;
        WindowInteropHelper wih = new WindowInteropHelper(pd);
        wih.Owner = handle;
    }
}

不幸的是,似乎不可能考虑具有相同文档名称的多个窗口(在不同的文件夹中),因为过程的数量永远不会大于1。但是我认为这是可以接受的限制。

最新更新