C#列出当前打开的文件和程序

有没有办法可以获得所有打开的应用程序列表和所有打开文件的列表? 对于文件我只需要打开的文件(文档等)而不是OS的开放系统文件。 应用程序也是如此(仅限浏览器,文档处理器等)。

我已经尝试过像EnumWindows这样的Windows API中的各种function,但我无法得到我想要的function。

我最终目标的一个例子是拥有这样的列表:

应用

Microsoft Word,记事本,Mozilla Firefox

foo.txt,foo.mp3,foo.doc

我需要的只是名字,我不需要句柄等(即使我确定我必须使用它们来得到我想要的)

您可以获取正在运行的进程列表及其信息

public static string ListAllProcesses() { StringBuilder sb = new StringBuilder(); // list out all processes and write them into a stringbuilder ManagementClass MgmtClass = new ManagementClass("Win32_Process"); foreach (ManagementObject mo in MgmtClass.GetInstances()) { sb.Append("Name:\t" + mo["Name"] + Environment.NewLine); sb.Append("ID:\t" + mo["ProcessId"] + Environment.NewLine); sb.Append(Environment.NewLine); } return sb.ToString(); } 

查看用户或系统是否打开进程的唯一方法(我知道)是检查它的所有者。 如果它是系统,那么它不是由用户运行的:

 //You will need to reference System.Management.Dll and use System.Management namespace public string GetProcessOwner(string processName) { string query = "Select * from Win32_Process Where Name = \"" + processName + "\""; ManagementObjectSearcher searcher = new ManagementObjectSearcher(query); ManagementObjectCollection processList = searcher.Get(); foreach (ManagementObject obj in processList) { string[] argList = new string[] { string.Empty, string.Empty }; int returnVal = Convert.ToInt32(obj.InvokeMethod("GetOwner", argList)); if (returnVal == 0) { // return DOMAIN\user string owner = argList[1] + "\\" + argList[0]; return owner; } } return "NO OWNER"; } 

对于打开文件的列表,可以使用管理代码,这在某种程度上很难。 以下是代码项目演示相同问题的示例

您可以使用Process.GetProcesses()获得正在运行的进程列表: http : //msdn.microsoft.com/en-us/library/1f3ys1f9.aspx但是,如果它们公开某些自动化接口,您可以将它们打开的文件打开知道。