我有一个正在检查活动打开窗口的应用程序,它正在返回窗口的过程以及窗口标题。
这两件事情一般就足够了。但是我也想知道文件名及其进程正在使用的文件路径。
Process.StartInfo.FileName();
这不适合我,所以我决定采用不同的方法。我正在从窗口标题中获取文件和文件路径,如果它存在并形成Win32_Process表我有拉入命令行,该过程是由该开始的。
private static string GetCommandLine(Process process)
{
var commandLine = new StringBuilder(process.MainModule.FileName);
commandLine.Append(" ");
using (var searcher = new ManagementObjectSearcher("SELECT CommandLine FROM Win32_Process WHERE ProcessId = " + process.Id))
{
foreach (var @object in searcher.Get())
{
commandLine.Append(@object["CommandLine"]);
commandLine.Append(" ");
}
}
return commandLine.ToString();
}
很快我发现这还不够。所以我开始实现很多IterOp dll,例如Microsoft.Office.Interop.Word,Microsoft.Office.Interop.Excel以及Photoshop。
var ps = (Photoshop.Application)Marshal.GetActiveObject("Photoshop.Application");
return ps.ActiveDocument.FullName;
我的问题是,是否有办法绕过interOp文件并使用更通用的东西?
PS: 我知道Mac OS的类似应用程序正在使用构建辅助功能。是否有可访问性的Windows版本,我可以在代码中使用并执行此特定任务?