【问题标题】:How to get names of all open windows (by a specific process) in c#?如何在 C# 中获取所有打开的窗口的名称(通过特定进程)?
【发布时间】:2019-07-31 10:05:23
【问题描述】:

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

感谢阿基拉

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

【问题讨论】:

标签: c# .net windows window


【解决方案1】:
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) 只得到每个ProcessMainWindowTitle propertyToList 列出与Where 条件匹配的所有值到List<string>,因为MainWindowTitlepropertystring

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

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

【讨论】:

  • 我更新了我的问题。现在我更清楚我想要什么了。
  • 这不是我想要的,因为只包含 MainWindowTitles 而不是每个窗口的标题。
  • @AkiraK。更新了我的答案,据我了解,您将提供流程名称?
猜你喜欢
  • 2010-12-13
  • 2013-05-09
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
  • 1970-01-01
  • 1970-01-01
  • 2015-10-14
  • 2012-01-21
相关资源
最近更新 更多