【问题标题】:Process API is not returning the all instances of a ms word processProcess API 未返回 ms word 进程的所有实例
【发布时间】:2017-11-06 07:54:18
【问题描述】:

我正在检查 word 进程实例,我打开了多个 word 实例,但它只返回 word 的第一个实例并返回 process.Count 1 ,当我使用记事本作为进程时,它可以工作,但使用 winword 它没有用。

For Each a In p
    If Not pName.Equals("") And I <= p.Count Then
        Console.WriteLine(a)
        Console.WriteLine(p.Count)
        pName = p(I).MainWindowTitle.ToString
        File.WriteLine("Word Process Name : {0} is started on time {1}", pName, p(I).StartTime)
        fullPath = Path.GetFullPath(pName)
        File.WriteLine("Path Of the file is  : {0}", fullPath(0))
    End If
Next

【问题讨论】:

  • 您发布的代码似乎列出了磁盘上的文件。您想查看当前正在运行的 word 进程吗?看看这个stackoverflow.com/questions/11055147/…
  • 仅供参考,窗口和进程不是一回事。 Word 可以(并且通常确实)在同一进程中运行多个文档窗口。
  • 您打开的 Word 实例不超过 1 个。您可以在任务管理器的“进程”选项卡中看到一些东西。 Word是单实例程序,太大了。所以再次启动它只是让第二个实例要求第一个实例打开文档。然后它就退出了。
  • 我打开了多个单词
  • 正如汉斯所说,如果你运行 Word 两次,第二个实例只是将信息传递给第一个实例,告诉它打开一个新窗口然后退出。您将看到两个窗口,但只有一个 winword 进程。记事本不这样做。唯一的例外是,如果您正在运行两个不同的版本 Word,但到目前为止您还没有建议这样做。

标签: .net vb.net process


【解决方案1】:

我已经用 Word.Application API 解决了这个问题,你可以将它添加到表单引用添加。

Dim wordApp As Microsoft.Office.Interop.Word.Application
wordApp = Marshal.GetActiveObject("Word.Application")
For Each f In wordApp.Documents
          pName = Path.GetFileName(f.FullName).ToString()
           pPath = f.Path.ToString()
           File.WriteLine("Word Process Name : {0}  ", pName)
           File.WriteLine("File Path is: {0} ", pPath)
           File.WriteLine("File Starting Time is {0}", pTime)                                
Next

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多