从 运行 程序的 Window 标题中提取没有 process.MainWindowTitle 的文本

Extract Text from a running Program's Window Title without process.MainWindowTitle

我正在尝试从 Creo 2.0 Window 标题中提取文本。该文本将用于创建一个文件夹,该文件夹的标题与打开的部件号相同,并且在 Window 标题中。我遇到的问题是,我可以遍历并使用 process.MainWindowTitle 找到打开的应用程序的所有 Window 标题,但出于某种原因,Creo 没有 Main Window 标题。它也没有使用任何其他 "process." 函数的文本。我认为如果信息像其他普通程序一样位于标题栏中,则必须位于某个位置,但我只是没有以正确的方式进行处理。是否有另一个使用 C# 的进程我可以用来尝试完成此操作?

如果我需要提供任何其他信息,请告诉我。感谢您的帮助!

它不一定可以通过 Process object 获得。 Explorer.exe,例如,标题栏中有当前文件夹名称,但这不是 MainWindowTitle。另一种选择是使用 UI 自动化检查 UI 并报告 window 的标题。根据您定位的 .Net 版本,您可以参考 UiaComWrapper(我相信它有更多信息和更好的性能)或 UIAutomationClient 和 UIAutomationTypes。打印所有 window 个标题的简短示例:

using System;
using System.Diagnostics;
using System.Windows.Automation;

static void Main(string[] args)
{
    var windows = AutomationElement.RootElement.FindAll(TreeScope.Descendants, 
        new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Window));
    foreach(AutomationElement window in windows)
    {
        var props = window.Current;
        var proc = Process.GetProcessById(props.ProcessId);
        Console.WriteLine("{0} {1} {2}", props.ProcessId, proc.ProcessName, props.Name);
    }
}

请注意,如果您想获得有关提升进程的信息,您需要 运行 此提升。