首页 > 解决方案 > 如何从命令行获取打开的 Microsoft Office 程序的路径?

问题描述

我正在用 python 编写一些东西,需要知道哪些特定文件/程序是打开的。我已经映射了正在运行的进程列表来查找我正在寻找的进程的可执行路径。这适用于大多数事情,但所有 Microsoft Office 程序都在诸如WINWORD.exeEXCEL.exe等一般进程下运行。我还尝试获取打开窗口及其标题的列表以查看正在编辑的文件,但窗口标题是相对路径而不是绝对路径正在编辑的文件的路径。这是一个示例:

import wmi
f = wmi.WMI()
pid_map = {}
PID = 4464 #pid of Microsoft Word
for process in f.Win32_Process():
    if not process.Commandline: continue
    pid_map[process.ProcessID] =   process.Commandline
pid_map[PID] 

输出:

'"C:\\Program Files\\Microsoft Office\\root\\Office16\\WINWORD.EXE" '

如何获取实际正在编辑的文件的路径?

标签: pythoncommand-line

解决方案


我想到了。这是一个将返回正在编辑的文件的函数。

import pythoncom

def get_office(): # creates doctype: docpath dictionary
    context = pythoncom.CreateBindCtx(0)
    files = {}
    dupl = 1
    patt2 = re.compile(r'(?i)(\w:)((\\|\/)+([\w\-\.\(\)\{\}\s]+))+'+r'(\.\w+)') #matches files, can change the latter to only get specific files
    
    #look for path in ROT
    for moniker in pythoncom.GetRunningObjectTable():
        name = moniker.GetDisplayName(context, None)
        checker = re.search(patt2,name)
        if checker:
            match = checker.group(5) #extension
            if match in ('.XLAM','.xlam'): continue #These files aren't useful
            try:
                files[match[1:]] # check to see if the file type was already documented

                match += str(dupl) 
                dupl += 1
            except KeyError:
                pass
            files[match[1:]] = name #add doctype: doc path pairing to dictionary


推荐阅读