从正在运行的程序的窗口标题中提取文本,无需处理.主窗口标题

本文关键字:窗口标题 处理 取文本 运行 程序 提取 | 更新日期: 2023-09-27 18:36:24

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

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

从正在运行的程序的窗口标题中提取文本,无需处理.主窗口标题

它可能不一定可以通过Process对象获得。例如,资源管理器.exe在标题栏中具有当前文件夹名称,但这不是MainWindowTitle。另一个选项是使用 UI 自动化来检查 UI 并报告窗口的标题。根据您面向的 .Net 版本,您可以引用 UiaComWrapper(我相信它有更多的信息和更好的性能)或 UIAutomationClient 和 UIAutomationTypes。打印所有窗口标题的简短示例:

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);
    }
}

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