首页 > 解决方案 > 如何在 C# 中获取所有打开的窗口的名称(通过特定进程)?

问题描述

我目前正在寻找一种在 c# 中获取所有打开窗口的标题/名称(如果可能,从特定进程中获取)的方法。所以一个进程可以有多个窗口,我刚刚找到了 Process.MainWindowTitle 命令,但我想要在这个进程下运行的所有窗口的名称,而不仅仅是 MainWindowTitle。是否有命令/方法来获取列表/数组中的所有窗口标题?我在互联网上搜索,但找不到任何有效或我理解的东西。如果有人有办法做到这一点并且可以向我解释,那就太棒了。

谢谢阿基拉

编辑:我找到了这个链接(http://csharphelper.com/blog/2016/08/list-desktop-windows-in-c/)但我无法让它工作,我不明白那里发生了什么. 因此,如果有人理解这一点......或者如果不是让它在控制台中打印出所有标题。我会很感激的。

标签: c#.netwindowswindow

解决方案


using System;
using System.Diagnostics;
using System.Linq;  

//will only get process with main window title property that is not empty

Process[] processlist = Process.GetProcesses();
var processTitle = processlist.Where(c => !string.IsNullOrEmpty(c.MainWindowTitle)).Select(c => c.MainWindowTitle).ToList();

.Where(c => !string.IsNullOrEmpty(c.MainWindowTitle)是您只选择非空的主窗口标题的部分string。然后Select(c => c.MainWindowTitle)only 得到MainWindowTitle propertyeach Process。列出与条件ToList匹配的所有值a因为of是WhereList<string>propertyMainWindowTitlestring

更新的答案,几乎还是一样的。

string processname = ""; //the process you want to capture
Process[] processlist = Process.GetProcesses();
var processTitle = processlist.Where(c => c.ProcessName == processname).ToList();

仍然是相同的解释,现在您c.ProcessName == processname提供要捕获的进程(现在只会检索您提供的特定进程名称。)您现在可以调试/捕获所需的详细信息。

或参考这个解释

https://stackoverflow.com/a/17890354/2122217


推荐阅读