python - 如何从命令行获取打开的 Microsoft Office 程序的路径?
问题描述
我正在用 python 编写一些东西,需要知道哪些特定文件/程序是打开的。我已经映射了正在运行的进程列表来查找我正在寻找的进程的可执行路径。这适用于大多数事情,但所有 Microsoft Office 程序都在诸如WINWORD.exe
或EXCEL.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" '
如何获取实际正在编辑的文件的路径?
解决方案
我想到了。这是一个将返回正在编辑的文件的函数。
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
推荐阅读
- javascript - 如何使用 AJAX 提取的数据在 HTML/XHTML 中创建自动完成
- utf-8 - 字符编码 - utf-8 如何处理字符
- java - 如何使while循环以特定输入结束
- javascript - 获取Vue中组件标签的内容
- c# - 通过信号器从部分视图发送消息
- xcode - Xamrin.ios 异常 System.NotSupportedException:无法解析 xml «已解决»
- ios - pod spec lint 错误 - [iOS] xcodebuild:错误:意外的重复任务:
- swift - Swift 和 Storyboard,设置 contentViewController 失败
- python - 如何在 StyleGan2 自述文件示例中正确格式化命令行参数
- javascript - 如何获取用户在提示窗口中输入的三个数字的总和?JS