目前使用的文件没有互操作

时间:2016-02-29 10:42:38

标签: c# com-interop

我有一个正在检查活动打开窗口的应用程序,它正在返回窗口的过程以及窗口标题。

这两件事情一般就足够了。但是我也想知道文件名及其进程正在使用的文件路径。

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版本,我可以在代码中使用并执行此特定任务?

0 个答案:

没有答案